Docker Image Build 和 Dockerfile 进行 Docker Image 制作详解(制作 Docker Image 方法之二)、Dockerfile 指令详解 第一篇

1、Docker Image 制作方式

Docker Image 的制作方法有以下两种:

在这里插入图片描述

2、Dockerfile 介绍

在这里插入图片描述

  • Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
  • Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

3、Docker Image Build Command

[root@Tang ~]# docker image build --help

Usage:	docker image build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Options:
  -c, --cpu-shares int          CPU shares (relative weight)
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
  -m, --memory bytes            Memory limit
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
# -t                          # 打标签
# -c,- cpu-shares int         # CPU份额(相对权重)
# -m,- memory bytes           # 内存限制
# --build-arg                 # 设置构建时变量,就是构建的时候修改ARG指令的参数

4、Dockerfile 介绍及常用指令、.dockerignore file 介绍

4.1 介绍

  • Dockerfile 编写的基本结构

    Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,# 为 Dockerfile 中的注释。

  • 一台主机可以有多个Dockerfile

    要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构建新的镜像。

    注意:Dockerfile 中所包含的需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录下存在。

  • docker image build 基于dockerfile 制作镜像的命令

4.2 常用指令

# EXPOSE
# ENV
# RUN
# CMD
# ENTRYPOINT
# HEALTHCHECK
# ONBUILD
# USER
# ARG
# SHELL
# STOPSIGNAL

4.3 .dockerignore file 介绍

在这里插入图片描述

5、FROM 指令

5.1 介绍

  • FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 语句
  • FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环境
  • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker image build 会在 docker 主机上查找指定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的镜像文件,docker build 会返回一个错误信息
  • FROM 可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像
  • 如果 FROM 语句没有指定镜像标签,则默认使用 latest 标签

5.2 格式

# FROM <repository>[:<tag>] 
# FROM <repository>@<digest>

参数介绍:
# <repository>---指定作为 base image 的名称
# <tag>---base image 的标签,省略时默认 latest
# <digest>---是镜像的哈希码;使用哈希码会更安全一点

5.3 示例

# cat Dockerfile 
FROM busybox:latest

6、MAINTAINER 指令

在这里插入图片描述

6.1 介绍

  • 用于让 dockerfile 制作者提供本人的详细信息
  • dockerfile 并不限制 MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后

6.2 格式

# MAINTAINER <authtor's detail>

6.3 示例

# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

7、COPY 指令

在这里插入图片描述

7.1 介绍

  • 用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中

7.2 格式

# COPY <src>... <dest> 
# COPY ["<src>",... "<dest>"]
# <src>    # 要复制的源文件或目录,支持使用通配符
# <dest>   # 目标路径,即正在创建的image的文件系统路径
		   # 建议<dest>使用绝对路径,否则,COPY指定以WORKDIR为其实路径
	       # 在路径中有空白字符时,通常使用第2中格式

7.3 规则

  • 必须是 build 上下文中的路径,不能是其父目录中的文件
  • 如果 是目录,则其内部文件或子目录会被递归复制,但 目录自身不会被复制
  • 如果指定了多个 ,或在 中使用了通配符,则 必须是一个目录,且必须以 / 结尾
  • 如果 事先不存在,他将会被自动创建,这包括父目录路径

7.4 示例

7.4.1 COPY 文件

### 文件准备 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# ll
total 4
-rw-r--r--. 1 root root 102 Nov 29 11:31 Dockerfile
drwxr-xr-x. 2 root root  60 Nov 29 11:27 scptext
[root@Tang imagebuildbusybox]# tree scptext/
scptext/
├── test1.html
├── test2.html
└── test3.html

