1-4 Dockerfile编写

最后更新于:2022-04-02 07:36:56

#### 制作容器基本步骤 ``` 1. 确保程序运行环境(版本,插件,依赖) 2. 测试代码和拷贝 3. 运行程序 ``` #### 制作一个包含程序的镜像 ``` FROM python:3.6 LABEL maintainer="Ptyhon3.6 dinghe@outlook.com" RUN pip3 install flask COPY app.py /app/ WORKDIR /app EXPOSE 5000 CMD ["python3","app.py"] ``` 制作并运行 ``` cd /opt/dinghe/flask-hello/ docker build -t dinghe/flask-hello . # 前台执行 docker run dinghe/flask-hello # 后台执行 docker run -d dinghe/flask-hello ``` #### FROM确定引用还是制作 ``` # 尽量使用官方Image FROM scratch FROM centos:7 ``` #### LABEL定义镜像元信息 ``` # 必须要有 LABEL maintainer="dinghe_1985@126.com" LABEL version=0.1 LABEL deacription="Dev Basic PHP 5.3/5.6/7.2" ``` #### Shell和Exec格式 Shell ``` # 默认在bash环境中执行所有命令 RUN yum install -y vim CMD echo "hello Ding" ENTRYPOINT echo "hello Ding" ``` Exec ``` # 第一个参数是命令,后面的全是值 RUN ["yum", "install", "-y", "vim"] CMD ["/bin/echo", "hello Ding"] ENTRYPOINT ["/bin/echo", "hello Ding"] # 如果要在bash环境执行,需要调整 # 注意,最后要执行的命令放在一对""里面 ENV name Ding ENTRYPOINT ["/bin/sh/", "-c", "/bin/echo hello $name" ] ``` #### RUN CMD 和 ENTRYPOINT RUN ``` # 每运行一次RUN,就会生成一层 # 多条命令合并为一行,回行使用 \ # 注意清理Cache文件,避免镜像过大 RUN yum update && yum install vim \ python -dev ``` CMD ``` # 容器启动时执行的命令 # 多个CMD只有最后一个会执行 # docker run image默认执行最后一个CMD # docker run -it image /bin/bash 忽略CMD ``` ENTRYPOINT ``` # 让容器以一个应用程序或者服务的形式运行 # 不会忽略,一定执行 # shell脚本使用 ``` #### WORKDIR设置工作目录 ``` # 如果没有会创建并进入 # 不要用RUN cd,尽量使用绝对路径 推荐:WORKDIR /opt/lnmp WORKDIR /opt/ WORKDIR lnmp # pwd /opt/lnmp/ ``` #### COPY和ADD的区别 ``` # COPY仅支持复制(推荐使用) # ADD 支持解压,wget,会根据目标类型判断覆盖还是放入 WORKDIR /opt ADD hello.sh lnmp/ # pwd /opt/lnmp/hello.sh ``` #### 声明变量 ``` ENV MYSQL_VERSION 5.6 yum install "${MYSQL_VERSION}" ``` #### VOLUME #### EXPOSE
';