Dockerfile 关键字

1.FROM: 文件的开始

  FROM scratch   # 从头开始制作一个最简的

  FROM centos    # 使用centos作为系统,若本地没有,则从网上拉取

  FROM centos:7.0   # 指定系统 + 版本号

2. LABEL: 相当于注释或者说明信息

  LABEL version="1.0"

  LABEL author="无名"

  LABEL description="你好呀"

  1. LABEL 是关键字,后面的内容可以随便写,例如上面version,author,description 不是关键字,可以随便写

3. RUN: 执行命令(Linux的命令),每执行一条RUN,就会多一层,通常用于安装应用和软件包,或者给文件权限

  RUN yum -y update

  RUN yum -y install lrzsz

  1.尽量把命令写在一行上,因为每执行一条run,就会多一层,当然,这样写,可读性不好

  RUN yum -y upate && yum -y install lrzsz net-tools 

4. WORKDIR: 进入或创建目录(没有就创建)

  WORKDIR /root   # 进入 /root 目录

  WORKDIR /test   # 进入 /test 目录,可能没有这个目录,就会新建

  WORKDIR hello   # 进入当前目录下的 hello目录

 

5.AND and COPY: 将本地文件,添加到镜像里面

  1. AND: 可以解压缩文件

  AND hello /   # 把本地的hello,添加到根目录下

  AND xxx.tar.gz /  # 把本地的xxx.tar.gz,解压到根目录下

  2.COPY: 只是复制文件

  COPY hello /  # 把本地的hello,复制到根目录下

6.ENV: 定义变量

 ENV MYSQL_VERSION 5.6   # 定义一个变量名MYSQL_VERSION,值是 5.6

 RUN apt-get -y install mysql-server="${MYSQL_VERSION}"   # 调用变量的时候,要加个$

7.CMD and ENTRYPOINT: 执行命令

  1. 两种方式指定 RUN、CMD 和 ENTRYPOINT 要运行的命令:Shell 格式和 Exec 格式:

  • Shell格式:<instruction> <command>。例如:apt-get install python3
  • Exec格式:<instruction> ["executable", "param1", "param2", ...]。例如: ["apt-get", "install", "python3"]

  CMD 和 ENTRYPOINT 推荐使用 Exec 格式,因为指令可读性更强,更容易理解。RUN 则两种格式都可以。

 

  2. CMD 指令允许用户指定容器的默认执行的命令。此命令会在容器启动且 docker run 没有指定其他命令时运行。

  例如:Dockerfile 文件内容是这样

1 CMD echo "Hello world"

  运行容器 docker run -it [image] 将输出:

Hello world

  如果后面加上一个命令,比如 docker run -it [image] /bin/bash,CMD 会被忽略掉,命令 bash 将被执行:

root@30a52dc7c5c5:/#

  3. ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数。ENTRYPOINT 中的参数始终会被使用,这是与CMD命令不同的一点。

  例如:Dockerfile 文件内容是这样

1 ENTRYPOINT ["/bin/echo", "Hello"]  

  当容器通过 docker run -it [image] 启动时,输出为:  

1 Hello

  如果通过 docker run -it [image] Docker 启动,则输出为:

1 Hello Docker

 

  如果Dockerfile的内容是这样:

1 ENTRYPOINT ["/bin/echo", "Hello"]  
2 CMD ["world"]

  当容器通过 docker run -it [image] 启动时,输出为:

1 Hello world

  而如果通过 docker run -it [image] Docker 启动,输出依旧为:

1 Hello Docker

  也就是说,ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。

 8.技巧

1.改版本号,把其他版本标记为最新

docker tag mysql:5.5 mysql:latest

posted @ 2020-06-12 15:13  王者心·青铜梦  阅读(284)  评论(0编辑  收藏  举报