Docker Compose 可以輕松、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應用程式工具
- 使用的三個步驟
- 使用 Dockerfile 檔案定義應用程式的環境
- 使用 docker-compose.yml 問阿金定義構成應用程式的服務,這樣他們可以在隔離環境中一起運行
- 最后 執行 docker-composer up 命令來創建 并啟動所有的服務
Docker compose 安裝 并為安裝腳本添加執行權限
sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 2. 查看是否安裝成功
docker-compose -v
- 案例
- 2.1 撰寫docker-compose.yml 檔案
# 1. 創建nginx 目錄
mkdir -p /soft/docker/docker-nginx
# 2. 切換到指定目錄
cd /soft/docker/docker-nginx
# 3. 撰寫docker-compose.yml 檔案
vi docker-compose.yml
# 版本資訊
version: "3.8"
# 定義服務可以是多個
services:
nginx: #服務名
image: nginx # 創建容器鎖需要的鏡像
container_name: mynginx # 容器名稱 默認為 (工程名稱_服務名_序號)
ports: # 宿主機和容器埠映射關系
- "80:80" # 左邊主機埠 右邊容器埠
networks: # 配置容器連接網路,參考頂級 networks 下的條目
- nginx-net
# 定義網路 , 可以是多個, 不宣告, 默認創建一個網路名稱為 “工程名稱_default” 的 bridge 網路
networks:
nginx-net: # 一個具體的網路條目名稱
name: nginx-net # 網路名稱 默認為(工程名稱_網路條目名稱)
driver: bridge # 網路模式 默認為 bridge
- 1 執行檔案
docker-compose up

正常訪問Nginx

3. docker-compose down 自動洗掉容器 和 網路
[root@root docker-nginx]# docker-compose down
Removing mynginx ... done
Removing network nginx-net
- 使用 compose 搭建redis 集群
4.1 撰寫redis 組態檔 - 創建目錄
[root@root ~]# mkdir -p /soft/redis/redis-cluster
- 目錄下 撰寫 redis-cluster.tmpl
port ${PORT}
requirepass root
masterauth root
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.220.133
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
# 2. 第二胎虛擬機改下ip
- 執行埠檔案
# 1. 第一臺linux
for port in `seq 6371 6373`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data; \
done
# 2. 第二臺 虛擬機
for port in `seq 6374 6376`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data; \
done
- 撰寫Docker compose 模板檔案
# 描述compose 版本資訊
version: "3.8"
services:
redis-6371: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6371 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6371/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6372: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6372 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6372/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6373: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6373 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6373/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
------
#描述版本資訊
version: "3.8"
#定義服務 可以多個
services:
redis-6374: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6374 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6374/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6375: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6375 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6375/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6376: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6376 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6376/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
啟動:
docker-compose up -d (后臺運行)

# 1. 進入容器
docker exec -it redis-6374 bash
# 2 . 進入目錄
cd /usr/local/bin
# 3. 執行集群指令
redis-cli -a root --cluster create 192.168.220.132:6371 192.168.220.132:6372 192.168.220.132:6373 192.168.220.133:6374 192.168.220.133:6375 192.168.220.133:6376 --cluster-replicas 1
# 4. 檢查集群狀態
redis-cli -a root --cluster check 192.168.220.132:6371
# 5. 集群模式設定 -c -a 用戶
redis-cli -c -p 6374 -a root
- 創建OK

# 描述compose 版本資訊
version: "3.8"
services:
redis-6371: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6371 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6371/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6372: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6372 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6372/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
redis-6373: #服務名稱
image: redis # 創建容器時鏡像
container_name: redis-6373 # 容器名稱
restart: always #容器總是重新啟動
network_mode: "host" # 網路模式 host
volumes: #資料卷目錄掛載
- /soft/redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6373/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 啟動容器后默認執行的命令
mysql7:
image: mysql
container_name: mysql7
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- /soft/mysql/data:/var/lib/mysql
- /soft/mysql/my.conf:/etc/mysql/my.conf
registry:
image: registry
container_name: registry
ports:
- "5000:5000"
restart: always
volumes:
- /soft/docker/:/var/lib/registry
- /soft/docker/certs/:/certs
- /soft/docker/auth/:/auth
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domian.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357254.html
標籤:其他
下一篇:向ApiFuture<WriteResult>和ApiFuture<DocumentSnapshot>添加偵聽器時要傳遞什么Runnable?
