一、Docker Compose
簡介
Compose 項⽬是 Docker 官⽅的開源項⽬,負責實現對 Docker 容器集群的快速編排。從功能上看,跟 OpenStack 中的 Heat ⼗分類似。
其代碼⽬前在 https://github.com/docker/compose 上開源。
Compose 定位是 「定義和運⾏多個 Docker 容器的應⽤(Defining and running multi-container Docker applications)」,其前身是開源項⽬ Fig。
我們知道使⽤⼀個 Dockerfile 模板⽂件,可以讓⽤戶很⽅便的定義⼀個單獨的應⽤容 器。然⽽,在⽇常⼯作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現⼀個 Web 項 ⽬,除了 Web 服務容器本身,往往還需要再加上后端的數據庫服務容器,甚⾄還包括負載均衡容器等。
Compose 恰好滿⾜了這樣的需求。它允許⽤戶通過⼀個單獨的 docker-compose.yml 模板⽂件(YAML 格式) 來定義⼀組相關聯的應⽤容器為⼀個項⽬(project)。
Compose 中有兩個重要的概念:
-
服務 ( service ):⼀個應⽤的容器,實際上可以包括若⼲運⾏相同鏡像的容器實例。
-
項⽬ ( project ):由⼀組關聯的應⽤容器組成的⼀個完整業務單元,在 docker-compose.yml ⽂件中定 義。
Compose 的默認管理對象是項⽬,通過⼦命令對項⽬中的⼀組容器進⾏便捷地⽣命周期管理。
Compose 項⽬由 Python 編寫,實現上調⽤了 Docker 服務提供的 API 來對容器進⾏管理。因此,只要所操作的平 台⽀持 Docker API,就可以在其上利⽤ Compose 來進⾏編排管理
二、docker compose 安裝 與 卸載
# 安裝官網: https://docs.docker.com/compose/install/
1.下載
# 官網安裝
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 國內
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@docter bin]# ll
total 12440
-rw-r--r-- 1 root root 12737304 Jul 14 20:19 docker-compose
2.授權
[root@docter bin]# sudo chmod +x /usr/local/bin/docker-compose
3.檢測版本
[root@docker bin]# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
4.卸載
如果是⼆進制包⽅式安裝的,刪除⼆進制⽂件即可。
sudo rm /usr/local/bin/docker-compose
三、docker compose使用
1.相關概念
2個重要術語:
-
服務 ( service ):⼀個應⽤容器,實際上可以運⾏多個相同鏡像的實例
-
項⽬ ( project ):由⼀組關聯的應⽤容器組成的⼀個完整業務單元。∂⼀個項⽬可以由多個服務(容器)關聯 ⽽成, Compose ⾯向項⽬進⾏管理
2.場景
最常⻅的項⽬是 web ⽹站,該項⽬應該包含 web 應⽤和緩存。
-
Django應⽤
-
mysql服務
-
redis服務
-
elasticsearch服務 ......
3.docker-compose模板
- 參考⽂檔:https://docker_practice.gitee.io/zh-cn/compose/compose_file.html
[root@docker ~]# vim docker-compose.yaml #固定命名
version: "3.0"
services:
mysqldb:
image: mysql:5.7.19
container_name: mysql
ports:
- "3306:3306"
volumes:
- /root/mysql/conf:/etc/mysql/conf.d
- /root/mysql/logs:/logs
- /root/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- ems
depends_on:
- redis
redis:
image: redis:4.0.14
container_name: redis
ports:
- "6379:6379"
networks:
- ems
volumes:
- /root/redis/data:/data
command: redis-server
networks:
ems:
4.通過docker-compose運⾏⼀組容器
做實驗之前把容器清理干凈docker rm -f $(docker ps -a -q)
[root@centos ~]# docker-compose up //前台啟動⼀組服務
[root@centos ~]# docker-compose up -d //后台啟動⼀組服務
5. docker-compose 模板⽂件
模板⽂件是使⽤ Compose 的核⼼,涉及到的指令關鍵字也⽐較多。這⾥⾯⼤部分指令跟 docker run 相關參數的含義都是類似的。
默認的模板⽂件名稱為 docker-compose.yml
,格式為 YAML
格式。
version: "3"
services:
webapp:
image: examples/web
ports:
- "80:80"
volumes:
- "/data"
注意每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)等來⾃動構建⽣成鏡像。
如果使⽤ build 指令,在 Dockerfile 中設置的選項(例如: CMD , EXPOSE , VOLUME , ENV 等) 將會⾃動被獲 取,⽆需在 docker-compose.yml 中重復設置。
下⾯分別介紹各個指令的⽤法。
build
指定 Dockerfile 所在⽂件夾的路徑(可以是絕對路徑,或者相對 docker-compose.yml ⽂件的路徑)。 Compose 將會利⽤它⾃動構建這個鏡像,然后使⽤這個鏡像。
version: '3' # docker-compose的版本,定義版本
services: # 定義服務
webapp: # 項目名稱,自己定義
build: ./dir # 構建 ./相對路徑
你也可以使⽤ context 指令指定 Dockerfile 所在⽂件夾的路徑。
使⽤ dockerfile 指令指定 Dockerfile ⽂件名。
使⽤ arg 指令指定構建鏡像時的變量。
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate # 定義你dockerfile的名字
args: # 定義構建運行時的變量
buildno: 1
command
覆蓋容器啟動后默認執⾏的命令
command: echo "hello world
container_name
指定容器名稱。默認將會使⽤ 項⽬名稱_服務名稱_序號 這樣的格式。
container_name: docker-web-container
注意: 指定容器名稱后,該服務將⽆法進⾏擴展(scale),因為 Docker 不允許多個容器具有相同的名稱
depends_on
解決容器的依賴、啟動先后的問題。以下例⼦中會先啟動 redis db 再啟動 web
version: '3'
services:
web:
build: .
depends_on: #先啟動
- db
- redis
redis:
image: redis
db:
image: postgres
注意: web 服務不會等待 redis db 「完全啟動」之后才啟動。
env_file
從⽂件中獲取環境變量,可以為單獨的⽂件路徑或列表。
如果通過 docker-compose -f FILE ⽅式來指定 Compose 模板⽂件,則 env_file 中變量的路徑會基於模板 ⽂件路徑。
如果有變量名稱與 environment 指令沖突,則按照慣例,以后者為准。
env_file: ./mysql.env #單個文件
env_file: #多個文件
- ./common.env
- ./apps/web.env
- /opt/secrets.env
環境變量⽂件中每⼀⾏必須符合格式,⽀持 # 開頭的注釋⾏。
# common.env: Set development environment
PROG_ENV=development
environment
設置環境變量。你可以使⽤數組或字典兩種格式。 只給定名稱的變量會⾃動獲取運⾏ Compose 主機上對應變量的值,可以⽤來防⽌泄露不必要的數據。
environment: RACK_ENV: development SESSION_SECRET:environment: - RACK_ENV=development - SESSION_SECRET
如果變量名稱或者值中⽤到 true|false,yes|no 等表達 布爾 含義的詞匯,最好放到引號⾥,避免 YAML ⾃動 解析某些內容為對應的布爾語義。這些特定詞匯,包括
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
healthcheck
通過命令檢查容器是否健康運⾏。
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
image
指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在, Compose 將會嘗試拉取這個鏡像。
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
networks
配置容器連接的⽹絡
version: "3"
services:
some-service:
networks: #有創建有連接
- some-network
- other-network
networks: #創建哪個網橋
some-network:
other-network:
ports
暴露端口信息。 使⽤宿主端口:容器端口 (HOST:CONTAINER) 格式,或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可 以。
ports:
- "3000"
- "8000:80"
- "49100:22"
- "127.0.0.1:8001:8001"
注意:當使⽤ HOST:CONTAINER 格式來映射端⼝時,如果你使⽤的容器端⼝⼩於 60 並且沒放到引號⾥,可能會得 到錯誤結果,因為 YAML 會⾃動解析 xx:yy 這種數字格式為 60 進制。為避免出現這種問題,建議數字串都采⽤ 引號包括起來的字符串格式。
sysctls
配置容器內核參數。
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
ulimits
指定容器的 ulimits 限制值。 例如,指定最⼤進程數為 65535,指定⽂件句柄數為 20000(軟限制,應⽤可以隨時修改,不能超過硬限制) 和 40000(系統硬限制,只能 root ⽤戶提⾼)
ulimits:
nproc: 655350
nofile:
soft: 131072
hard: 400000
volumes
數據卷所掛載路徑設置。可以設置為宿主機路徑( HOST:CONTAINER )或者數據卷名稱( VOLUME:CONTAINER ),並且 可以設置訪問模式 ( HOST:CONTAINER:ro )。 該指令中路徑⽀持相對路徑。
volumes:
- "/mnt/html:/usr/share/nginx/html"
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
如果路徑為數據卷名稱,必須在⽂件中配置數據卷
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes: #虛擬存儲卷
mysql_data:
五、docker-compose 常⽤命令
1. 命令對象與格式
對於 Compose 來說,⼤部分命令的對象既可以是項⽬本身,也可以指定為項⽬中的服務或者容器。如果沒有特別 的說明,命令對象將是項⽬,這意味着項⽬中所有的服務都會受到命令影響。
執⾏ docker-compose [COMMAND] --help
或者 docker-compose help [COMMAND]
可以查看具體某個命令的 使⽤格式。
docker-compose 命令的基本的使⽤格式是
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
2. 命令選項
-
-f, --file FILE 指定使⽤的 Compose 模板⽂件,默認為 docker-compose.yml ,可以多次指定。
docker-compose -f /root/docker-compose.yaml up -d
-
-p, --project-name NAME 指定項⽬名稱,默認將使⽤所在⽬錄名稱作為項⽬名
-
--x-networking 使⽤ Docker 的可拔插⽹絡后端特性
-
--x-network-driver DRIVER 指定⽹絡后端的驅動,默認為 bridge
-
--verbose 輸出更多調試信息。
-
-v, --version 打印版本並退出。
3.命令使⽤說明
1).up
格式為docker-compose up [options] [SERVICE...]
。
--該命令⼗分強⼤,它將嘗試⾃動完成包括構建鏡像,(重新)創建服務,啟動服務,並關聯服務相關容器的⼀系列操作。
--鏈接的服務都將會被⾃動啟動,除⾮已經處於運⾏狀態。
--可以說,⼤部分時候都可以直接通過該命令來啟動⼀個項⽬。
--默認情況, docker-compose up 啟動的容器都在前台,控制台將會同時打印所有容器的輸出信息,可以很⽅便進⾏調試。
--當通過 Ctrl-C 停⽌命令時,所有容器將會停⽌。
--如果使⽤ docker-compose up -d ,將會在后台啟動並運⾏所有的容器。⼀般推薦⽣產環境下使⽤該選項。
--默認情況,如果服務容器已經存在, docker-compose up 將會嘗試停⽌容器,然后重新創建(保持使⽤volumes-from 掛載的卷),以保證新啟動的服務匹配 docker-compose.yml ⽂件的最新內容
2).down
此命令將會停⽌ up 命令所啟動的容器,並移除⽹絡
3).exec
進入指定的容器
4).ps
格式為docker-compose ps [options] [SERVICE...]
列出項⽬中⽬前的所有容器。
選項: -q 只打印容器的 ID 信息
5). restart
格式為 docker-compose restart [options] [SERVICE...]
。
重啟項⽬中的服務。
選項: -t, --timeout TIMEOUT 指定重啟前停⽌容器的超時(默認為 10 秒)。
6). rm
格式為 docker-compose rm [options] [SERVICE...]
。
刪除所有(停⽌狀態的)服務容器。推薦先執⾏ docker-compose stop 命令來停⽌容器。 選項:
-
-f, --force 強制直接刪除,包括⾮停⽌狀態的容器。⼀般盡量不要使⽤該選項。
-
-v 刪除容器所掛載的數據卷。
7).start
格式為 docker-compose start [SERVICE...]
。
啟動已經存在的服務容器。
8).stop
格式為docker-compose stop [options] [SERVICE...]
。
停⽌已經處於運⾏狀態的容器,但不刪除它。通過 docker-compose start 可以再次啟動這些容器。
選項: -t, --timeout TIMEOUT 停⽌容器時候的超時(默認為 10 秒)
9).top
查看各個服務容器內運⾏的進程。
10).unpause
格式為 docker-compose unpause [SERVICE...]
。
恢復處於暫停狀態中的服務。
六、官方寫docker compose構建redis
官網 https://docs.docker.com/compose/gettingstarted/
1、應用app.py
2、Dockerfile 應用鏡像
3、Docker-compose.yml文件(定義整個服務,需要的環境,web、redis)完整的上線服務
4、啟動compose項目( docker-compose up )
流程
# 1、創建網絡
# 2、執行Docker-compose.yml文件
# 3、在 Compose 文件中定義服務
# 4、啟動docekr-compose
0、准備工作
yum -y install python-pip # pip是python包管理工具
yum -y install epel-relase # 報錯的話執行 # 如果官網安裝不需要執行
1、創建項目目錄
[root@docter home]# mkdir composetest
[root@docter home]# cd composetest/
2、在項目目錄中創建名為app.py文件
[root@docter composetest]# pwd
/home/composetest
[root@docter composetest]# vim app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
3、 requirements.txt依賴
[root@docter composetest]# vim requirements.txt
flask
redis
4、創建一個 Dockerfile
[root@docter composetest]# vim Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
# CMD ["python", "run"] #這樣也可以
# 這告訴 Docker:
從 Python 3.7 映像開始構建映像。
將工作目錄設置為/code.
設置flask命令使用的環境變量。
安裝 gcc 和其他依賴項
復制requirements.txt並安裝 Python 依賴項。
將元數據添加到圖像中以描述容器正在偵聽端口 5000
將.項目中的當前目錄復制到.鏡像中的workdir 。
將容器的默認命令設置為flask run.
5、在 Compose 文件中定義服務
[root@docter composetest]# vim docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
# 這個 Compose 文件定義了兩個服務:web和redis.
補充
# 網絡服務
該web服務使用從Dockerfile當前目錄中構建的映像。然后它將容器和主機綁定到暴露的端口5000. 此示例服務使用 Flask Web 服務器的默認端口5000.
# Redis服務
該redis服務使用 從 Docker Hub 注冊表中提取的公共Redis映像。
6、使用 Compose 構建並運行您的應用程序
[root@docter composetest]# docker-compose up
7、報錯排查
The command '/bin/sh -c apk add --no-cache gcc musl-dev linux-headers' returned a non-zero code: 3
ERROR: Service 'web' failed to build : Build failed
# Docker 容器似乎沒有互聯網連接,您必須IPv4 forwarding使用以下命令啟用
[root@docter composetest]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@docter composetest]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@docter composetest]# sysctl -p /etc/sysctl.conf
[root@docter composetest]#
[root@docter composetest]# docker-compose up #前台啟動
[root@docter my_wordpress]# docker-compose up -d #后台啟動
8、查看測試docker-compose
[root@docter composetest]# ll
total 16
-rw-r--r-- 1 root root 515 Jul 14 20:29 app.py
-rw-r--r-- 1 root root 111 Jul 14 20:32 docker-compose.yml
-rw-r--r-- 1 root root 281 Jul 14 20:31 Dockerfile
-rw-r--r-- 1 root root 12 Jul 14 20:30 requirements.txt
[root@docter composetest]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9b49cecffba composetest_web "flask run" 27 minutes ago Up 27 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp composetest_web_1
ffedc98d9959 redis:alpine "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 6379/tcp composetest_redis_1
[root@docter composetest]# curl localhost:5000 # docker-compose 構建成功
Hello World! I have been seen 1 times.
七、依據上小結 細講
1、查看鏡像
[root@docter composetest]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest 8cada718e4aa 35 minutes ago 184MB
redis alpine 500703a12fa4 7 days ago 32.3MB
python 3.7-alpine 93ac4b41defe 2 weeks ago 41.9MB
# docker-compose構建redis鏡像自動加載成功
拓展
[root@docter composetest]# docker service ls
默認的服務名 文件名_服務名_num
多個服務器,集群 A B _num 副本數量
服務redis服務 ==》 4個副本
集群狀態,服務不可能只有一個運行實例 ==》 彈性 10 HA 高並發
2、查看網絡規則
[root@docter composetest]# docker network ls
NETWORK ID NAME DRIVER SCOPE
6a94c74d036c bridge bridge local
249dde48a683 composetest_default bridge local # 自動添加的
b0ff56aa1b35 host host local
e274cbbee51f none null local
3、查看網絡內部信息
[root@docter composetest]# docker network inspect composetest_default
[
{
"Name": "composetest_default",
"Id": "249dde48a68302b57f0ce8a8640493f36ccd6ee105b1e385100b389d90b20333",
"Created": "2021-07-14T20:34:09.710827032+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"d9b49cecffbab8645b1b25daa6bbcd69a35f1307941040f7bfb733d71ee381ce": {
"Name": "composetest_web_1", # composetest_redis_1和web同一個網絡
"EndpointID": "89b0c1ccc312d494cf37d96adfaccfc648f3840ab78152b3e3f79e79145a309e",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"ffedc98d9959ed4ec92b0ae9fb23ae6f40ef31513c872138ea1e27a109422182": {
"Name": "composetest_redis_1", # composetest_redis_1和web同一個網絡
"EndpointID": "4f45b1b989fdcdadfcf4cc3922eace4c252539ed714e62a026cec91d5230325a",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "composetest",
"com.docker.compose.version": "1.29.2"
}
}
]
# 1、10個服務 ==》項目(項目中的內容都在同一個網絡下 域名訪問)
# 2、如果在同一個網絡下,我們可以直接通過域名訪問
4、停止docker-compose
# 1、docker-compose down #推薦第一種
在當前文件下執行命令
^CGracefully stopping... (press Ctrl+C again to force)
Stopping composetest_web_1 ...
Stopping composetest_redis_1 ... done
Killing composetest_web_1 ... done
# 2、ctrl +c
5、docekr小結
1、docker鏡像 run ==》容器
2、dockerfile構建鏡像 (服務打包)
3、docker-compose啟動項目(編排、多個微服務、環境)
4、docker網絡
6、yaml規則
docker-compose.yaml # 是docker-compose核心,理解為只有三層
[root@docter composetest]# vim docker-compose.yml
version: "3.9" # 版本層,跟docker引擎對應的,第一層
services: #服務層,第二層
web: ##服務1
build: . #服務配置
ports:
- "5000:5000"
redis: ##服務2
image: "redis:alpine"
volumes: # 其他配置(網絡、卷、全局規則)
networks:
configs:
7、學習更多指令參照官方文檔
官方文檔:(https://docs.docker.com/compose/compose-file/compose-file-v3/)
八、docker-compose 搭建個人博客
WordPress博客
官網模板:(https://docs.docker.com/samples/wordpress/)
1、下載項目(docker-compose.yml )
2、如果需要文件 Dockerfile
3、文件准備齊全(直接一鍵啟動)
1、創建目錄
[root@docter home]# mkdir my_wordpress
[root@docter home]# cd my_wordpress/
2、編寫 docker-compose.yml
[root@docter my_wordpress]# vim docker-compose.yml
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
3、啟動
[root@docter my_wordpress]# pwd
/home/my_wordpress
[root@docter my_wordpress]# ll
total 4
-rw-r--r-- 1 root root 646 Jul 14 21:43 docker-compose.yml
[root@docter my_wordpress]# docker-compose up #前台啟動
Creating network "my_wordpress_default" with the default driver
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done
[root@docter my_wordpress]# docker-compose up -d #后台啟動
Starting my_wordpress_db_1 ... done
Starting my_wordpress_wordpress_1 ... done
# 注: 必須在指定文件docker-compose.yml下啟動才可以,否則啟動起來是其他容器
4、測試
[root@docter my_wordpress]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e9b9aca589a wordpress:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp my_wordpress_wordpress_1
e2713ba9243a mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp my_wordpress_db_1
# 測試訪問: http://192.168.15.30:8000
5、總結
1、未來項目只要有docker-compose文件,安裝這個規則,啟動編排容器
2、公司 docekr-compose 直接啟動
3、網上開源項目 docker-compose 一鍵搞定
# 工程 服務 容器
項目compose:三層
# 1、工程 Porject
# 2、服務 服務
# 3、容器 運行實例
# 補充:
docker secret # 安全!配置密碼,證書
6、擴展 Docker swarm
Docker swarm ----> k8s #docker swarm是低級別的k8s
# 集群: 4台集群 --》阿里雲購買4台服務器 --》1核2G 都要安裝docker
# Raft協議
# 雙主雙從:假設一個節點掛了,其他節點是否可以用
Raft協議:保證大多數節點存活才可以用。只要>1,集群至少大於3台
# 實驗
1、docker1機器停止。宕機!雙主,另外一個主節點也不能使用了!
2、可以將其他節點離開
# 總結
集群 可用 3個主節點 > 1台存活才可用
Raft協議:保證大多數節點存活,才可以用,高可用
# 彈性、擴縮容
服務, 集群中任意的節點可以訪問,服務中可以有多個副本動態實現擴縮容
docekr service --help # 幫助命令
docker service update --relipcas 5 my-nginx # 擴縮容方式一
docker service scale my-nginx=5 # 擴縮容方式二
docker service rm my-nginx #移除服務
# docker swarm