容器镜像文件的制作一般分为两种:
1、基于运行中容器制作的镜像,如开启一个容器后安装一系列软件包后利用docker commit命令将容器运行中的最上层的可写层(镜像的多层挂载下面层都是只读层)打包形成新的镜像image.
2、基于Dockerfile制作镜像,一个Dockerfile文件是一个文本文件,里面是一堆指令调用的集合
Dockerfile Format (语法格式)
一般分成两种语句注释语句及指令语句,一般不区分大小写,但是约定俗成指令用大写
指令自上而下依次执行
制作镜像时先创建专用的工作目录(自定义),然后创建Dockerfile文件,Dockerfile引用的文件都需要放到该工作目录下,也可以创建一个子目录将所有引用文件都放在该子目录下,如果有不需要打包进去的文件,可以创建一个.dockeringore文件(文件排除列表),将不需要打包文件的路径逐行添加到该文件中,这样制作镜像时会自动忽略这些文件
Dockerfile文件编辑完成后使用docker build命令生成新的镜像打好标签推送到对应的仓库
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 4ab4c602aa5e 2 weeks ago 1.84kB
nginx latest 06144b287844 3 weeks ago 109MB
busybox latest e1ddd7948a1c 8 weeks ago 1.16MB
[root@localhost ~]# cd /
[root@localhost /]# mkdir mkimages
[root@localhost /]# cd /mkimages/
[root@localhost mkimages]# echo "helloworld">>index.html
[root@localhost mkimages]# vim Dockerfile
#第一行指定基础镜像,默认下从本地找,再从dockerhub上寻找,标签tag默认是最新latest,也可以用仓库@哈希码的格式
FROM busybox:latest
#添加维护者信息,MAINTAINER(旧版本使用),现在使用标签LABLE
MAINTAINER "allan<345654857@qq.com>"
#LABLE maintainer= "allan<345654857@qq.com>"
#COPY将宿主机上工作目录中的文件拷贝到容器中对应的目录下
COPY index.html /data/web/html/
基于以上3行命令可以制作一个最简单的镜像,并打上标签tag
[root@localhost mkimages]# docker build -t b1test:v1.1 ./
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM busybox:latest
---> e1ddd7948a1c
Step 2/3 : MAINTAINER "allan <345654857@qq.com>"
---> Running in 75315e147fd3
Removing intermediate container 75315e147fd3
---> c0555949d74b
Step 3/3 : COPY index.html /data/web/html/
---> 382c7e0f6ce5
Successfully built 382c7e0f6ce5
Successfully tagged b1test:v1.1
[root@localhost mkimages]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
b1test v1.1 382c7e0f6ce5 17 seconds ago 1.16MB
hello-world latest 4ab4c602aa5e 2 weeks ago 1.84kB
nginx latest 06144b287844 3 weeks ago 109MB
busybox latest e1ddd7948a1c 8 weeks ago 1.16MB
#运行一个容器检查镜像可以发现文件已经拷贝到对应目录下
[root@localhost mkimages]# docker container run --name b1 --rm b1test:v1.1 cat /data/web/html/index.html
helloworld
继续添加其他语句
FROM busybox:latest
MAINTAINER "allan <345654857@qq.com>"
#指定镜像的工作目录,ADD命令将软件包拷贝进去
WORKDIR /usr/local/src/
#ADD支持URL可以直接网上下载软件包
ADD nginx-1.15.2.tar.gz ./
#ADD http://nginx.org/download/nginx-1.15.4.tar.gz /usr/local/src/
#镜像指定数据卷
VOLUME /data/mysql/
#指定默认暴露的端口,动态绑定宿主机上空闲的端口,运行容器数加参数P可以暴露
EXPOSE 80/tcp
网友评论