爱网卡,sem和seo是什么职业岗位,网站国际化建设方案,网站开发技术构架docker容器中 做镜像是重要的技能。 docker commit只能制作比较简单的镜像#xff0c; 要制作比较完善的镜像#xff0c; 自定义程度比较高的#xff0c; 就需要用到dockerfile dockerfile可以回溯历史 动态生成镜像。 FROM是基础镜像 CMD是在容器创建的时候默认的启动命令 … docker容器中 做镜像是重要的技能。 docker commit只能制作比较简单的镜像 要制作比较完善的镜像 自定义程度比较高的 就需要用到dockerfile dockerfile可以回溯历史 动态生成镜像。 FROM是基础镜像 CMD是在容器创建的时候默认的启动命令 CMD是一个数组是有固定的格式 每个参数是数组里面的元素 /bin/ls     CMD [/bin/ls]
/bin/ls -l -a    CMD  [/bin/ls,-l,-a]#   ${ENTRYPOINT}  是命令
#   ${-${CMD}}   是参数
#   ${} 是所有的参数选项之和
#   $1是第一个参数 
#   $2 是第二个参数
#   ...
#   $n 是第n个参数
#   $ 是所有的参数之和
#   ${-} 代表前面的变量没有设置~]# echo  ${AA} ~]# echo  ${AA-abc}
abc
#   减号-后面代表前面没有设置的时候用这个参数~]# AA123~]# echo  ${AA-abc}
123
#   如果AA设置了就用设置的值~]# unset AA~]# echo  ${AA-abc}
abc
#   如果把AA设置的值删了就用减号后面的值了
#   所以
#   ${-${CMD}的意思就是如果设置参数了就用参数如果没有设置就用CMD
#   这个CMD就是默认的启动参数如果没有设置就用CMD写的命令来启动
#   ENTRYPOINT是如果设置了那么CMD就变成选项了。
#   ENTRYPOINT一旦设置了就必须执行
~]# cat  img1 
#!/bin/bash
CMD/bin/ls -l
ENTRYPOINTecho
${ENTRYPOINT} ${-${CMD}}
~]# ./img1
/bin/ls -l~]# ./img1  id
id
#  ENTRYPOINT设置成了echo命令后面的CMD就变成了参数被输出到屏幕
#  所以ENTRYPOINT设置了就必须执行
~]# cat myimg/Dockerfile 
FROM  mylinux:latest
ENTRYPOINT [echo]
CMD [/bin/ls, -l]
# FROM ENTRYPOINT CMD这三个指令是dockerfile里面的核心指令文件扩展名为 .tar  .tar.gz .tar.bz2 .tar.xz .tar.tgz  这些类型的文件 ADD指令会把这些文件包解压 COPY指令不会解压这些文件包 做镜像的时候所有的文件都要放在做镜像的那个目录里面也就是Dockerfile所在的目录里   指令  说明  FROM  指定基础镜像  ENTRYPOINT  默认容器的启动命令  CMD  有ENTRYPOINT时CMD是启动参数没有ENTRYPOINT时CMD是启动命令 可以容易被docker run 命令覆盖参数比如docker run myimage echo Good!  ADD  把文件拷贝到容器内并自动解压容器联网可下载文件比如 ADD http://www.abc.com/abc.tar  /tmp/  COPY  把文件拷贝到容器内不解压容器联网不能下载  RUN  在容器内执行命令可以写多条比如RUN touch file1RUN yum -y install nginx  USER  在容器内切换用户相当于sudo -u user  ENV  设置环境变量某些指令需要环境变量才能正确执行比如etcdctl export ETCDCTL_API3  WORKDIR  指定工作目录有些任务需要比如ansible、编译./configure  EXPOSE  对外声明容器将要使用的端口号和协议方便健康检测程序进行检测  WORKDIR的用法比如
RUN touch  f1
WORKDIR /tmp
RUN touch f2     # 在/tmp目录下创建f2文件
#通过Dockerfile里面的WORKDIR也可以知悉软件装在哪了比如源码编译安装的nginx WORKDIR /usr/local/nginxENTRYPOINT和CMD的单独用法和结合用法  只使用 CMD CMD 指定的命令将作为容器启动时的命令。如果用户没有通过 docker run 指定其他命令那么 CMD 指定的命令将被执行。 只使用 ENTRYPOINT ENTRYPOINT 指定的命令将作为容器启动时的主程序。如果用户没有通过 docker run 指定其他命令那么 ENTRYPOINT 指定的命令将被执行。当你想定义一个不可轻易覆盖的主程序时使用 ENTRYPOINT。例如一个数据库容器可能总是需要运行数据库服务不允许用户轻易改变这一点。ENTRYPOINT 不容易被覆盖除非使用 --entrypoint 显式指定。 结合使用 ENTRYPOINT 和 CMD CMD 指定的内容将成为 ENTRYPOINT 指定命令的参数。如果用户通过 docker run 指定其他命令这些命令将覆盖 CMD 指定的参数。 # apache镜像用Dockerfile制作示例
httpd]# cat Dockerfile 
FROM mylinux:latest
RUN  dnf -y  install  httpd php   dnf clean all
RUN  sed  -ri -e s,^Load,#,  -e  s,^#(.*mod_mpm_prefork.so)$,\1,  /etc/httpd/conf.modules.d/00-mpm.conf
ADD  myweb.tar.gz  /var/www/html/
ENV  LANGC
WORKDIR  /var/www/html
EXPOSE 80/tcp
CMD [/usr/sbin/httpd, -DFOREGROUND]docker build  -t  httpd:latest  httpd/