企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ### 1. FROM > 基础镜像,当前新镜像基于哪个镜像为基础 ``` # 摘自nginx dockerfile FROM debian:buster-slim ``` ### 2. MAINTAINER > 镜像维护者的姓名和邮箱地址 ``` MAINTAINER wangking <xxx@qq.com> ``` ### 3. RUN > 容器构建时需要运行的linux命令 ``` RUN groupadd -r redis && useradd -r -g redis redis ``` ### 4. EXPOSE > 当前容器对外服务的端口 ``` EXPOSE 8080 ``` ### 5. ENV > 用来在构建镜像过程中设置的环境变量 ``` ENV MY_PATH /var/www/ WORKDIR $MY_PATH ``` ### 6. WORKDIR > 创建容器后,终端默认登陆进来的`工作目录`,一个落脚点 ``` WORKDIR /var/www/ ``` ### 7. ADD > 将宿主机下的文件拷贝到镜像,并解压缩(COPY + TAR -zxvf) ``` ADD nginx.tar.gz /usr/local ``` ### 8. COPY > > 将宿主机下的文件拷贝到镜像 ``` COPY my.conf /etc/haha/my.conf ``` ### 9. VOLUME > 容器数据卷,用于数据保存和持久化工作 ``` VOLUME ["/data1", "/data2"] ``` ### 10. CMD > 指定一个容器启动时要运行的命令 > 注:**dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后参数替换** ``` CMD cat /ect/hosts CMD ["catalina.sh", "run"] CMD ["curl", "-s", "http://ip.cn"] CMD ["/bin/bash"] ``` > docker run 参数替换 ``` # 会覆盖dockerfile里的CMD命令 docker run -it centos /bin/bash docker run -it centos ls -l ``` ### 11. ENTRYPOINT > 指定一个容器启动时要运行的命令,和CMD一样可以有多个,但是不会被覆盖,而是追加。 ``` ENTRYPOINT ["curl", "-s", "http://ip.cn"] ``` ### 12. ONBUILD > 当构建一个被继承的dockerfile时运行的命令,父镜像在被子继承后父镜像的onbuild被触发 > 父镜像的dockerfile里加入以下命令,子镜像构建过程中,会触发onbuild命令 ``` ONBUILD RUN echo "father onbuild" ``` ### 13. dockerfile的构建 > 当前目录下创建文件 `Dockerfile` > 然后再运行构建命令,则本地就会生成对应的镜像 ``` # 14. docker build -t 新镜像名称:TAG . docker build -t mycentos:1.3 . # 或 指定dockerfile文件地址 docker build -f /mydocker/Dockerfile -t mycentos:1.3 . ```