1.Dockerfile基本指令
dockerfile的指令主要可以匯總為如下,使用dockerfile的前提是學習會這些指令的基本使用,具體如下: • FROM #指令基礎鏡像 • MAINTAINER #指定維護者/作者信息,也可以沒有 • RUN #具體執行的操作,在命令前面加上RUN即可 • ADD #COPY文件,會自動進行解壓 • WORKDIR #設置當前工作目錄 • VOLUME #設置卷,掛載主機目錄 • EXPOSE #指定對外的端口 • CMD #指定容器啟動后需要干的事情 • COPY #復制文件 • ENV #環境變量 • ENIRYPOINT #容器啟動后執行的命令
2.Dockerfile概述
使用dockerfile主要是用於構建docker鏡像文件信息,相當於一個腳本,通過dockerfile自己的指令,來構建軟件依賴,文件依賴,存儲等等情況。
Dockerfile使用
在docker中創建鏡像可以分為兩個方法,這兩個方法具體可以總結為如下:
• 手動修改容器內容,然后docker commit提交容器為新的鏡像文件
• 通過在dockerfile中定義一系列的命令和參數構成的腳本,然后這些命令應用於基礎鏡像,依次添加層,最終生成一個新的鏡像,這樣就極大的簡化了部署的工作。
3.Dockerfile組成部分
dockerfile的主要組成部分可以匯總為:
• 基礎鏡像信息
• 基礎的維護者/作者(可以沒有)
• 制作鏡像操作指令 RUM
• 容器啟動時執行指令CMD["/bin/bash"]
4.創建鏡像
我們在本地磁盤創建一個名稱為Dockerfile_share的文件來創建自己的Dockerfile,我的文件路徑為:F:\Docker\learnDocker #注意一個文件夾下只能有一個Dockerfile文件
文件內容為:
#Dockerfile基於centos版本為7.8.2003的鏡像
FROM centos:7.8.2003
#鏡像的作者/維護者
MAINTAINER 特昂糖
#定義一個變量,變量的值是Docker
ENV name Docker
#運行程序,輸出變量的值
ENTRYPOINT echo "Hello $name"
cmd控制台進入到learnDocker的文件夾,運行下面的命令來創建鏡像:
docker build -t centos_name -f Dockerfile_share .
#-t 鏡像的名稱及信息,-f 指定文件,“.” 是 Dockerfile 所在的路徑(當前目錄)
[+] Building 0.1s (5/5) FINISHED
=> [internal] load build definition from shareDocker 0.0s
=> => transferring dockerfile: 291B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:7.8.2003 0.0s
=> CACHED [1/1] FROM docker.io/library/centos:7.8.2003 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:6bd0ccebaae64e32941cc73fcded0bd0a855658da19b05f5d01c9427d8772 0.0s
=> => naming to docker.io/library/centos_share 0.0s
查看鏡像
F:\Docker\learnDocker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6987c8d6ed5 5 days ago 141MB
alpine/git latest c6b70534b534 5 weeks ago 27.4MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
centos 7.8.2003 afb6fca791e0 19 months ago 203MB
centos_name latest 5b25220f403c 19 months ago 203MB
centos_share latest 6bd0ccebaae6 19 months ago 203MB
運行鏡像
docker run -t --rm centos_share
容器輸出:
Hello Docker
5.環境部署流程
5.1jar包的環境部署
環境的部署一般分為兩種:
1.開發直接給jar包,需要自己搭建鏡像,搭建完成運行
2.開發把鏡像搭建好導出給測試,測試導入直接運行即可
#下面我們來演示測試根據開發給的jar包來構建鏡像,鏡像的導入方式之前有說過,詳文見Docker鏡像的操作
- 開發編寫完代碼進行自測並發給測試
- 測試編寫Dockerfile來構建鏡像
FROM centos:7.8.2003 FROM java:8 MAINTAINER 特昂糖 #復制文件到容器目錄 COPY app-0.0.1-SNAPSHOT.jar /opt #切換目錄 WORKDIR /opt #啟動服務 EXPOSE 8081 CMD ["java","-jar","app-0.0.1-SNAPSHOT.jar"]
#前提步驟:在Windows中,我們在構建鏡像時需要注意的是jar包要與Dockerfile在同一路徑下
- 執行編寫的Dockerfile的文件
docker build -t app -f Dockerfile .
- 執行Dockerfile文件成功后,也就是構建鏡像成功
[+] Building 0.8s (8/8) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 258B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/java:8 0.0s => [stage-1 1/3] FROM docker.io/library/java:8 0.4s => [internal] load build context 0.4s => => transferring context: 20.66MB 0.3s => [stage-1 2/3] COPY app-0.0.1-SNAPSHOT.jar /opt 0.1s => [stage-1 3/3] WORKDIR /opt 0.0s => exporting to image 0.2s => => exporting layers 0.2s => => writing image sha256:b501c45c6a5a8d75abad30c63bf3a2be022d35abe7a370c9f9c1b3872a5689e0 0.0s => => naming to docker.io/library/app 0.0s
- 使用docker images,就可以查看到構建成功的鏡像信息
F:\Docker\learnDocker>docker images REPOSITORY TAG IMAGE ID CREATED SIZE app latest b501c45c6a5a 8 seconds ago 664MB nginx latest f6987c8d6ed5 6 days ago 141MB alpine/git latest c6b70534b534 5 weeks ago 27.4MB hello-world latest feb5d9fea6a5 3 months ago 13.3kB centos_name latest 5b25220f403c 20 months ago 203MB centos_share latest 6bd0ccebaae6 20 months ago 203MB centos 7.8.2003 afb6fca791e0 20 months ago 203MB java 8 d23bdf5b1b1b 4 years ago 643MB
- 測試再導入,使用docker run來運行這個鏡像,運行成功后,環境部署OK
F:\Docker\learnDocker>docker run --rm -p8081:8081 b501c45c6a5a . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.2) 2021-12-27 02:37:29.943 INFO 1 --- [ main] com.example.app.AppApplication : Starting AppApplication v0.0.1-SNAPSHOT using Java 1.8.0_111 on c69e1705877e with PID 1 (/opt/app-0.0.1-SNAPSHOT.jar started by root in /opt) 2021-12-27 02:37:29.946 INFO 1 --- [ main] com.example.app.AppApplication : No active profile set, falling back to default profiles: default 2021-12-27 02:37:32.093 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8081 2021-12-27 02:37:32.115 INFO 1 --- [ main] com.example.app.AppApplication : Started AppApplication in 2.848 seconds (JVM running for 3.445)
- 開始測試驗證
5.2nginx
Dockerfile文件
FROM nginx MAINTAINER 特昂糖 RUN echo "Hi, This Is A Docker Continer Website" > /usr/share/nginx/html/index.html EXPOSE 80
構建鏡像: docker build -t nginx_web -f Dockerfile . 運行鏡像: docker run --rm -p80:80 nginx_web 查看nginx服務的日志信息: docker logs -f 容器ID
5.3python文件
Dockerfile文件:
FROM centos:7.8.2003 MAINTAINER 特昂糖 #下載yum RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo; RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo; #安裝Python環境 RUN yum install python3-devel python3-pip -y #安裝flask庫 RUN pip3 install -i https://pypi.douban.com/simple flask RUN pip3 install flask_restful RUN pip3 install flask_httpauth RUN pip3 install flask_jwt #復制文件到容器目錄 COPY app.py /opt #切換目錄 WORKDIR /opt #啟動服務 EXPOSE 5000 CMD ["python3","app.py"]
構建鏡像:
docker build -t python_web -f Dockerfile .
運行鏡像:
docker run --rm -p5000:5000 python_web #運行鏡像信息
Windows系統關於端口的命令:
netstat -ano | findstr "被查詢的端口" #根據端口查詢到應用程序的pid信息 tasklist | findstr "pid" #根據pid信息查詢到具體的應用程序
6.Docker中Rabbit MQ的下載
獲取鏡像並運行鏡像
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
根據端口進到:http://localhost:15672/#/

賬號與密碼都為:guest
7.鏡像的發布
發布鏡像我們⾸先要在Docker Hub上注冊⼀個賬戶,然后把我們的鏡像名稱更改為:DockerHub昵稱/鏡像名稱,如果不處理,在進⾏push的時候,就會提示沒有權限的操作
C:\Users\特昂糖>docker push 151****2986/flask_app Using default tag: latest latest: Pulling from 151****32986/flask_app Digest: sha256:110776cf725b24a9dd9313550ee669af658bbcbcbe78818333d7e6c88a6fa4fd Status: Downloaded newer image for 151****2986/flask_app:latest docker.io/151****2986/flask_app:latest
