博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Flie
阅读量:4599 次
发布时间:2019-06-09

本文共 5293 字,大约阅读时间需要 17 分钟。

七、Docker File

  • .dockeringore:打包忽略的文件列表,每行写一个文件的路径,可使用通配符
  • FROM指令:指定基础镜像
FROM 
[:
] or FROM
@
~]# mkdir img_work  #创建工作目录~]# cd img_work/img_work]# vim Dockerfile  #注意D大写# Description: my image  #描述信息FROM centos:centos7.5.1804  #基础镜像LABEL maintainer="Dongfei 
" #元数据
  • COPY指令:
COPY ["
",..."
"] 1.
必须是build上下午中的路径,不能是父目录中的文件 2.如果
是目录,则其内部文件或子目录会被递归复制,但
目录本身不会被复制 3.如果指定多个
,或在
中使用了通配符,则
必须是一个目录,且必须以/结尾 4.如果
事先不存在,它将会被自动创建,这包括其父目录
# 复制网页文件img_work]# vim DockerfileCOPY ["index.html","/var/www/html/"]img_work]# vim index.html

My Docker website.

img_work]# docker build -t tinyhttpd:v0.1 ./img_work]# docker run --name h1 --rm tinyhttpd:v0.1 cat /var/www/html/index.html

My Docker website.

# 复制yum源img_work]# cp -r /etc/yum.repos.d/ ./img_work]# vim DockerfileCOPY ["yum.repos.d/","/etc/yum.repos.d/"]img_work]# docker build -t tinyhttpd:v0.2 ./ img_work]# docker run --name h2 --rm tinyhttpd:v0.2 ls /etc/yum.repos.d/
  • ADD指令:将宿主机的文件打包到docker镜像,支持URL和tar文件
ADD ["
",..."
"] 1.
如果是本地的tar文件,则会自动展开至镜像中 2.
如果是URL的tar文件,则不会自动展开
img_work]# wget http://nginx.org/download/nginx-1.16.0.tar.gzimg_work]# vim DockerfileADD ["http://nginx.org/download/nginx-1.16.0.tar.gz","/usr/local/src/"]ADD ["nginx-1.16.0.tar.gz","/usr/local/src/"]img_work]# docker build -t tinyhttpd:v0.3 ./img_work]# docker run --name h3 --rm tinyhttpd:v0.3 ls /usr/local/src/
  • WORKDIR:指定工作目录,逆序往上找到第一个就是工作路径
WORKDIR /usr/local/src/ADD http://nginx.org/download/nginx-1.16.0.tar.gz ./ADD ["nginx-1.16.0.tar.gz","./"]
  • VOLUME:只能挂载Docker-managed volume
VOLUME /data/mysql/
  • EXPOSE:用于为容器打开指定要监听的端口实现以外部通信,只能绑定暴露容器中的端口,动态绑定在宿主机的随机端口
EXPOSE 
[/
][
[/
]...] #protocol 协议
EXPOSE 80/tcp 22/tcp
  • ENV:定义环境变量,可注入容器,可以被ADD,COPY等指令所调用
ENV 
=
...
ENV DOC_ROOT="/var/www/html/"COPY ["index.html","$DOC_ROOT"]
# docker run --name h5 -e HTTP_PORT=8888 --rm tinyhttpd:v0.5 printenv #启动容器时注入环境变量
  • RUN:在docker build时执行命令
RUN cd /usr/local/src/ && \    tar -xf nginx-1.16.0.tar.gz
  • CMD:在docker run时执行的默认命令,可以写多个,但只有最后一个生效
1.CMD   #使用bash解析命令执行2.CMD ["
","
","
"]3.CMD ["/bin/bash","-c","
","
"]4.CMD ["
","
"] #CMD的参数传递给ENTRYPOINT
image_work2]# vim DockerfileFROM busyboxLABEL Author="Dongfei"ENV WEB_DOC_ROOT="/data/web/html"RUN mkdir -p ${WEB_DOC_ROOT} && \    echo '

Busybox httpd server.

