将二级域名 网站目录,淘宝购物,wordpress编辑器换成经典模式,安装wordpress建站程序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/