Dockerfile
- Dockerfile 是 Docker 中用於定義鏡像自動化構建流程的配置文件
- 在 Dockerfile 中,包含了構建鏡像過程中需要執行的命令和其他操作
- 它可以明確設定 Docker 鏡像的制作過程,幫助我們在容器體系下能夠完成自動構構建
使用 Dockerfile 構建鏡像的步驟
- 編寫一個 dockerfile 文件
- docker build 構建成為一個鏡像
- docker run 運行鏡像
- docker push 發布鏡像(DockerHub 、阿里雲倉庫)
為什么要用 Dockerfile
- Dockerfile 是面向開發的,以后要發布項目,做鏡像,就需要編寫 dockerfile 文件
- Docker 鏡像逐漸成企業交付的標准,必須要掌握!
- DockerFile 構建鏡像文件,定義了一切的步驟,源代碼
- Dockerfile 的體積小,容易進行快速遷移部署
- 環境構建流程記錄在 Dockerfile 中,能夠直觀的看到鏡像構建的順序和邏輯
- Docker Images 通過 DockerFile 構建生成的鏡像,最終發布和運行產品
- Docker 容器,鏡像運行起來提供服務
Dockerfile 構建過程
- 每個保留關鍵字(指令)都是必須是大寫字母
- 執行從上到下順序
- #表示注釋
- 每一個指令都會創建提交一個新的鏡像層,並提交
簡單的 Dockerfile 栗子
編寫 dockerfile 文件
在任意目錄創建一個 dockerfile 文件,輸入以下命令
# 構建一個基於ubuntu的docker定制鏡像 # 基礎鏡像 FROM ubuntu # 鏡像作者 MAINTAINER my_name polotest@domain.com # 執行命令 ## 換成國內的軟件源 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
執行 docker build
docker build --network=host -t ubuntu-nginx:v1 .
鏡像的構建過程
[user@centos8 nginx]$ docker build --network=host -t ubuntu-nginx:v1 . # 將上下文求發送給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,在容器內運行上面的這個命令,標記維護者信息 ---> 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,在容器內運行上面的這個命令,更換軟件源記錄 ---> 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, 在容器內運行上面的這個命令,更換軟件源記錄 ---> Running in 763e4493d93f # 移除臨時容器 763e4493d93f Removing intermediate container 763e4493d93f # 生成鏡像 6297f20605d9 ---> 6297f20605d9 Step 5/7 : RUN apt update >/dev/null 2>&1 # 運行容器 2665a7e5a2e9,在容器內運行上面的這個命令, 更新軟件源緩存 ---> Running in 2665a7e5a2e9 # 移除臨時容器 2665a7e5a2e9 Removing intermediate container 2665a7e5a2e9 # 生成鏡像 fdfed940ca4d ---> fdfed940ca4d Step 6/7 : RUN apt install nginx -y >/dev/null 2>&1 # 運行 容器 722a9a544643,在容器內運行上面的這個命令, 安裝nginx ---> Running in 722a9a544643 # 移除臨時容器 722a9a544643 Removing intermediate container 722a9a544643 # 生成鏡像 6ee76f7df9e5 ---> 6ee76f7df9e5 Step 7/7 : EXPOSE 80 # 運行容器 a12ed3216ee0,在容器內運行上面的這個命令, 暴露80端口 ---> Running in a12ed3216ee0 # 移除臨時容器 a12ed3216ee0 Removing intermediate container a12ed3216ee0 # 生成最終的鏡像 7cf64279ba98 ---> 7cf64279ba98 Successfully built 7cf64279ba98 # 將這個鏡像標記命名 ubuntu-nginx 版本號v1 Successfully tagged ubuntu-nginx:v1
Dockerfile 就是將在文件中書寫的構建指令,一層一層從 FROM 指定的基礎鏡像使用臨時容器過渡,逐層疊加起來最終生成目標鏡像
使用 docker history 查看鏡像歷史
[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
Dockerfile 的結構
Dockerfile 主要包含四部分內容:
- 基礎鏡像信息
- 維護者信息
- 鏡像操作指令
- 容器啟動時指令
可以將 Dockerfile 理解為一個由上往下執行指令的腳本文件
當調用構建命令,通過 Dockerfile 構建鏡像時,Docker 會按照指令順序進行對應的操作
簡單的 Dockerfile 栗子二
FROM centos:latest MAINTAINER polo ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "-----end----" CMD /bin/bash
執行 docker build
docker build -f test.dockerfile -t test .
查看鏡像和容器
docker build 命令詳解
https://www.cnblogs.com/poloyy/p/15455828.html