第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

初識 Dockerfile

之前我們學到如何從一個容器生成鏡像,本節(jié)我們學習如何使用 Dockerfile 從頭自定義構(gòu)建鏡像。

Dockerfile 是 Docker 中用于定義鏡像自動化構(gòu)建流程的配置文件,在 Dockerfile 中,包含了構(gòu)建鏡像過程中需要執(zhí)行的命令和其他操作。它可以明確設(shè)定 Docker 鏡像的制作過程,幫助我們在容器體系下能夠完成自動構(gòu)建。

1. 初識 Dockerfile

我們在本地新建一個目錄,編輯一個名為 Dockerfile 的文件,注意文件名大小寫。

mkdir -p ~/docker/nginx/
cd ~/docker/nginx
vim Dockerfile
# 構(gòu)建一個基于ubuntu的docker定制鏡像
# 基礎(chǔ)鏡像
FROM ubuntu
# 鏡像作者
MAINTAINER my_name myemail@domain.com
# 執(zhí)行命令
## 換成國內(nèi)的軟件源
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list 
RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list 
## 安裝nginx
RUN apt update >/dev/null 2>&1 
RUN apt install nginx -y >/dev/null 2>&1
# 暴露對外端口
EXPOSE 80

將代碼保存下來,嘗試構(gòu)建鏡像。 在當前 Dockerfile 文件所在目錄執(zhí)行如下命令:

docker build --network=host -t ubuntu-nginx:v1 . 

--network=host 使用宿主機的網(wǎng)絡連接代理容器的網(wǎng)絡(在一些情況下,容器可能無法順暢地連接外網(wǎng))。

-t ubuntu-nginx:v1 指定生產(chǎn)的鏡像名稱為 ubuntu-nginx ,版本號為 v1。

2. 鏡像構(gòu)建過程

我們執(zhí)行 docker build --network=host -t ubuntu-nginx:v1 . 命令,看看在構(gòu)建過程中做了哪些操作:

[user@centos8 nginx]$ docker build --network=host -t ubuntu-nginx:v1 .
# 將上下文求發(fā)送給Docker引擎
Sending build context to Docker daemon   2.56kB
# 下載依賴的鏡像
Step 1/7 : FROM ubuntu
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
# 生成鏡像 1d622ef86b13
 ---> 1d622ef86b13
Step 2/7 : MAINTAINER my_name myemail@domain.com
# 運行容器 4eec6e3094f0,在容器內(nèi)運行上面的這個命令,標記維護者信息
 ---> Running in 4eec6e3094f0
# 移除臨時容器 4eec6e3094f0
Removing intermediate container 4eec6e3094f0
# 生成鏡像 6679d1c204e3
 ---> 6679d1c204e3
Step 3/7 : RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# 運行容器84d38c20d8c4,在容器內(nèi)運行上面的這個命令,更換軟件源記錄
 ---> Running in 84d38c20d8c4
# 移除臨時容器 84d38c20d8c4
Removing intermediate container 84d38c20d8c4
# 生成鏡像 83f29f7b055a
 ---> 83f29f7b055a
Step 4/7 : RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# 運行容器 763e4493d93f, 在容器內(nèi)運行上面的這個命令,更換軟件源記錄
 ---> Running in 763e4493d93f
# 移除臨時容器 763e4493d93f
Removing intermediate container 763e4493d93f
# 生成鏡像 6297f20605d9
 ---> 6297f20605d9
Step 5/7 : RUN apt update >/dev/null 2>&1
# 運行容器 2665a7e5a2e9,在容器內(nèi)運行上面的這個命令, 更新軟件源緩存
 ---> Running in 2665a7e5a2e9
# 移除臨時容器 2665a7e5a2e9
Removing intermediate container 2665a7e5a2e9
# 生成鏡像 fdfed940ca4d
 ---> fdfed940ca4d
Step 6/7 : RUN apt install nginx -y >/dev/null 2>&1
# 運行 容器 722a9a544643,在容器內(nèi)運行上面的這個命令, 安裝nginx
 ---> Running in 722a9a544643
# 移除臨時容器 722a9a544643
Removing intermediate container 722a9a544643
# 生成鏡像 6ee76f7df9e5
 ---> 6ee76f7df9e5
Step 7/7 : EXPOSE 80
# 運行容器 a12ed3216ee0,在容器內(nèi)運行上面的這個命令, 暴露80端口
 ---> Running in a12ed3216ee0
# 移除臨時容器 a12ed3216ee0
Removing intermediate container a12ed3216ee0
# 生成最終的鏡像 7cf64279ba98
 ---> 7cf64279ba98
Successfully built 7cf64279ba98
# 將這個鏡像標記命名 ubuntu-nginx 版本號v1
Successfully tagged ubuntu-nginx:v1

結(jié)合之前講到的 docker commit 命令,不難理解 Dockerfile 就是將我們在文件中書寫的構(gòu)建指令,一層一層從 FROM 指定的基礎(chǔ)鏡像使用臨時容器過渡,逐層疊加起來最終生成目標鏡像。

使用 docker history ubuntu-nginx:v1 命令可以驗證我們的想法:

[user@centos8 nginx]$ docker history ubuntu-nginx:v1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7cf64279ba98        21 minutes ago      /bin/sh -c #(nop)  EXPOSE 80                    0B
6ee76f7df9e5        21 minutes ago      /bin/sh -c apt install nginx -y >/dev/null 2…   59.2MB
fdfed940ca4d        21 minutes ago      /bin/sh -c apt update >/dev/null 2>&1           21.4MB
6297f20605d9        21 minutes ago      /bin/sh -c sed -i 's/security.ubuntu.com/mir…   2.76kB
83f29f7b055a        21 minutes ago      /bin/sh -c sed -i 's/archive.ubuntu.com/mirr…   2.76kB
6679d1c204e3        21 minutes ago      /bin/sh -c #(nop)  MAINTAINER my_name myemai…   0B
1d622ef86b13        2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           2 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           2 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   811B
<missing>           2 weeks ago         /bin/sh -c [ -z "$(apt-get indextargets)" ]     1.01MB
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:a58c8b447951f9e30…   72.8MB

3. Dockerfile 的結(jié)構(gòu)

Dockerfile 主要包含四部分內(nèi)容:

  1. 基礎(chǔ)鏡像信息;
  2. 維護者信息;
  3. 鏡像操作指令;
  4. 容器啟動時指令。

我們可以將 Dockerfile 理解為一個由上往下執(zhí)行指令的腳本文件。 當我們調(diào)用構(gòu)建命令,通過我們給出的 Dockerfile 構(gòu)建鏡像時,Docker 按照 指令順序進行對應的操作。

4. 小結(jié)

Dockerfile 是熟練掌握 Docker 的必備技能,它的優(yōu)點有很多:

  • Dockerfile 的體積小,容易進行快速遷移部署;

  • 環(huán)境構(gòu)建流程記錄了 Dockerfile 中,能夠直觀的看到鏡像構(gòu)建的順序和邏輯。

下一節(jié),我們將深入學習 Dockerfile 常用的構(gòu)建指令。