一.DockerCompose
大家可以看到,我們部署一個簡單的java項目,其中包含3個容器:
而稍微復雜的項目,其中還會有各種各樣的其它中間件,需要部署的東西遠不止3個。如果還像之前那樣手動的逐一部署,就太麻煩了。而且整個項目的部署沒有體現出項目的整體性,不方便運維。
而Docker Compose就可以幫助我們實現多個相互關聯的Docker容器的快速部署。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器。
docker-compose.yml文件的基本語法可以參考官方文檔:
https://docs.docker.com/compose/compose-file/compose-file-v3/
docker-compose文件中可以定義多個相互關聯的應用容器,每一個應用容器被稱為一個服務(service)。由于service就是在定義某個應用的運行時參數,因此與docker run
參數非常相似。
舉例來說,用docker run部署MySQL的命令如下:
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \--network hmallmysql

如果用docker-compose.yml
文件來定義,就是這樣:
version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new
networks:new:name: hmall
version: '3.8"是docker compose的語法版本號,containerA是服務名(一個服務就代表了一個鏡像),其中包含了鏡像,容器名,端口信息等。
對比如下:

dockerCompose和docker run描述的信息基本是一樣的,只是語法不一樣。
下面是一個dockerCompose的命令示例:
version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- hm-net
networks:hm-net:name: hmall
在構建hmall容器時,由于我們是通過jar包部署的,因此我們先要通過build構建鏡像,然后再來生成容器。這里直接使用
hmall:build: context: .
就能完成容器的創建。
在構建網絡時,我們只需要指定一個網絡標簽,并在網絡標簽下指定要構建的網絡名稱,dockerCompose就會幫助我們自動構建網絡,并將其他指定該網絡標簽的容器自動配置到這一網絡下。
networks:hm-net:name: hmall
hm-net就是網絡標簽。網絡名為hmall。
那么如何利用dockerCompose文件完成一鍵部署呢?

使用docker compose命令即可。
-f:指定路徑,如果在當前目錄下可以不指定,省略掉。
-p:指定項目名稱,可以不指定,默認就叫root。
up:一鍵啟動,創建并啟動所有容器。
down:停止并移除所有容器。
ps:列出所有啟動容器。
logs:查看指定容器日志。
stop:停止某個容器。
start:啟動某個容器。
restart:重啟某個容器。
top:查看運行進程。
exec:進入容器內指定命令。
接下來我們使用docker compose進行一鍵部署,由于在docker compose文件中我們使用的都是相對路徑,因此我們要保證docker compose文件和mysql文件夾、nginx文件夾等在同一目錄下。

都在同一目錄下,滿足
使用docker compose up -d進行一鍵部署:

部署成功!

