Docker制作镜像(四)
Docker制作镜像(四)
众所周知,docker的镜像是有分层机制的,比如当你下载一个镜像时,你常常会看到以下画面
你发现pull complete了许多,这些全是文件的分层。
这样有什么优势呐?
文件出现分层了之后,如果不同的环境有相同的文件分层就可以不用下载了,对吧
容器和镜像的区别就是,容器就是在镜像的最上层加了一层读写层,所有对容器的修改都在最上层,不会对镜像产生影响。
那么我们制作镜像就可以利用容器来制作。
制作镜像的方式
1.基于容器创建
2.基于Dockerfile创建
3.maven插件构建(原理也是基于Dockerfile)
一、基于容器
1 | docker commit [参数] 容器ID 镜像名:版本号 |
1 | 参数说明: |
二、使用Dockerfile
编写Dockerfile文件就能制作镜像 。就是用命令行制作镜像。
1.编写Dockerfile文件
2.docker build 制作镜像
3.docker run 运行镜像成一个容器
4.docker push 发布镜像(Docker Hub、阿里云镜像仓库)
dockerfile有许多命令行。
基础知识
1.所有关键字必须大写
2.执行顺序从上到下
3.每一行命令都会生成一个镜像层
4.#表示注释
1 | FROM #指定基础镜像 |
实战测试
构建一个相对完整的centos镜像,编写dockerfile镜像
mydockerfile:
1 | FROM centos |
运行docker build,执行镜像
docker build -f dockefile的地址 -t 生成的镜像名:版本号 .
1 | docker build -f mydockerfile -t mycentos:1.0 . |
三、基于maven插件制作镜像
修改docker配置文件,允许docker远程访问,开启2375端口
1.编辑docker文件 /usr/lib/systemd/system/docker.service
1 | vim /usr/lib/systemd/system/docker.service |
2.修改ExecStart行,增加内容 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ,修改后如下:
3.重新加载docker
1 | systemctl daemon-reload |
4.配置完成后 浏览器访问 http://192.168.30.108:2375/version
ip地址要换成你自己的ip地址,如果看到docker的版本信息,就说明配置成功
5.在工程pom文件中加入
1 | <!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin--> |
6.在其项目目录下输入打包命令
1 | mvn clean package -Dmaven.test.skip=true docker:build |
7.在linux中输入docker images 发现镜像成功打包,nice!