Docker學習筆記之--藉助Docker Compose進行多容器部署(環境:centos7)

上節演示:Docker學習筆記之--查看部署在docker的應用運行日誌(環境:centos7)

接下來演示藉助Docker Compose進行多容器部署。

前邊的章節演示儘管可以實現需求功能,但是在生產環境當中,維護起來顯然很麻煩,所以下邊演示藉助Docker Compose功能,實現一鍵部署!

一個完整的項目需要多個容器(比如Web、Nginx、SqlServer、Mysql、Redis等)協調運行相互支持,一個個的部署很顯然會很麻煩,而且還要爲各個容器之間的網絡連接而苦惱。

還好,藉助Docker Compose,我們可以編寫一個docker-compose.yml文件,可以輕鬆實現上邊所有容器的一鍵部署。

第一步:安裝 Docker Compose

依次執行以下命令:截止目前最新版本是 1.27.4

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

第二步:編輯 docker-compose.yml文件

在服務器上的web應用根目錄下新建一個 docker-compose.yml文件,跟Dockerfile文件放在同一個目錄下即可!

然後編寫如下內容:

 1 version: '3.8'
 2 networks:
 3    test_network:
 4      external: true
 5 services:
 6    myapidemo:
 7       image: 1312958948/myapidemo:1.1
 8       container_name: myapidemo
 9       build: .
10       restart: always
11       ports:
12         - "9020:5000"
13       volumes:
14         - /root/apilogs/logs:/app/logs
15       networks:
16         - test_network
17     
18    nginxapi:
19       image: nginx
20       container_name: nginxapi
21       restart: always
22       ports:
23         - "80:80"
24         - "443:443"
25       volumes:
26         - /root/nginx/www:/usr/share/nginx/html 
27         - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf 
28         - /root/nginx/logs:/var/log/nginx 
29         - /root/nginx/certs:/etc/nginx/certs 
30       networks:
31         - test_network
32         
33    mysql:
34       image: mysql:8.0
35       container_name: mysql
36       restart: always
37       ports:
38         - "3306:3306"
39       environment:
40         MYSQL_ROOT_PASSWORD: Aa123456   
41         MYSQL_DATABASE: MyTest
42         TZ: Asia/Shanghai
43       networks:
44         - test_network 
45     
46    redistest:
47       image: redis
48       container_name: redistest
49       restart: always
50       ports:
51         - "6379:6379"
52       command: redis-server --requirepass 123456     
53       networks:
54         - test_network 

代碼解釋:一份標準配置文件應該包含 version、services、networks 三大部分,其中最關鍵的就是 services 和 networks 兩個部分,這是它基本結構

version: '3.8'   表示版本,截止目前最新是 3.8,可以參考文檔:https://docs.docker.com/compose/compose-file/

services  節點下定義每個容器服務,其中:myapidemo、nginxapi、mysql、redistest等表示容器名稱

image: 1312958948/myapidemo:1.1    指定鏡像名稱和tag版本,如果該鏡像不存在,則會自動拉取或創建鏡像;如果已經存在則會直接使用

container_name: myapidemo   指定容器名 

restart: always   表示關機或者重啓docker時,自動重啓容器

build: .    指定 Dockerfile 所在文件夾的路徑(點 表示當前目錄)。Compose 將會利用它自動構建這個鏡像,然後使用這個鏡像啓動服務容器

ports:  - "9020:5000"     端口

volumes: -  /root/apilogs/logs:/app/logs   掛載一個目錄或者一個已存在的數據卷容器,(例如:將/root/apilogs/logs目錄 映射到 容器內的 /app/logs目錄)

networks: - test_network    連接到自定義網橋 test_network 

特別提醒:因爲前邊章節我已經提前創建好 test_network 網橋了,所以在這裏直接使用,下邊這段話表示使用已存在的網橋

networks:
     test_network:
       external: true

environment:    爲容器設置環境變量,等同於 docker run -e MYSQL_ROOT_PASSWORD=Aa123456

(注意前邊沒有橫槓 -)

environment:
   MYSQL_ROOT_PASSWORD: Aa123456   
   MYSQL_DATABASE: MyTest
   TZ: Asia/Shanghai

command: redis-server --requirepass 123456        指定一個容器啓動後執行的命令,例如:這裏給 redis 設置密碼

其他還有很多,不依依舉慄了。

參考文檔:

https://blog.csdn.net/zhiaini06/article/details/45287663

https://blog.csdn.net/qq_35720307/article/details/87256684

第三步:一鍵部署容器

使用以下命令創建並運行容器, -d 表示後臺運行

docker-compose up -d

如果鏡像都已經存在,則會直接創建容器並運行

如果鏡像不存在,則會嘗試拉取或根據 build指定的路徑尋找 Dockerfile文件自動創建

從提示可以看出,如果鏡像不存在則自動創建,否則需要調用docker-compose build 或 docker-compose up --build

Successfully tagged 1312958948/myapidemo:1.1
WARNING: Image for service myapidemo was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.

而提示 xxxx is up-to-date,則表示 Docker Compose 認爲這些容器已經啓動了,沒必要再次啓動

nginxapi is up-to-date
mysql is up-to-date
redistest is up-to-date

到此結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章