UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修正作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,UnionFs联合文件系统是Docker镜像的根本,镜像可以通过分层来进行继续,基于根本镜像(没有父镜像),可以制作各种详细的运用镜像特性:一次同时加载多个文件系统,但从表面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样终极的文件系统会包含所有底层的文件和目录

Docker镜像加载事理

Docker的镜像实际上由一层一层的UnionFs文件系统组成bootfs:紧张包含 bootloader和 Kernel,bootloader紧张是勾引加 kernel,Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是bootfs,这一层与我们范例的Linux/Unix系统是一样的,包含bootfs加载器和内核,当bootfs加载完成之后全体内核就都在内存中了,此时内存的利用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
rootfs:在 bootfs之上,包含的便是范例 Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs便是各种不同的操作系统发行版,比如:Ubuntu,、CentOS等等

jspselectreadonly33个常见问题超全Windows排查手册 HTML

大略理解:

1. 对付Docker安装OS来说:便是Docker利用了Linux本身的bootfs,只须要安装自己所需的rootfs 2. 对付Docker安装普通镜像来说:便是Docker本身是分层下载镜像,以是可以提取出公共层镜像,进行复用

Docker镜像的特点

Docker镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部

这一层便是我们常日说的容器层,容器之下的都叫镜像层

-

Commit镜像

# 提交本地镜像 # -a:作者信息 -m:描述信息 容器ID 镜像名称:版本信息docker commit -a="test" -m="test" 容器id tomcat01:1.0Docker容器数据卷什么是容器数据卷

容器之间可以有一个数据共享的技能!
Docker容器中产生的数据,同步到本地!

这便是卷技能!
目录的挂载,将我们容器内的目录,挂载到Linux上面!

容器数据卷利用命令

# 命令docker run -it -v 主机目录:容器内目录 /bin/bash挂载MySQL数据库到Liunx宿主机

# 1. 下载MySQLdocker pull mysql# 2. 启动并挂载 -e:特殊把稳须要设置密码docker run -d -p 3344:3306 -v /home/conf:/etc/mysql/conf.d -v /home/logs:/logs -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

此时我们利用远程连接软件会报错

-

# 办理报错# 1. 进入容器内docker exec -it 容器ID /bin/bash# 2. 进入MySQLmysql -uroot -p123456# 3. 授权mysql> GRANT ALL ON . TO 'root'@'%';# 4. 刷新权限:mysql> flush privileges;# 5. 更新加密规则:mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;# 6. 更新root用户密码:mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';# 7. 刷新权限:mysql> flush privileges;具名和匿名挂载

-v 容器内路径 # 匿名挂载-v 卷名:容器内路径 # 具名挂载-v 宿主机路径:容器内路径 # 指定路径挂载

Docker容器内的卷,在没有指定目录的情形下都在/var/lib/docker/volumes/xxx/_data下

拓展:绑定权限

# 通过 -v 容器内路径:ro rw 改变读写权限ro # readonly 只读rw # readwrite 可读可写docker run -d nginx01 -v nginxdemo:/etc/nginx:ro nginxdocker run -d nginx01 -v nginxdemo:/etc/nginx:rw nginx# ro:只要看到ro就解释这个路径只能通过宿主机来操作,容器内部是无法操作数据卷容器挂载

目的:实现多个容器间的数据同步(多个MySQL间共享数据)

# 利用 --volumes-from 容器名称 此命令实现数据卷容器挂载docker run -d --name mysql02 -p 3345:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysqlDockerFile

DockerFile是用来构建Docker镜像的文件(命令参数脚本)

DockerFile构建指令

FROM # 根本镜像,统统从这里开始构建MAINTAINER # 镜像是谁写的, 姓名+邮箱RUN # 镜像构建的时候须要运行的命令ADD # 步骤,tomcat镜像,这个tomcat压缩包!
添加内容 添加同目录WORKDIR # 镜像的事情目录VOLUME # 挂载的目录EXPOSE # 保留端口配置CMD # 指定这个容器启动的时候要运行的命令,只有末了一个会生效,可被替代ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令COPY # 类似ADD,将我们文件拷贝到镜像中ENV # 构建的时候设置环境变量!
创建一个自己的CentOS镜像创建DockerFilevim mycentos编写DockerFileFROM centos MAINTAINER MT<1746344046@qq.com> ENV MYPATH /usr/local WORKEDIR $MYPATH RUN yum -y install vim EXPOSE 80 CMD /bin/bash构建自己的镜像docker build -f mycentos -t mycentosdemodo:1.0 .查看镜像天生历史docker history 镜像ID创建Tomcat镜像

1.准备镜像文件:Tomcat和JDK的压缩包

2.编写DockerFile

FROM centosMAINTAINER fortuneteller<1746344046@qq.com>COPY README.txt /usr/local/README.txtADD jdk-8u251-linux-x64.tar.gz /usr/localADD apache-tomcat-9.0.35.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_251ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35ENV CATALINA_BASH /usr/local/apache-toacat-9.0.35ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD ["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh", "run"]

3.打包镜像

# 这里利用的是Dockerfile来明白的脚本,以是省略-fdocker build -t mytomcat .

4.启动镜像

docker run -d -p 3344:8080 --name mttomcat -v /home/fortuneteller/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/fortuneteller/tomcat/logs:/usr/local/apache-tomcat-9.0.35/logs mytomcat

5.测试运行

6.在宿主机的/home/fortuneteller/tomcat/test目录下创建WEB-INF目录与mt.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>docker</title></head><body>----------welcome------------<%="这是一个测试页面"%></body></html>

7.在WEB-INF目录下编写web.xml文件

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>test</display-name></web-app>

8.测试访问

本地镜像上传阿里云

1.上岸阿里云容器镜像做事

2.创建命名空间

3.创建仓库

4.设置固定密码

5.查看自己的推送命令

6.利用推送命令完成上传

7.拉取时同理根据阿里云提示命令完成即可

Docker总结

-

Docker支配SpringBoot项目

1.利用Maven构建得到jar包

2.编写Dockerfile

FROM java:8COPY .jar /app.jarCMD ["--server.port=8080"]EXPOSE 8080ENTRYPOINT ["java", "jar", "app.jar"]

3.上传Docker与jar包到Linux做事器

4.利用命令得到镜像

docker build -t ideatest .

5.利用命令查看获取到镜像编号

docker images

6.启动镜像

docker run -d -p 3344:8080 ideatest # 3344端口须要提前在阿里云放开

7.测试访问

在浏览器输入:做事器ip:3344

原文链接:https://developer.aliyun.com/article/769273

本文为阿里云原创内容,未经许可不得转载。