概述
通常在镜像仓库下载images 镜像无法满足当前业务软件运行要求,需要安装一些软件包并重新生成images镜像后进行大批量部署。使用docker commit和docker build 2种方式构建镜像。
commit构建镜像
#命令格式
docker commit -a="作者" -m="说明" -p 容器id/容器名称 镜像新名称:镜像版本
# 参数说明
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker commit 构建镜像三部曲
(1)运行容器
docker run -d -it --name webserver -p 8080:80 nginx
(2)修改容器 (容器内修改)
echo "hello" > /usr/share/nginx/html/hello.html
(3)构建新镜像
docker commit webserver nginx-202206
(4)查看镜像
docker images nginx-202206
(5)docker run运行
docker run -d -it --name nginx02 -p 8091:80 nginx-202206
(6)访问测试
[root@localhost /]# curl 192.168.100.95:8091/hello.html
hello
(7)文件挂载
docker run -d --name nginx01 -p 8090:80 -v /nginx/public:/usr/share/nginx/html -v /nginx/config:/etc/nginx/conf.d nginx-202206
dockerFile构建镜像
dickerFile 参数
FROM 指定基础镜像
MAINTAINER 指定作者,一般都是姓名 + 邮箱
LABEL 指定标签信息
USER 设置容器运行时的用户
RUN 在build过程要运行的命令 (在容器外运行,也就是在宿主机运行的命令,在这里我们可以给容器安装一些应用程序 yum install xxxx)
ADD 添加文件到镜像中,如果.tar.gz文件的话, 会自动解压
COPY 类似ADD,将文件拷贝到镜像,不会解压压缩文件
ENV 设置环境变量
VOLUME 设置文件挂载,默认是匿名挂载
EXPOSE 暴露端口,指定容器运行时开放的端口,运行也需要开放这个端口才能访问 docker run -d -p 8080:8080 镜像id
CMD 容器运行时要执行的命令(在容器内运行的命令),可用来运行默认要运行的程序,只有最后一个CMD才会运行,且只运行一次
ENTRYPOINT 和CMD一样,但是可以追加命令;ONBIUILD 当构建一个被继承dockerFile,这个时候就会运行ONBUILD 指令,属于触发指令
WORKDIR 指定工作目录,也就是登陆后默认进去的目录;
使用 dockerFile创建镜像
(1)创建 dockerFile_nginx文件
vim dockerFile_nginx
FROM nginx-202206
COPY ./hello.html /usr/share/nginx/html
(2)docker build 构建镜像
docker build -f dockerfile_nginx -t webnginx:v1.1 .
# 参数说明
-f 需要构建的脚本文件
-t tag的缩写,构建后的镜像名称:版本号
(3)查看镜像
[root@localhost mnt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
webnginx v1.1 11917097ffd6 5 minutes ago 141MB
nginx-202206 latest 756b1c638161 About an hour ago 141MB
nginx latest 605c77e624dd 5 months ago 141MB
(4)运行镜像
docker run -d -it --name nginxA -p 8095:80 webnginx:v1.1
(5)测试
[root@localhost mnt]# curl 192.168.100.95:8095/hello.html
dockerFile
镜像保存、加载
(1)镜像保存
#命令格式
docker save 镜像id/镜像名称 -o /本地目录/文件名称
docker save webnginx:v1.1 -o /opt/webnginx.tar
(2)load加载镜像
docker load -i /opt/webnginx.tar