Dockerfile指令详解(六)

举报
jiangxl 发表于 2022/04/14 00:54:21 2022/04/14
【摘要】 dockfile详细配置 1.dockerfile主要组成部分 基础镜像信息 FROM centos:6.9 制作镜像操作指令 RUN yum -y install openssh-ser...

dockfile详细配置

1.dockerfile主要组成部分

  • 基础镜像信息
    • FROM centos:6.9
  • 制作镜像操作指令
    • RUN yum -y install openssh-server
  • 容器启动时操作指令
    • CMD ["/bin/bash"]

2.dockerfile常用指令

  • FROM

    • 这个镜像来源于哪?(指定基础镜像),这里指定的镜像本地可以不存在,不存在的情况下默认去官方源去下载
    • 例子:FROM centos:6.9
  • MAINTAINER

    • 镜像的描述,目前已不再使用
  • LABLE

    • 标签,也就是镜像的描述
    • LABLE xxxxx
  • RUN

    • 你想让它做什么操作
    • 也就是定义镜像里面执行哪些命令
    • RUN rm -rf /etc/yum.repos.d/*
  • ADD

    • 给它点创业资金,也就是将本地文件传到镜像里面,如果是压缩文件会自动解压
    • ADD kodexporer.conf /etc/nginx/conf.d/
  • WORKDIR

    • 相当于cd命令,设置当前的工作目录

    • WORKDIR /web/kodexporer

    • 实例

    • 1.编写dockerfile指定workdir
      [root@docker01 centos69_kod]# vim dockerfile 
      WORKDIR /web/kodexporer
      
      2.自建镜像
      [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v1
      
      3.进入容器后会发现默认就是/web/kodexporer
      [root@docker01 centos69_kod]# docker exec -it relaxed_banzai /bin/bash
      [root@0c2bac8a555a kodexporer]# ls
      
  • VOLUME

    • 给它一个存放行李的地方

    • 也就是设置数据卷,挂载主机目录

    • VOLUME /web/kodexporer

    • 在dockerfile中写好后,运行容器后会自动生成一个数据卷,并挂载到/web/kodexporer目录中

    • 实例

    • 1.编写dockerfile
      [root@docker01 centos69_kod]# vim dockerfile 
      #设置卷
      VOLUME /web/kodexporer
      
      2.自建镜像
      [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v2 .
      
      3.运行容器
      [root@docker01 centos69_kod]# docker run -itd -p 8080:80 centos69_kod_df:v2
      e5ac7158866a6e19b3a30b9867cc8b3b9dd32c0615707655559bc1badaf1233c
      
      4.查看卷组
      [root@docker01 ~]# docker volume ls
      DRIVER              VOLUME NAME
      local               fd65a0b98987309d9056a3a7e5302d2c722ac255227dae4537f860f986170b78
      
      5.查看卷组内容
      [root@docker01 ~]# ls /var/lib/docker/volumes/fd65a0b98987309d9056a3a7e5302d2c722ac255227dae4537f860f986170b78/_data/
      app  ChangeLog.md  config  data  index.php  kodexplorer_a5.zip  plugins  README.MD  static  #U8bf4#U660e.htm
      
      6.去页面上传一个文件并查看
      

在这里插入图片描述

  • EXPOSE

    • 它要打开的门是啥(指定对外的端口 -P指定随机端口)

    • EXPOSE 80 9000(多个端口用空格隔开)

    • 实例

      1.编写dockerfile
      [root@docker01 centos69_kod]# docker run -itd -p 8080:80 centos69_kod_df:v2
      #设置对外提供的端口
      EXPOSE 80 9000
      
      2.自动构建镜像
      [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v3 .
      
      3.运行容器并测试,会发现随机端口映射成了内部指定的端口
      [root@docker01 centos69_kod]# docker run -d -it -P centos69_kod_df:v3
      5231a376f8583387f1d0d9694c2be991d37e3f30943f4e558a4a93487761a289
      [root@docker01 centos69_kod]# docker ps -a -l
      CONTAINER ID        IMAGE                COMMAND                  CREATED              STATUS              PORTS                                            NAMES
      5231a376f858        centos69_kod_df:v3   "/bin/bash /root/ini…"   About a minute ago   Up About a minute   0.0.0.0:32769->80/tcp, 0.0.0.0:32768->9000/tcp   affectionate_montalcini
      
  • CMD

    • 奔跑吧,兄弟
    • 指定容器后要启动的命令
    • 容易被替换,所谓容易被替换是指在dockerfile指定好命令后,用docker run指定别的命令后会被替换

3.dockerfile其他指令

  • COPY

    • 复制文件,不会自动解压
    • COPY init.sh /root/init.sh
  • ENV

    • 环境变量

    • 可以设置很多丰富的变量,让用户手动输入变量值,用docker run -e即可指定

    • 1.在dockerfile中写死变量
      1)编写dockerfile
      [root@docker01 centos69_ssh]# vim dockerfile 
      ENV SSH_PASS=123456
      2)编写初始化脚本
      [root@docker01 centos69_ssh]# cat init.sh 
      #!/bin/bash
      echo $SSH_PASS | passwd --stdin root
      
      2.让用户灵活的设置密码
      不需要在dockerfile中指定变量
      1)编写初始化脚本
      [root@docker01 centos69_ssh]# cat init.sh 
      #!/bin/bash
      echo $SSH_PASS | passwd --stdin root
      2)使用docker run -e指定变量值
      [root@docker01 centos69_ssh]# docker run -d -it -e "SSH_PASS=1qaz@WSX" -p 2022:22 centos69_ssh_df:v4
      
  • ENTRYPOINT

    • 容器启动会执行的命令

    • 命令无法被替换,也就是说dockerfile中指定的是啥就是啥,docker run后面跟的命令不会受到影响,只会被当做命令参数

    • ENTRYPOINT ["",""]

    • 1.编写dockerfile
      [root@docker01 centos69_kod]# vim dockerfile 
      ENTRYPOINT ["/bin/bash","/root/init.sh"]
      
      2.自建镜像
      [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v4 .
      
      3.运行镜像
      [root@docker01 centos69_kod]# docker run  -d -it -P centos69_kod_df:v4 sleep 10
      
      [root@docker01 centos69_kod]# docker ps -a --no-trunc -l
      CONTAINER ID                                                       IMAGE                COMMAND                              CREATED             STATUS              PORTS                                            NAMES
      9f6b1e594b3210add6a9fd94fc32250bf18027256361cb2e7bb92e02004063f1   centos69_kod_df:v4   "/bin/bash /root/init.sh sleep 10"   2 minutes ago       Up 2 minutes        0.0.0.0:32771->80/tcp, 0.0.0.0:32770->9000/tcp   objective_hertz
      
      run后面跟的命令sleep 10则变成了参数
      

文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangxl.blog.csdn.net/article/details/108336697

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。