第六节、Docker file制作镜像文件

2019-04-17  本文已影响0人  妄语莫言

容器镜像文件的制作一般分为两种:
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


上一篇下一篇

猜你喜欢

热点阅读