Docker compose

Docker compose

安裝 Docker Compose

1
2
3
4
5
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

安裝完成就可以看版本資訊

安裝

Step 1: Setup

1.建立 composetest 資料夾

1
2
mkdir composetest
cd composetest

2.建立 app.py

1
touch app.py

2.1.編輯 app.py

1
vi app.py

Vi指令

i 編輯
ESC 結束編輯
:wq 存檔並離開

2.2輸入以下內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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)

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

3. 建立 requirements.txt

1
touch requirements.txt

3.1. 編輯 requirements.txt

1
vi requirements.txt

3.2. 輸入文字

1
2
flask
redis

Step 2: Create a Dockerfile

1. 建立 touch Dockerfile

1
touch Dockerfile

1.1. 輸入內容

1
2
3
4
5
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Step 3: Define services in a Compose file

1. 建立 docker-compose.yml

1
touch docker-compose.yml

1.1. 輸入內容

1
2
3
4
5
6
7
8
9
10
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis"
ports:
- "6379:6379"

這時候 檔案結構會是這樣

Step 4: Build and run your app with Compose

1
docker-compose up -d

這時後就可以看到剛剛 Run 的 python 網站

Step 5: Edit the Compose file to add a bind mount

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.1'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis"
ports:
- "6379:6379"

5.1. 再重新 build 一次就可以看到剛剛修改的內容

1
docker-compose up -d

docker-compose 其他指令

背景執行 docker-compose

1
docker-compose up -d

檢查 docker-compose 容器狀態

1
docker-compose ps

參考