Docker基础(4)——Dockerfile书写

云计算

Docker中制作镜像一共有两个方法:

创新互联服务项目包括西湖网站建设、西湖网站制作、西湖网页制作以及西湖网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,西湖网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到西湖省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

1. 基于容器制作镜像:

2. 基于Dockerfile制作镜像;

docker build …

Dockerfile的制作步骤:

1.创建一个目录;

2.在目录中创建一个首字母大写的文件,供docker build识别;

3.因为Dockerfile的执行环境在创建的目录中,所以可以创建相对应的文件,供dockerfile使用;

ex:

[root@master~]#lsdocimage
Dockerfileindex.html
[root@master~]#catdocimage/Dockerfile
FROMbusybox:latest

LABELmaintainer="hevttc"

ENVDOC_ROOT="/tmp/"\\
VOLUME_ROOT="/data/mydata"\\
ARGU="/usr/sbin/"

COPYindex.html/tmp/

VOLUME${VOLUME_ROOT}

RUNifconfig-a&&\\
cat${DOC_ROOT}index.html

Dockerfile书写格式:

Dockerfile Format

“#”开头的行是注释行(可以多行,任意位置);

INSTRUCTION arguments

Docker是顺序执行Dockerfile中的内容,注意书写顺序;

Dockerfile中几个重要的指令:

1.FROM (指定基准镜像)

2.LABEL(写入当前Dockerfile的制作者信息);

3.COPY(将宿主机的文件拷贝至镜像中);

4.ADD(类似于COPY指令,支持TAR文件和URL路径);

5.WORKDIR(用于为Dockerfile中所有的RUN, CMD, ENTRYPOINT, COPY和ADD指定设定工作目录;);

6.VOLUME(用于在image中创建一个挂载点目录,可以用于在Docker Host上挂载卷);

个人并不建议使用:这是Docker daemon创建托管卷,并不是绑定挂载;

7.EXPOSE(为容器打开要监听的端口,实现与外部的通信);

EXPOSE [/] [/] [/] …

用于指定传输层协议,可为TCP或UDP二者之一,默认为TCP;

8.ENV(为镜像定义环境变量,可以被其他指令调用,build_time和run_time都可被使用);

调用格式:

$variable_name或${variable_name}

9.ARG (在创建镜像是build_time使用的变量,一般用ARG写版本号和作者);

10.RUN(用于指定Docker build过程中运行的程序);

11.CMD(类似于RUN命令,在run_time执行);

12.ENTRYPOINT(类似于CMD指令)

[root@master~]#catdocimage1/entrypoint.sh
#!/bin/sh

exec$@
[root@master~]#catdocimage1/Dockerfile
FROMnginx:1.14-alpine

COPYentrypoint.sh/bin/

CMD["/usr/local/nginx","-g","daemonoff;"]

ENTRYPOINT["/bin/entrypoint.sh"]
[root@master~]#lldocimage1/
总用量8
-rw-r--r--1rootroot12911月120:42Dockerfile
-rwxr-xr-x1rootroot1911月120:16entrypoint.sh

命令执行图

创建一个Dockerfile;

[root@www~]#mkdirdocimage
[root@www~]#vimdocimage/Dockerfile
[root@www~]#
[root@www~]#vimdocimage/test.txt
[root@www~]#catdocimage/Dockerfile
FROMnginx:1.14-alpine

LABELmaintainer="liujingyu"

ENVDOC_ROOT="/tmp"\\
VOLUME_ROOT=/data/mydata

COPYtest.txt${DOC_ROOT}

VOLUME${VOLUME_ROOT}

RUNecho123>${DOC_ROOT}/test.txt

CMDcat${DOC_ROOT}/test.txt
[root@www~]#
[root@www~]#catdocimage/test.txt
THISisDockerTEST;

用Dockerfile创建镜像:

[root@www~]#dockerbuilddocimage/-tljymyy/nginx:v0.2
SendingbuildcontexttoDockerdaemon3.072kB
Step1/7:FROMnginx:1.14-alpine
--->77bae8d00654
Step2/7:LABELmaintainer="liujingyu"
--->Usingcache
--->a012ac4c6f51
Step3/7:ENVDOC_ROOT="/tmp"VOLUME_ROOT=/data/mydata
--->Usingcache
--->ee6ed363bfde
Step4/7:COPYtest.txt${DOC_ROOT}
--->Usingcache
--->a416671fde2a
Step5/7:VOLUME${VOLUME_ROOT}
--->Usingcache
--->84bf38b22301
Step6/7:RUNecho123>${DOC_ROOT}/test.txt
--->Usingcache
--->756cd9857096
Step7/7:CMDcat${DOC_ROOT}/test.txt
--->Runningina2f99fcc5fba
Removingintermediatecontainera2f99fcc5fba
--->dac468a636e0
Successfullybuiltdac468a636e0
Successfullytaggedljymyy/nginx:v0.2
[root@www~]#dockerimagels
REPOSITORYTAGIMAGEIDCREATEDSIZE
ljymyy/nginxv0.2dac468a636e02minutesago17.7MB

运行此镜像:

[root@www~]#dockercontainerrun--rm--namengx1ljymyy/nginx:v0.2
123


当前名称:Docker基础(4)——Dockerfile书写
路径分享:http://scyanting.com/article/cjscds.html