使用docker compose一鍵啟動多個應用
環境說明
linux系統版本:lsb_release -a
docker 版本: docker -v
不同的作業系統以及軟體版本,可能會遇到不一樣的問題,一定要注意版本問題。
.1.安裝教程,參考官網安裝指南。
https://dockerdocs.cn/compose/install/index.html
版本說明。
安裝操作說明。
安裝命令如下,
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
安裝失敗。因為該檔案是儲存在github上面的,需要連線外網,因此只能換種方式安裝。
執行命令
yum -y install epel-release --allowerasing
yum -y install python3-pip
然後安裝指定版本
pip3 install docker-compose==1.29.1
執行時報錯如下,
大致錯誤資訊的意思是需要升級pip3
升級命令如下
sudo python3 -m pip install --upgrade pip
然後命令又變為pip --version
再次執行
pip install docker-compose==1.29.1
安裝成功
檢視版本
docker-compose -v
.2.準備docker-compose.yml配置檔案。
上傳到伺服器中指定的位置。最終的配置檔案會放在最後面。
.3.啟動docker compose服務.
docker compose up -d 注意事項:需要在docker-compose.yarm同一個目錄下執行該命令!!
第一次報錯,
第十三行配置錯誤,登出後重新執行。
再次啟動服務,有一個服務啟動失敗,其他服務啟動成功。
初步來看是jar包的位置錯誤,沒有正確掛載導致的。
修改Java服務相關配置後
volumes:
- "/opt/u01/exam/java/WebBackend.jar:/project/WebBackend.jar"
- "/opt/u01/exam/java:/project"
command: [
'java',
'-jar',
'WebBackend.jar'
]
再次啟動,執行同樣的命令,之前的服務不受影響,不會重新啟動。修改後,Java服務啟動然後立馬退出。檢視日誌,錯誤資訊如下,
再次修改配置檔案,jar檔案需要加上容器內的絕對路徑。
command: [
'java',
'-jar',
'/project/WebBackend.jar'
]
再次執行命令服務啟動成功。
.4.測試服務是否正常。
nginx服務正常。
mysql資料庫連線正常。
redis服務正常。
後臺服務異常,無法開啟。
檢視日誌資訊如下,
最後排查到問題時因為自己在配置時,Java服務的埠設定錯誤,修改後重新啟動服務即可。
最終的docker-compose.yarm配置檔案資訊如下,
version: '3.8'
networks:
bigstuff:
services:
mysql:
image: mysql:5.7
container_name: mysql
ports:
- "自己設定埠:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 自己設定密碼
#MYSQL_ROOT_HOST: %
volumes:
- "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"
- "/opt/u01/exam/mysql/logs:/var/log/mysql"
- "/opt/u01/exam/mysql/data:/var/lib/mysql"
networks:
- bigstuff
redis:
image: redis:6.0.8
container_name: redis
ports:
- "自己設定埠:6379"
environment:
TZ: Asia/Shanghai
volumes:
- "/opt/u01/exam/redis/redis.conf:/usr/local/etc/redis/redis.conf"
- "/opt/u01/exam/redis/data:/data"
- "/opt/u01/exam/redis/log:/logs"
#配置檔案啟動
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
networks:
- bigstuff
webbackend:
image: openjdk:8
container_name: webbackend
ports:
- "自己設定埠:8080"
volumes:
- "/opt/u01/exam/java/WebBackend.jar:/project/WebBackend.jar"
- "/opt/u01/exam/java:/project"
command: [
'java',
'-jar',
'/project/WebBackend.jar'
]
depends_on:
- mysql
- redis
networks:
- bigstuff
nginx:
image: nginx:1.24.0
container_name: nginx
ports:
- "443:443"
volumes:
- "/opt/u01/exam/nginx/html:/usr/share/nginx/html"
- "/opt/u01/exam/nginx/log:/var/log/nginx"
- "/opt/u01/exam/nginx/nginx.conf:/etc/nginx/nginx.conf"
- "/opt/u01/exam/nginx/yilangcode.xyz.key:/etc/nginx/yilangcode.xyz.key"
- "/opt/u01/exam/nginx/yilangcode.xyz.pem:/etc/nginx/yilangcode.xyz.pem"
networks:
- bigstuff
參考博文:
https://forums.centos.org/viewtopic.php?t=76065
https://blog.csdn.net/qq_39626154/article/details/82753412
https://www.cnblogs.com/qinlangsky/p/12653880.html
https://juejin.cn/post/7042663735156015140
https://cloud.tencent.com/developer/article/2317630
https://juejin.cn/post/7081931407630532616
https://developer.aliyun.com/article/1443415