- 用處:定義、運作多個容器的程式,批量容器編排。
- YAML配置檔案
- single command指令學習
- 使用Compose三個步驟:
- 義Dockerfile
- 寫docker-compose.yaml
- 行compose,docker-cmpose up啟動
- 安裝docker-compose
- Linux
- Docker Compose存放在GitHub,高速安裝Docker Compose如下:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 給compose指令賦予可執行的權利
chmod +x /usr/local/bin/docker-compose
- 檢測是否安裝成功,不成功的話就需要重新開機伺服器
[root@Contos7 ~]# docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
- Mac
- mac其實不需要安裝,因為Docker Desktop中就自帶compose。
- compose初體驗 📦
- 建立項目結構:
mkdir composetest && cd composetest
- 建立
檔案,也就是項目檔案: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)
- 建立requirements.txt檔案
flask
redis
- 編寫Dockerfile
#将python:3.7-alpine作為基礎鏡像
FROM python:3.7-alpine
#設定工作目錄
WORKDIR /code
#設定環境變量
ENV FLASK_APP=app.py
#設定主機比對所有位址,即所有主機可通路
ENV FLASK_RUN_HOST=0.0.0.0
#安裝包的時候不安裝到全局
#使員工gcc來編譯程式,但是一旦程式被編譯,我就不再需要gcc了,并且可以加快編譯速度
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"]
- 編寫docker-compose.yml
#docker-compose版本号
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
- 在docker-compose.yml所在目錄使用docker-compose up啟動(定義、運作多個容器),docker-compose down停止
- Tips⚠️ :這樣建立出的容器的名字是目前docker-compose.yaml所在目錄的目錄名加上yml中的服務名,尾部的num表示該容器的副本數量,這些副本可以發送到其他機器上運作,compose會建構一個預設的網絡(不使用docker0),所有容器預設在一個網絡中
- 使用idea用docker-compose打包釋出

![\[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-pgtBT0VD-1644003267186)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/93ec0055-0f8c-4cdc-9efb-26ccae0635d6/Untitled.png)\]](https://img-blog.csdnimg.cn/f8d94374d468496d8a51371cbc54729a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_30,g_se,x_16)
- 複制jar包pom配置
<!--複制jar包到指定目錄-->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>gen-webadmin</id>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="docker" file="target/${project.artifactId}-${project.version}.${project.packaging}" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
- yam規則
#三層
#compops版本号
version: "xxx"
#服務配置
services:
server1:
configuration1:
configuration2:
configuration3:
configuration4
#啟動順序控制,先啟動數組中的服務項,最後再啟動本服務
depends_on:
....
server2:
configuration1
....
#全局配置
netowkr
volume
- 使用docker-compose.yml建構wordpress部落格園
- docker-compose.yml
version: "3.8"
services:
db:
image: mysql:5.7
volumes:
- db_datas:/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
ports:
- "5000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_datas: {}
- 使用docker-compose up -d可以讓其在背景啟動,不加-d表示在前台啟動