Docker Compose :適合單機(jī)啟動(dòng)一個(gè)多容器項(xiàng)目符相,容器編排
官方文檔:https://docs.docker.com/compose
操作流程:
1.定義:Dockerfile文件,構(gòu)建自己的鏡像
2.定義:docker-composer.yml班缰,編排容器啟動(dòng)配置文件
3.啟動(dòng):docker compose up -d 啟動(dòng)項(xiàng)目
composer 安裝
- 方式1:docker引擎自帶,docker compose(推薦)
- 方式2:下載單獨(dú)的docker-compose執(zhí)行文件袍睡,不推薦
compose常用命令
# 查看幫助
docker compose -h
# 啟動(dòng)所有docker-compose服務(wù)
docker compose up [服務(wù)name]
# 啟動(dòng)所有docker-compose服務(wù)并后臺(tái)運(yùn)行
docker compose up -d [服務(wù)name]
# 停止并刪除所有容器雀监、網(wǎng)絡(luò)寺枉、卷揭芍、鏡像胳搞。慎用!3蒲睢肌毅!
docker compose down [服務(wù)name]
# 進(jìn)入容器實(shí)例內(nèi)部 docker compose exec compose.yaml文件中寫的服務(wù)id/bin/bash
compose exec yaml里面的服務(wù)id
# 展示當(dāng)前docker compose編排過的運(yùn)行的所有容器
docker compose ps [-a]
# 展示當(dāng)前docker compose編排過的容器進(jìn)程
docker compose top
# 查看容器輸出日志
docker compose logs yaml里面的服務(wù)id
# 檢查配置
dokcer compose config
# 檢查配置,有問題才有輸出
dokcer compose config -q
# 重啟服務(wù)
docker compose restart [服務(wù)name]
# 啟動(dòng)服務(wù)
docker compose start [服務(wù)name]
# 停止服務(wù)
docker compose stop [服務(wù)name]
配置文件命名規(guī)則:
compose.yaml(首選)或compose.yml放置在工作目錄中
還支持docker-compose.yaml或docker-compose.yml(為向前兼容老版本姑原,不推薦)
配置文件規(guī)則:官網(wǎng)文檔
composer.yaml 核心文件
version: "3" # 版本
services: # 服務(wù)容器集合
服務(wù)1:web
# 服務(wù)配置
image
networks
......
服務(wù)2:redis
...
# 其他配置 網(wǎng)絡(luò)/卷悬而、全局規(guī)則
volumes:
network:
configs:
composer.yaml 示例
version: "3"
# 服務(wù)容器集合
services:
# 服務(wù)名(自己定義)
my_app:
# 容器鏡像,可以是拉取锭汛,也可以是構(gòu)建摊滔,本示例中使用自己構(gòu)建的鏡像
image: zx_docker:1.1
# 指定容器name,不指定則自動(dòng)生成,生成規(guī)則:文件夾 - 服務(wù)名 - 序號(hào)
container_name: my_app
# 暴露端口
ports:
- "8080:8777"
# 指定的網(wǎng)絡(luò)
networks:
- my_app_net
# 指定啟動(dòng)該容器需要的依賴:先啟動(dòng)依賴后再啟動(dòng)該容器
depends_on:
- redis
- mysql
# redis服務(wù)容器
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- my_app_net
command: redis-server /etc/redis/redis.conf
# mysql服務(wù)容器
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'my_db'
MYSQL_USER: 'admin'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- my_app_net
command: --default-authentication-plugin=mysql_native_password
# 應(yīng)用的自定義網(wǎng)絡(luò),用于該應(yīng)用容器間可以通過服務(wù)名進(jìn)行網(wǎng)絡(luò)通訊
networks:
my_app_net:
操作
配置文件compose.yaml在myapp文件夾中
[root@test myapp]# pwd
/root/myapp
[root@test myapp]# ls
compose.yaml
- 啟動(dòng)應(yīng)用
[root@test myapp]# docker compose up -d
[+] Running 4/4
? Network myapp_my_app_net Created 0.2s # 創(chuàng)建網(wǎng)絡(luò)
? Container myapp-mysql-1 Started 0.0s # 啟動(dòng)mysql容器
? Container myapp-redis-1 Started 0.0s # 啟動(dòng)redis容器
? Container my_app Star... 0.0s # 依賴啟動(dòng)后店乐,啟動(dòng)my_app容器
[root@test myapp]# docker compose ps 查看容器進(jìn)程,該應(yīng)用的所有容器均已啟動(dòng)
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
# 容器名按照定義生成
my_app zx_docker:1.1 "java -jar /zx_docker.jar" my_app 4 minutes ago Up 4 minutes 0.0.0.0:8080->8777/tcp, :::8080->8777/tcp
# 容器名生成按照:文件夾-服務(wù)名-序號(hào)
myapp-mysql-1 mysql:5.7 "docker-entrypoint.sh --default-authentication-plugin=mysql_native_password" mysql 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
# 容器名生成按照:文件夾-服務(wù)名-序號(hào)
myapp-redis-1 redis:6.0.8 "docker-entrypoint.sh redis-server /etc/redis/redis.conf" redis 4 minutes ago Up 4 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
- 查看網(wǎng)絡(luò)
[root@test myapp]# docker network ls
NETWORK ID NAME DRIVER SCOPE
a778d03f2a7e bridge bridge local
7bc8fedda4c5 host host local
361ece4d96aa none null local
d00da985214d myapp_my_app_net bridge local 創(chuàng)建出新網(wǎng)絡(luò),用于該應(yīng)用容器之間通訊
- 停止
[root@test myapp]# docker compose stop [服務(wù)名 可指定多個(gè)服務(wù)容器]
[+] Stopping 3/3
? Container my_app Stopp... 0.2s
? Container myapp-mysql-1 Stopped 2.0s
? Container myapp-redis-1 Stopped 0.2s
[root@test myapp]# docker compose ps 查看容器進(jìn)程,該應(yīng)用的所有容器均已停止
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
- 啟動(dòng)start
[root@test myapp]# docker compose start [服務(wù)名 可指定多個(gè)服務(wù)容器]
[+] Running 3/3
? Container myapp-mysql-1 Started 0.3s
? Container myapp-redis-1 Started 0.4s
? Container my_app Start... 0.3s
[root@test myapp]# docker compose ps 查看容器進(jìn)程,該應(yīng)用的所有容器均已啟動(dòng)
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my_app zx_docker:1.1 "java -jar /zx_docker.jar" my_app 14 minutes ago Up 8 seconds 0.0.0.0:8080->8777/tcp, :::8080->8777/tcp
myapp-mysql-1 mysql:5.7 "docker-entrypoint.sh --default-authentication-plugin=mysql_native_password" mysql 14 minutes ago Up 8 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
myapp-redis-1 redis:6.0.8 "docker-entrypoint.sh redis-server /etc/redis/redis.conf" redis 14 minutes ago Up 8 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
- 重啟
[root@test myapp]# docker compose restart [服務(wù)名 可指定多個(gè)服務(wù)容器]
[+] Restarting 3/3
? Container myapp-mysql-1 Started 1.7s
? Container my_app Start... 0.5s
? Container myapp-redis-1 Started 0.5s
[root@test myapp]#
[root@test myapp]# docker compose ps 查看容器進(jìn)程,該應(yīng)用的所有容器均已啟動(dòng)
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my_app zx_docker:1.1 "java -jar /zx_docker.jar" my_app 15 minutes ago Up 6 seconds 0.0.0.0:8080->8777/tcp, :::8080->8777/tcp
myapp-mysql-1 mysql:5.7 "docker-entrypoint.sh --default-authentication-plugin=mysql_native_password" mysql 15 minutes ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
myapp-redis-1 redis:6.0.8 "docker-entrypoint.sh redis-server /etc/redis/redis.conf" redis 15 minutes ago Up 6 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
- 關(guān)閉 停止并刪除所有容器呻袭、網(wǎng)絡(luò)眨八、卷、鏡像左电。慎用A唷!篓足!
[root@test myapp]# docker compose down
[+] Running 4/4
? Container my_app Remo... 0.2s
? Container myapp-mysql-1 Removed 1.5s
? Container myapp-redis-1 Removed 0.1s
? Network myapp_my_app_net Removed 0.1s
[root@test myapp]#
[root@test myapp]# docker compose ps 容器已移除
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
[root@test myapp]#
[root@test myapp]# docker network ls 自定義網(wǎng)絡(luò)已被刪除
NETWORK ID NAME DRIVER SCOPE
a778d03f2a7e bridge bridge local
7bc8fedda4c5 host host local
361ece4d96aa none null local