' > ${WEB_DOC_ROOT}/index.htmlCMD /bin/httpd -f -h ${WEB_DOC_ROOT}image_work2]# docker build -t tinyhttpd:v0.7 ./image_work2]# docker image inspect tinyhttpd:v0.7 |grep "CMD" "CMD [\"/bin/sh\" \"-c\" \"/bin/httpd -f -h ${WEB_DOC_ROOT}\"]"# docker run --name tinyweb7 -it --rm -P tinyhttpd:v0.7# docker exec -it tinyweb7 /bin/sh
CMD ["/bin/httpd","-f","-h","/data/web/html"]image_work2]# docker image inspect tinyhttpd:v0.8 |grep "CMD"                       "CMD [\"/bin/httpd\" \"-f\" \"-h ${WEB_DOC_ROOT}\"]"
  • ENTRYPOINT:类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序;与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序
1.ENTRYPOINT   #使用bash解析命令执行2.ENTRYPOINT ["
","
","
"]3.ENTRYPOINT ["/bin/bash","-c","
","
"]
# vim DockerfileFROM busyboxLABEL Author="Dongfei"ENV WEB_DOC_ROOT="/data/web/html"RUN mkdir -p ${WEB_DOC_ROOT} && \    echo '

Busybox httpd server.

' > ${WEB_DOC_ROOT}/index.htmlENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}# docker build -t tinyhttpd:v0.10 ./# docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.10
img3]# vim entrypoint.sh#!/bin/shcat > /etc/nginx/conf.d/www.conf << EOFserver  {        server_name $HOSTNAME;        listen ${IP:-0.0.0.0}:${PORT:-80};        root ${NGX_DOC_ROOT:-/usr/share/nginx/html/};        }EOFexec "$@"  #执行所有传入的参数img3]# vim DockerfileFROM nginx:1.14-alpineLABEL maintainer="Dongfei"ENV NGX_DOC_ROOT="/data/web/html/"ADD index.html ${NGX_DOC_ROOT}ADD entrypoint.sh /bin/CMD ["/usr/sbin/nginx","-g","daemon off;"]ENTRYPOINT ["/bin/entrypoint.sh"]img3]# vim index.html

dongfei index

img3]# docker build -t myweb:v0.1 ./# docker run --name myweb1 --rm -P myweb:v0.1[root@docker ~]# docker exec -it b41252ebbaa8 sh/ # wget -O - -q b41252ebbaa8

dongfei index

注意:json数组中,注意要使用双引号

  • USER:指定用户
USER 
|
  • HEALTHCHECK:容器健康监测
--interval=DURATION  :每隔多次时间检测一次,默认30s--timeout=DURATION :每次检测超时时长,默认30s--start-period=DURATION :等待主进程启动的时间,默认0s--retries=N :检测几次失败任务为false,默认3次
0: success  :命令返回值1:unhealthy2:reserved
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
EXPOSE 80/tcpHEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
  • SHELL:设置使用的shell,默认使用/bin/sh
  • STOPSIGNAL signal :设置使用docker stop命令停止容器时向主进程发的信号
  • ARG:定义Dockerfile变量,在docker build 传值
ARG author="Dongfei"LABEL maintainer="${author}"
  • ONBUILD:用于在Dockerfile中定义一个触发器,当其他Dockerfile将自己的镜像当做基础镜像时执行;不能自我嵌套,不能执行MAINTAINER指令
ONBUILD ADD http://xxxx.bat

转载于:https://www.cnblogs.com/L-dongf/p/11028728.html

你可能感兴趣的文章
win10 系统右键菜单不显示文字(只有小图标)修复方法
查看>>
PAT A1009 Product of Polynomials (25 分)——浮点,结构体数组
查看>>
Xen虚拟机克隆实战
查看>>
js文件三斜杠注释///reference path用途
查看>>
Ruby(或cmd中)输入命令行编译sass
查看>>
ThreadPoolExecutor线程池
查看>>
开源许可证的选择
查看>>
ZJOI2019二试游记
查看>>
一致性hash
查看>>
Oracle创建用户、角色、授权、建表
查看>>
umdh windbg分析内存泄露
查看>>
Zabbix
查看>>
属性选择器
查看>>
Mysql笔记4数据表操作1
查看>>
运算符重载
查看>>
spring boot + mybaties plus
查看>>
java----Java的栈,堆,代码,静态存储区的存储顺序和位置
查看>>
UITableView, 表视图
查看>>
教训 Mac下装windows系统 失败后 磁盘空间丢失
查看>>
poj2376 Cleaning Shifts 区间贪心
查看>>