0 directories, 3 files
[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/test1.html /data/web/html/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v1
Sending build context to Docker daemon  5.632kB
Step 1/3 : FROM busybox:latest
 ---> 020584afccce
Step 2/3 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/3 : COPY scptext/test1.html /data/web/html/
 ---> 55985b6de4f6
Successfully built 55985b6de4f6
Successfully tagged mybbx:v1
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
mybbx                                                    v1                  55985b6de4f6        7 minutes ago       1.22MB
nginx                                                    latest              231d40e811cd        6 days ago          126MB
centos                                                   7                   5e35e350aded        2 weeks ago         203MB
busybox                                                  latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看是否有相关文件 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v1 /bin/sh
/ # cd /data/web/html/
/data/web/html # ls
test1.html
/data/web/html # cat test1.html 
<h1>Tang Web Server Test 1</h1>
/data/web/html # exit

7.4.2 COPY 文件目录

### 文件准备 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# ll
total 4
-rw-r--r--. 1 root root 102 Nov 29 11:31 Dockerfile
drwxr-xr-x. 2 root root  60 Nov 29 11:27 scptext
[root@Tang imagebuildbusybox]# tree scptext/
scptext/
├── test1.html
├── test2.html
└── test3.html

0 directories, 3 files
[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v2
Sending build context to Docker daemon  5.632kB
Step 1/3 : FROM busybox:latest
 ---> 020584afccce
Step 2/3 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/3 : COPY scptext/ /data/web/html/
 ---> 367b504e98c7
Successfully built 367b504e98c7
Successfully tagged mybbx:v2
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v2                  367b504e98c7        14 seconds ago      1.22MB
mybbx               v1                  55985b6de4f6        34 minutes ago      1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看是否有相关文件 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v2 /bin/sh
/ # cd /data/web/html/
/data/web/html # ls
test1.html  test2.html  test3.html
/data/web/html # exit

7.4.3 COPY 文件目录 并和 .dockerignore file 配合使用

### 文件准备 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# ll
total 4
-rw-r--r--. 1 root root 102 Nov 29 11:31 Dockerfile
drwxr-xr-x. 2 root root  60 Nov 29 11:27 scptext
[root@Tang imagebuildbusybox]# tree scptext/
scptext/
├── test1.html
├── test2.html
└── test3.html

0 directories, 3 files
[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看,进行复制文件时,会对 .dockerignore 文件中的内容进行读取并忽略 ###
[root@Tang imagebuildbusybox]# cat .dockerignore
scptext/test1.html
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v3
Sending build context to Docker daemon  5.632kB
Step 1/3 : FROM busybox:latest
 ---> 020584afccce
Step 2/3 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/3 : COPY scptext/ /data/web/html/
 ---> b2f5898c47a3
Successfully built b2f5898c47a3
Successfully tagged mybbx:v3

[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
mybbx               v3                  b2f5898c47a3        About a minute ago   1.22MB
mybbx               v2                  367b504e98c7        16 minutes ago       1.22MB
mybbx               v1                  55985b6de4f6        51 minutes ago       1.22MB
nginx               latest              231d40e811cd        6 days ago           126MB
centos              7                   5e35e350aded        2 weeks ago          203MB
busybox             latest              020584afccce        4 weeks ago          1.22MB
### 运行新的容器,看是否有相关文件,但是没有 test2.html 文件 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v3 /bin/sh
/ # ls /data/web/html/
test2.html  test3.html
/ # exit

8、ADD 指令

在这里插入图片描述

8.1 介绍

  • ADD 指令类似于 COPY 指令,ADD 支持使用 TAR 文件和 URL

8.2 格式

# ADD <src> .. <dest> 
# ADD ["<src>".. "<dest>"]

8.3 规则

  • 同 COPY 指令
  • 如果 为 URL 且 不以 / 结尾,则 指定的文件将被下载并直接被创建为 ;如果 以/结尾,则文件名 URL 指定的文件将被直接下载并保存为< dest>/
  • 如果 是一个本地系统上的压缩格式的 tar 文件,它将被展开为一个目录,其行为类似于" tar-x "命令;然而,通过 URL 获取到的 ta r文件将不会自动展开
  • 如果 有多个,或其间接或直接使用了通配符,则 必须是一个以 / 结尾的目录路径 ;如果 不以 / 结尾,则其被视作一个普通文件, 的内容将被直接写入到

8.4 示例:从URL 获取一个 TAR 包,并 ADD 一个 TAR 包

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
└── scptext
    ├── test1.html
    ├── test2.html
    └── test3.html

1 directory, 5 files

[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看,进行复制文件时,会对 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/

ADD http://nginx.org/download/nginx-1.17.6.tar.gz  /data/web/nginx_tar/

ADD nginx-1.17.6.tar.gz /data/web/nginx/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v4
Sending build context to Docker daemon  1.044MB
Step 1/5 : FROM busybox:latest
 ---> 020584afccce
Step 2/5 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/5 : COPY scptext/ /data/web/html/
 ---> Using cache
 ---> 367b504e98c7
Step 4/5 : ADD http://nginx.org/download/nginx-1.17.6.tar.gz  /data/web/nginx_tar/
Downloading [==================================================>]  1.038MB/1.038MB
 ---> 3ec6cde7918e
Step 5/5 : ADD nginx-1.17.6.tar.gz /data/web/nginx/
 ---> 83005f82a5c4
Successfully built 83005f82a5c4
Successfully tagged mybbx:v4
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v4                  83005f82a5c4        15 minutes ago      8.49MB
mybbx               v3                  b2f5898c47a3        About an hour ago   1.22MB
mybbx               v2                  367b504e98c7        2 hours ago         1.22MB
mybbx               v1                  55985b6de4f6        2 hours ago         1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看是否有相关文件,TAR 包是否被解压 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v4 /bin/sh
/ # ls /data/web/
html/       nginx/      nginx_tar/
/ # ls /data/web/html/
test1.html  test2.html  test3.html
/ # ls /data/web/nginx/nginx-1.17.6/          # TAR 包被解压
CHANGES     CHANGES.ru  LICENSE     README      auto        conf        configure   contrib     html        man         src
/ # ls /data/web/nginx_tar/
nginx-1.17.6.tar.gz
/ # exit

9、WORKDIR 指令

在这里插入图片描述

9.1 介绍

  • 用于为 Dockerfile 中所有的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指定设定工作目录

9.2 格式

# WORKDIR <dirpath>

	## 在 Dockerfile 文件中, WORKDIR 指令可出现多次,其路径也可以为相对路径
	## 不过,其是相对此前一个 WORKDIR 指令指定的路径
	## 另外,WORKDIR也可调用由ENV指定定义的变量

9.3 示例

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
└── scptext
    ├── test1.html
    ├── test2.html
    └── test3.html

1 directory, 5 files

[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看,进行复制文件时,会对 ###
[root@Tang imagebuildbusybox]# cat Dockerfile
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/

WORKDIR /data/web/

ADD nginx-1.17.6.tar.gz ./nginx/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v5
Sending build context to Docker daemon  1.044MB
Step 1/5 : FROM busybox:latest
 ---> 020584afccce
Step 2/5 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/5 : COPY scptext/ /data/web/html/
 ---> Using cache
 ---> 367b504e98c7
Step 4/5 : WORKDIR /data/web/
 ---> Running in 4edce415ef3a
Removing intermediate container 4edce415ef3a
 ---> d600598bab1f
Step 5/5 : ADD nginx-1.17.6.tar.gz ./nginx/
 ---> 708aebea023f
Successfully built 708aebea023f
Successfully tagged mybbx:v5
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v5                  708aebea023f        3 seconds ago       7.46MB
mybbx               v4                  83005f82a5c4        24 minutes ago      8.49MB
mybbx               v3                  b2f5898c47a3        About an hour ago   1.22MB
mybbx               v2                  367b504e98c7        2 hours ago         1.22MB
mybbx               v1                  55985b6de4f6        2 hours ago         1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看目录是否直接处于工作目录,且查看 TAR 包的解压路径 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v4 /bin/sh
/ # ls /data/web/
html/       nginx/      nginx_tar/
/ # ls /data/web/html/
test1.html  test2.html  test3.html
/ # ls /data/web/nginx/nginx-1.17.6/          # TAR 包被解压
CHANGES     CHANGES.ru  LICENSE     README      auto        conf        configure   contrib     html        man         src
/ # ls /data/web/nginx_tar/
nginx-1.17.6.tar.gz
/ # exit

10、VOLUME 指令

在这里插入图片描述

10.1 介绍

  • 用于在 image 中创建一个挂载点目录,以挂载 Docker host. 上的卷或其它容器上的卷

10.2 格式

# VOLUME <mountpoint>  
# VOLUME ["<mountpoint>"]

	## 如果挂载点目录路径下此前有文件存在
	## 则在 docker container run 命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中

10.3 示例

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
├── scptext
│   ├── test1.html
│   ├── test2.html
│   └── test3.html
└── volume

2 directories, 5 files
[root@Tang imagebuildbusybox]# cat scptext/test{1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看,进行复制文件 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/

WORKDIR /data/web/

ADD nginx-1.17.6.tar.gz ./nginx/

VOLUME /root/imagebuildbusybox/volume
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v6
Sending build context to Docker daemon  1.044MB
Step 1/6 : FROM busybox:latest
 ---> 020584afccce
Step 2/6 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/6 : COPY scptext/ /data/web/html/
 ---> Using cache
 ---> 367b504e98c7
Step 4/6 : WORKDIR /data/web/
 ---> Using cache
 ---> d600598bab1f
Step 5/6 : ADD nginx-1.17.6.tar.gz ./nginx/
 ---> Using cache
 ---> 708aebea023f
Step 6/6 : VOLUME /root/imagebuildbusybox/volume
 ---> Running in c44c187692dc
Removing intermediate container c44c187692dc
 ---> 526d30e5c871
Successfully built 526d30e5c871
Successfully tagged mybbx:v6
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v6                  526d30e5c871        3 minutes ago       7.46MB
mybbx               v5                  708aebea023f        15 minutes ago      7.46MB
mybbx               v4                  83005f82a5c4        39 minutes ago      8.49MB
mybbx               v3                  b2f5898c47a3        2 hours ago         1.22MB
mybbx               v2                  367b504e98c7        2 hours ago         1.22MB
mybbx               v1                  55985b6de4f6        3 hours ago         1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看目录是否直接处于工作目录 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v6 /bin/sh
/data/web # 

### 另起一个终端,或者 ctrl+p ctrl+q 剥离当前终端 ###
[root@Tang volume]# docker container inspect -f {{.Mounts}} tangimgtest
[{volume dd0ca57dbd4b30534db3ad0548343f25efa90a15ca459bd3fa9c563a28948c75 /var/lib/docker/volumes/dd0ca57dbd4b30534db3ad0548343f25efa90a15ca459bd3fa9c563a28948c75/_data /root/imagebuildbusybox/volume local  true }]

11、EXPOSE 指令

在这里插入图片描述

11.1 介绍

  • 用于为容器打开指定要监听的端口以实现与外部通信

11.2 语法

# EXPOSE <port>[/ <protocol>] [<port>[/ <protocol>] ....

	## <protocol> 用于指定传输层协议,可为 tcp 或 udp 二者之一,默认为 TCP 协议
	## EXPOSE 指令可一次指定多个端口,例如:EXPOSE 11211/udp 11211/tcp

11.3 示例

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
├── scptext
│   ├── index.html
│   ├── test1.html
│   ├── test2.html
│   └── test3.html
└── volume

2 directories, 6 files
[root@Tang imagebuildbusybox]# cat scptext/index.html 
<h1>Welcome To Tang Web Server</h1>

### Dockerfile 文件查看,进行复制文件,并暴露端口 ###
[root@Tang imagebuildbusybox]# cat Dockerfile
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

COPY scptext/ /data/web/html/

WORKDIR /data/web/

ADD nginx-1.17.6.tar.gz ./nginx/

VOLUME /root/imagebuildbusybox/volume

EXPOSE 80/tcp
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v7
Sending build context to Docker daemon  1.046MB
Step 1/7 : FROM busybox:latest
 ---> 020584afccce
Step 2/7 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/7 : COPY scptext/ /data/web/html/
 ---> 48448060151a
Step 4/7 : WORKDIR /data/web/
 ---> Running in 5c1324828822
Removing intermediate container 5c1324828822
 ---> dfdbe799c82f
Step 5/7 : ADD nginx-1.17.6.tar.gz ./nginx/
 ---> 79c3b9ffcd78
Step 6/7 : VOLUME /root/imagebuildbusybox/volume
 ---> Running in 382da5f15c77
Removing intermediate container 382da5f15c77
 ---> 8400ac5c963b
Step 7/7 : EXPOSE 80/tcp
 ---> Running in 3247ef930e8b
Removing intermediate container 3247ef930e8b
 ---> 3be8c8b8adae
Successfully built 3be8c8b8adae
Successfully tagged mybbx:v7
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v7                  3be8c8b8adae        6 seconds ago       7.46MB
mybbx               v6                  526d30e5c871        20 minutes ago      7.46MB
mybbx               v5                  708aebea023f        33 minutes ago      7.46MB
mybbx               v4                  83005f82a5c4        57 minutes ago      8.49MB
mybbx               v3                  b2f5898c47a3        2 hours ago         1.22MB
mybbx               v2                  367b504e98c7        2 hours ago         1.22MB
mybbx               v1                  55985b6de4f6        3 hours ago         1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,并运行于后台 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest -P --rm -d mybbx:v7 /bin/httpd -f -h /data/web/html
9d304ba50ddcdbb620f5fe185263813a5b03ccbda0c30809ec08a4cb40293a04

[root@Tang imagebuildbusybox]# docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
9d304ba50ddc        mybbx:v7            "/bin/httpd -f -h /d…"   22 seconds ago      Up 20 seconds       0.0.0.0:32768->80/tcp   tangimgtest

### 查看此 Docker Container IP ###
[root@Tang imagebuildbusybox]# docker inspect -f {{.NetworkSettings.IPAddress}} tangimgtest
172.17.0.2

### 查看此 Docker Container 暴露端口 ###
[root@Tang imagebuildbusybox]# docker port tangimgtest
80/tcp -> 0.0.0.0:32768
### 宿主机进行 docker web 访问 ###
[root@Tang ~]# ipinfo 
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.141.252  netmask 255.255.255.0  broadcast 172.16.141.255
[root@Tang ~]# curl http://172.17.0.2
<h1>Welcome To Tang Web Server</h1>
### 其它主机访问此宿主机 ###
[root@Tang-1 ~]# ipinfo 
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.141.209  netmask 255.255.255.0  broadcast 172.16.141.255
[root@Tang-1 ~]# curl http://172.16.141.252:32768
<h1>Welcome To Tang Web Server</h1>

12、ENV 指令

在这里插入图片描述

12.1 介绍

  • 用于为镜像定义所需的环境变量,并可被 Dockerfile 文件中位于其后的其它指令(如 ENV、ADD、COPY 等)所调用
  • 调用格式为 $variable_ name 或 ${variable_ name}

12.2 语法

# ENV <key> <value>  
# ENV <key>=<value> . .


	## 第一种格式中,<key>之后的所有内容均会被视作其 <value> 的组成部分, 因此,一次只能设置一个变量
 	## 第二种格式可用一次设置多个变量,每个变量为一个”<key>=<value>" 的键值对
 	## 如果<value>中包含空格,可以以反斜线(\)进行转义,也可通过对 <value> 加引号进行标识;另外,反斜线也可用于续行;
 	## 定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能

12.3 示例

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
├── scptext
│   ├── index.html
│   ├── test1.html
│   ├── test2.html
│   └── test3.html
└── volume

2 directories, 6 files
[root@Tang imagebuildbusybox]# cat scptext/index.html 
<h1>Welcome To Tang Web Server</h1>

### Dockerfile 文件查看,进行复制文件,并暴露端口 ###
[root@Tang imagebuildbusybox]# cat Dockerfile
FROM busybox:latest

LABEL maintainer="Tang <[email protected]>"

ENV DOC_ROOT=/data/web/html/ NGINX_TAR=nginx-1.17.6.tar.gz

COPY scptext/ ${DOC_ROOT}

WORKDIR ${DOC_ROOT}

ADD ${NGINX_TAR} ./

EXPOSE 80/tcp
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v8
Sending build context to Docker daemon  1.046MB
Step 1/7 : FROM busybox:latest
 ---> 020584afccce
Step 2/7 : LABEL maintainer="Tang <[email protected]>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/7 : ENV DOC_ROOT=/data/web/html/ NGINX_TAR=nginx-1.17.6.tar.gz
 ---> Running in 98822b50c167
Removing intermediate container 98822b50c167
 ---> e9142b1f00ba
Step 4/7 : COPY scptext/ ${DOC_ROOT}
 ---> ddd4d9d47588
Step 5/7 : WORKDIR ${DOC_ROOT}
 ---> Running in f26a4c473eaa
Removing intermediate container f26a4c473eaa
 ---> 19a0728f9a08
Step 6/7 : ADD ${NGINX_TAR} ./
 ---> 601a24885ce9
Step 7/7 : EXPOSE 80/tcp
 ---> Running in ad9c198d6d60
Removing intermediate container ad9c198d6d60
 ---> 521a6fcb40e0
Successfully built 521a6fcb40e0
Successfully tagged mybbx:v8
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v8                  521a6fcb40e0        6 seconds ago       7.46MB
mybbx               v7                  3be8c8b8adae        29 minutes ago      7.46MB
mybbx               v6                  526d30e5c871        50 minutes ago      7.46MB
mybbx               v5                  708aebea023f        About an hour ago   7.46MB
mybbx               v4                  83005f82a5c4        About an hour ago   8.49MB
mybbx               v3                  b2f5898c47a3        3 hours ago         1.22MB
mybbx               v2                  367b504e98c7        3 hours ago         1.22MB
mybbx               v1                  55985b6de4f6        3 hours ago         1.22MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,并查看环境变量 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v8
/data/web/html # printenv
HOSTNAME=0a31501886b2
DOC_ROOT=/data/web/html/
SHLVL=1
HOME=/root
NGINX_TAR=nginx-1.17.6.tar.gz
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/data/web/html
/data/web/html # ls
index.html    nginx-1.17.6  test1.html    test2.html    test3.html
/data/web/html # exit
### 当然也可以在 docker container run 时,使用 -e 指定变量
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest -e TANG=ILOVEU --rm -it mybbx:v8 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5204b3602886
TERM=xterm
TANG=ILOVEU
DOC_ROOT=/data/web/html/
NGINX_TAR=nginx-1.17.6.tar.gz
HOME=/root
发布了158 篇原创文章 · 获赞 7 · 访问量 9736

猜你喜欢

转载自blog.csdn.net/weixin_44983653/article/details/103306038
今日推荐