文章目錄
- 0. 老男孩思想-女性的第一需求
- 1. Dockerfile
- 1.1 Dockerfile的基本結構
- 1.2 案例-制作小鳥飛飛鏡像
- 1.2.1 編寫Dockerfile文件
- 1.2.2 構建鏡像
- 1.2.3 啟動容器
- 1.3 Dockerfile常用指令
- 1.4 面試題:Dockerfile中CMD和ENTRYPOINT的區別?
- 1.5 案例-制作zrlog鏡像
- 1.5.1 編寫Dockerfile文件
- 1.5.2 生成鏡像并啟動容器
- 1.6 案例-制作后端考試系統鏡像
- 1.6.1 編寫Dockerfile文件和啟動腳本
- 1.6.2 制作鏡像并啟動容器
- 2. 思維導圖
0. 老男孩思想-女性的第一需求
女性永遠的第一需求,就是做一個精致的女人。
1. Dockerfile
Dockerfile 是構建 Docker 鏡像的核心配置文件,它通過一系列指令定義了如何自動化構建容器鏡像。Docker 在構建鏡像時會按照 Dockerfile 中的指令逐步執行,每一行指令都會生成一個新的鏡像層(layer)。
1.1 Dockerfile的基本結構
- 基礎鏡像:指定構建鏡像的初始鏡像
- 元數據定義:添加鏡像的元數據(如作者、版本、說明等)
- 構建過程指令:安裝依賴、復制文件、端口暴露等
- 啟動指令:定義容器啟動時的默認命令,這是容器生命周期的起點
1.2 案例-制作小鳥飛飛鏡像
1.2.1 編寫Dockerfile文件
[root@docker01 /server/dockerfile/01-bird]# ll
總用量 104
-rw-r--r-- 1 root root 91622 7月 15 09:21 bird.tar.gz
-rw-r--r-- 1 root root 237 7月 17 11:09 default.conf
-rw-r--r-- 1 root root 450 7月 17 11:13 Dockerfile
[root@docker01 /server/dockerfile/01-bird]# cat Dockerfile
# 如果本地有該鏡像,會直接使用;若沒有,會下載該鏡像
FROM nginx:alpine
LABEL author=skx desc="自定義小鳥飛飛鏡像"# 容器創建代碼目錄
RUN mkdir -p /app/code/bird# 上傳代碼文件到容器;ADD可以自動解壓tar.gz壓縮包
ADD bird.tar.gz /app/code/bird
# 上傳配置文件到容器
ADD default.conf /etc/nginx/conf.d/# 開啟端口
EXPOSE 80 443# 入口指令
CMD ["nginx","-g","daemon off;"]
1.2.2 構建鏡像
docker build -t 鏡像名稱 Dockerfile路徑
- -t:tag,指定構建的鏡像名稱
- 后面需要指定Dockerfile文件路徑
[root@docker01 /server/dockerfile/01-bird]# docker build -t web:bird .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.Install the buildx component to build images with BuildKit:https://docs.docker.com/go/buildx/Sending build context to Docker daemon 96.26kB
Step 1/7 : FROM nginx:alpine---> 77656422f700
Step 2/7 : LABEL author=skx desc="自定義小鳥飛飛鏡像"---> Running in f6a20089714f---> Removed intermediate container f6a20089714f---> bdb9f0ceead5
Step 3/7 : RUN mkdir -p /app/code/bird---> Running in 19c6f0992aca---> Removed intermediate container 19c6f0992aca---> 0cdbb83e054b
Step 4/7 : ADD bird.tar.gz /app/code/bird---> fb92ef13621a
Step 5/7 : ADD default.conf /etc/nginx/conf.d/---> b9bafb4882be
Step 6/7 : EXPOSE 80 443---> Running in aa49a8352257---> Removed intermediate container aa49a8352257---> c54940012cd8
Step 7/7 : CMD ["nginx","-g","daemon off;"]---> Running in 3fcfb8f96078---> Removed intermediate container 3fcfb8f96078---> 7c619a551ab3
Successfully built 7c619a551ab3
Successfully tagged web:bird
[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web bird 7c619a551ab3 38 seconds ago 52.6MB
1.2.3 啟動容器
[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web bird 7c619a551ab3 6 minutes ago 52.6MB
web_nginx 1.29 77656422f700 3 weeks ago 52.5MB
[root@docker01 /server/dockerfile/01-bird]# docker run -d --name web_bird -p 80:80 web:bird
0ab75085d0e81e694b9bc94633e75b583d2556b23f29300cf305a6130720f212
[root@docker01 /server/dockerfile/01-bird]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ab75085d0e8 web:bird "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp web_bird
- 瀏覽器訪問:
1.3 Dockerfile常用指令
指令 | 說明 |
---|---|
FROM | 指定基礎鏡像 |
LABEL | 指定容器的屬性信息 |
ENV | 創建容器的環境變量 |
RUN | 創建鏡像過程中執行的命令; 推薦多個命令結合成一個RUN命令 |
ADD | 把文件或目錄復制到容器; 會自解壓tar.gz壓縮包; 支持多階構建 |
COPY | 把文件或目錄復制到容器; 沒有自動解壓功能; 支持多階構建 |
WORKDIR | 指定容器的默認工作目錄 |
VOLUME | 掛載數據卷 |
EXPOSE | 指定鏡像對外暴露的端口 |
CMD | 指定容器的入口命令; 可在docker run時替換 |
ENTRYPOINT | 容器的入口命令; 無法被docker run時被替換; docker run的命令僅被作為ENTRYPONIT命令的參數 |
1.4 面試題:Dockerfile中CMD和ENTRYPOINT的區別?
- 相同點:都是容器啟動命令
- 不同點:
- CMD指定的命令,可以被docker run指定的命令替換
- ENTRYPOINT的命令不會被替換,docker run指定的命令會作為ENTRYPOINT命令的參數
- 同時使用時,CMD的命令作為ENTRYPOINT的參數
1.5 案例-制作zrlog鏡像
- 基礎鏡像:tomcat+war包
1.5.1 編寫Dockerfile文件
# 查看tomcat鏡像
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep tomcat
tomcat 9.0-jdk8 56d6933de864 2 years ago 285MB
# Dockerfile文件
[root@docker01 /server/dockerfile/02-zrlog]# cat Dockerfile
FROM tomcat:9.0-jdk8
LABEL author:skx app="zrlog,tomcat"# env
ENV WAR=ROOT.war
ENV WEBAPP=/usr/local/tomcat/webapps
# 復制zrlog
WORKDIR ${WEBAPP}
ADD ${WAR} .
# 端口
EXPOSE 8080
CMD ["catalina.sh","run"]# 容器監控檢查指令
#通過指定命令對容器中的服務進行檢查
#用于檢查容器運行中(服務運行)但是用戶無法訪問
HEALTHCHECK --interval=5s --timeout=20s --retries=2 \
CMD curl 127.0.0.1:8080
[root@docker01 /server/dockerfile/02-zrlog]# ll
總用量 10984
-rw-r--r-- 1 root root 438 7月 17 20:05 Dockerfile
-rw-r--r-- 1 root root 11243048 5月 22 2023 ROOT.war # 將zrlog.war改成ROOT.war
1.5.2 生成鏡像并啟動容器
[root@docker01 /server/dockerfile/02-zrlog]# docker build -t web:zrlog .
……
Successfully built 968858ee0784
Successfully tagged web:zrlog
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep zrlog
web zrlog 968858ee0784 54 seconds ago 296MB
[root@docker01 /server/dockerfile/02-zrlog]# docker run -d --name web_zrlog -p 8080:8080 web:zrlog
2a0aae02d1d3efd10712c32745aae057c6a9cdd2cfef4dd502aff692b5f60185
[root@docker01 /server/dockerfile/02-zrlog]# docker ps |grep zrlog
2a0aae02d1d3 web:zrlog "catalina.sh run" 24 seconds ago Up 23 seconds (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp web_zrlog
- 瀏覽器訪問:
1.6 案例-制作后端考試系統鏡像
- 基礎鏡像:jdk+jar包
1.6.1 編寫Dockerfile文件和啟動腳本
[root@docker01 /server/dockerfile/03-exam]# docker images |grep jdk
tomcat 9.0-jdk8 56d6933de864 2 years ago 285MB
java 8u111-jdk d23bdf5b1b1b 8 years ago 643MB
[root@docker01 /server/dockerfile/03-exam]# cat Dockerfile
FROM java:8u111-jdk
LABEL author=skx desc="exam 后端"
ENV VER 3.9.0
ENV ENVIR prod
ENV CONF application-${ENVIR}.yml
ENV CODE xzs-${VER}.jar
ENV DIR /app/code/exam/
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
ADD ${CONF} ${CODE} ./
ADD entry.sh /
EXPOSE 8000
# 腳本放在容器根目錄下;有執行權限
CMD ["/entry.sh"]
[root@docker01 /server/dockerfile/03-exam]# chmod +x entry.sh
[root@docker01 /server/dockerfile/03-exam]# cat entry.sh
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=${ENVIR} ${CODE}
1.6.2 制作鏡像并啟動容器
[root@docker01 /server/dockerfile/03-exam]# docker build -t web:exam .
……
Successfully built 5570229b9466
Successfully tagged web:exam
[root@docker01 /server/dockerfile/03-exam]# docker images |grep exam
web exam 5570229b9466 24 seconds ago 684MB
[root@docker01 /server/dockerfile/03-exam]# docker run -d --name web_exam -p 8000:8000 web:exam
b0249e77608a32c3225c3bbacc7a9d3c5f89ba226f8d3380c2e25d7f99bdb9c7
[root@docker01 /server/dockerfile/03-exam]# docker ps |grep exam
b0249e77608a web:exam "/entry.sh" 7 seconds ago Up 6 seconds 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp web_exam
- 瀏覽器訪問
2. 思維導圖
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀請你加入共享群「老男孩教育Linux運維99期-孫克旭」一起進行文檔協作