Docker学习笔记--------2.Dockerfile的指令

红太狼 2022-03-27 13:20 342阅读 0赞

文章目录

  • 1.Dockerfile的指令
    • 1.FROM
    • 2.MAINTAINER
    • 3.RUN
    • 3.1 方式一:RUN (shell模式)
    • 3.3 方式二:RUN [] (exec模式)
    • 4.EXPOSE
  • 5.CMD和ENTRYPOINT
  • 6.ADD和COPY
  • 7.VOLUME
  • 8.WORKDIR ENV 和USER
  • 9.ONBUILD
    1. ENV:在使用Dockerfile的过程中创建环境变量
    • 使用docker-compose.yml也可以设置环境变量

1.Dockerfile的指令

1.FROM

  1. 格式1:
  2. FROM <image> #
  3. 格式2:
  4. FROM <image>:<tag>
  5. 注意:
  6. 1.必须是已存在的镜像
  7. 2.必须是第一个非注释的指令

2.MAINTAINER

  1. 1.指定镜像的作者信息,包含镜像的所有者和联系信息
  2. 2.如:
  3. MAINTAINER ywk "yangwenkai94@163.com"

3.RUN

3.1 方式一:RUN (shell模式)

3.3 方式二:RUN [] (exec模式)

4.EXPOSE

  1. 此处暴露的端口,docker并不会自动配置,还是需要run的时候手动指定

5.CMD和ENTRYPOINT

  1. CMD指令
  2. 1.CMD 是在容器运行时运行的,如果run是指定了容器执行后的指令,则cmd的指令不会执行
  3. CMD ["executable","param1","parma2"] # exec模式
  4. CMD command parma1 param2 # shell模式
  5. CMD ["parma1","parma2"] # 作为ENTRYPOINT指令的默认参数
  6. 2.
  7. ---1. vi Dockerfile
  8. # first dockerfile content
  9. FROM ubuntu:16.04
  10. MAINTAINER ywk "yangwenkai94@163.com"
  11. RUN apt-get update && apt-get install nginx
  12. EXPOSE 80
  13. CMD ["/user/sbin/nginx","-g","daemon off"]
  14. ---2. docker build -t="ywk/test"
  15. ---3.docker run -p 80 --name cmd_test -d ywk/test
  16. ---4.docker top ywk/test # 查看docker容器运行了哪些服务
  17. ENTRYPOINT指令
  18. ENTRYPOINT ["executable","param1","parma2"] # exec模式
  19. ENTRYPOINT command parma1 param2 # shell模式
  20. 即使docker run 指定了命令,如
  21. docker run -p 80 --name cmd_test -d ywk/test /bin/bash
  22. /bin/bash也不会执行

6.ADD和COPY

  1. ADD <src> <dest>
  2. ADD ['<src>"...."<dest>"](适用于文件路径中有空格的情况)
  3. COPY <src> <dest>
  4. COPY ['<src>"...."<dest>"](适用于文件路径中有空格的情况)
  5. 注意1:都是将文件复制到docker构建的镜像中
  6. 注意2:src:必须是构建镜像的相对地址
  7. dest:镜像中的绝对地址
  8. 注意3:
  9. ADD:包含类似tar的解压功能
  10. 如果是单纯的复制文件,Docker推荐使用COPY
  11. 如:
  12. # first dockerfile content
  13. FROM ubuntu:16.04
  14. MAINTAINER ywk "yangwenkai94@163.com"
  15. RUN apt-get update && apt-get install -y nginx
  16. COPY index.html /usr/share/nginx/html/
  17. EXPOSE 80
  18. CMD ["/user/sbin/nginx","-g","daemon off"]
  19. --------------------------------------------------------
  20. docker build......
  21. -------------------------------------------------------
  22. docker run -d -p 80 --name copy_test ywk/test3
  23. --------------------------------------------------------
  24. 访问nginx
  25. cul http://127.0.0.1:49168
  26. 结果:nginx的页面被替换

7.VOLUME

  1. 用来基于镜像文件的卷,实现数据持久化

点击这里查看使用方法:Docker的数据卷容器

8.WORKDIR ENV 和USER

  1. WORKDIR /path/to/workdir # 容器内部的工作目录
  2. ENV <key><value> # 设置环境变量
  3. ENV <key>=<value>
  4. USER daemon # 指定镜像以 何用户的身份 来运行
  5. USER nginx
  6. 如果不指定用户,则以root用户的方式运行

9.ONBUILD

  1. ONBUILD [INSTRUCTION]
  2. 镜像触发器
  3. 这个镜像(有ONBUILD指令) 被其他镜像作为基础镜像时执行
  4. 会在构建过程中插入指令
  5. 如:
  6. # first dockerfile content
  7. FROM ubuntu:16.04
  8. MAINTAINER ywk "yangwenkai94@163.com"
  9. RUN apt-get update && apt-get install -y nginx
  10. ONBUILD COPY index.html /usr/share/nginx/html/ # 修改了这里
  11. EXPOSE 80
  12. CMD ["/user/sbin/nginx","-g","daemon off"]
  13. --------------------------------------------------------
  14. docker build......
  15. -------------------------------------------------------
  16. docker run -d -p 80 --name copy_test ywk/test4
  17. --------------------------------------------------------
  18. 访问nginx
  19. cul http://127.0.0.1:49168
  20. 结果:nginx的页面没有被替换
  21. -----------------------------------------------------------
  22. 构建第二个镜像,构建后页面会被替换
  23. FROM
  24. xxx ywk/test4
  25. xxx
  26. xxx

10. ENV:在使用Dockerfile的过程中创建环境变量

  1. ENV <key><value>
  2. ENV CONFIG /usr/local/config
  3. 编写Dockerfile的时候使用,推荐使用这种方式

使用docker-compose.yml也可以设置环境变量

  • 区别1:docker-compose.yml是在docker run的时候添加的环境变量
  • 区别2:docker-compose.yml使用environment或者使用.env文件,如下:

    environment:

    1. PROJECT_HOST: '${HOST_IP}:8001'
    2. MYSQL_DATABASE: '${MYSQL_DATABASE}'
    3. MYSQL_PASSWORD: '${MYSQL_ROOT_PASSWORD}'

发表评论

表情:
评论列表 (有 0 条评论,342人围观)

还没有评论,来说两句吧...

相关阅读