Docker學習與實踐(七)
阿新 • • 發佈:2018-06-13
dockers compose 七、Docker Compose
1.簡介
使用一個 Dockerfile 模板文件,可以讓用戶很方便的定義一個單獨的應用容器。然而,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 項目,除了 Web 服務容器本身,往往還需要再加上後端的數據庫服務容器,甚至還包括負載均衡容器等。
Compose 恰好滿足了這樣的需求。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。
使用Compose基本上是一個三步過程:
1.用一個定義你的應用程序的環境,Dockerfile這樣它就可以在任何地方再現。2.定義組成您的應用程序的服務,docker-compose.yml 以便它們可以在隔離的環境中一起運行。
3.運行docker-compose up和撰寫啟動並運行您的整個應用程序。
2.安裝
在Linux上安裝直接從官方GitHub Release處下載編譯好的二進制文件。
[root@dockertest ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [root@dockertest ~]# chmod +x /usr/local/bin/docker-compose [root@dockertest ~]# docker-compose --version docker-compose version 1.21.2, build a133471 #需要卸載時直接刪除二進制文件即可
3.入門使用
①.新建文件夾並創建一個app.py文件
[root@dockertest ~]# mkdir test [root@dockertest ~]# cd test/ [root@dockertest test]# cat app.py from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host=‘redis‘, port=6379) @app.route(‘/‘) def hello(): count = redis.incr(‘hits‘) return ‘Hello World! 該頁面已被訪問 {} 次。\n‘.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
②.創建一個Dockerfile文件
[root@dockertest test]# cat Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
③.創建一個docker-compose.yml文件
[root@dockertest test]# cat docker-compose.yml
version: ‘3‘
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
#這個compose文件定義了兩個服務,web和redis。
#web服務使用當前目錄中的Dockerfile構建鏡像,並映射5000端口。
#redis服務使用公共庫中的redis鏡像
④.運行compose項目
[root@dockertest test]# docker-compose up
⑥.訪問
刷新頁面可以看見數字增加
切換終端查看運行的容器
[root@dockertest ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7846aed7560e redis:alpine "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 6379/tcp test_redis_1
f7c8c051d057 test_web "python app.py" 3 minutes ago Up 2 minutes 0.0.0.0:5000->5000/tcp test_web_1
⑦.停止
[root@dockertest test]# docker-compose down
Stopping test_redis_1 ... done
Stopping test_web_1 ... done
Removing test_redis_1 ... done
Removing test_web_1 ... done
Removing network test_default
4.實例:WordPress
①.創建一個文件夾並新建docker-compose.yml 文件
[root@dockertest ~]# mkdir wordpress
[root@dockertest ~]# cd wordpress/
[root@dockertest wordpress]# cat docker-compose.yml
version: ‘3‘
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
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
②.構建和運行
[root@dockertest wordpress]# docker-compose up -d
Creating network "wordpress_default" with the default driver
Creating volume "wordpress_db_data" with default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
f2aa67a397c4: Pull complete
1accf44cb7e0: Pull complete
2d830ea9fa68: Pull complete
740584693b89: Pull complete
4d620357ec48: Pull complete
ac3b7158d73d: Pull complete
a48d784ee503: Pull complete
bf1194add2f3: Pull complete
0e5c74178a02: Pull complete
e9201d309436: Pull complete
bf1ac4524e8e: Pull complete
Digest: sha256:f030e84582d939d313fe2ef469b5c65ffd0f7dff3b4b98e6ec9ae2dccd83dcdf
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
f2aa67a397c4: Already exists
4c3122805fd6: Pull complete
98ce407ee18a: Pull complete
8a56b8f1ca72: Pull complete
3eb04e3939f2: Pull complete
f5ecc66c0a5f: Pull complete
30ebdb4a78e1: Pull complete
9e9c0e2ba7f1: Pull complete
da976026223e: Pull complete
c97e6cef8eb4: Pull complete
d7d37db38fe6: Pull complete
4fbe9ea008c2: Pull complete
b5247a62a2b6: Pull complete
a430e65efb58: Pull complete
9afdee095b5b: Pull complete
12d5f9a19746: Pull complete
f785e67a07ef: Pull complete
5663bbfd9606: Pull complete
ff13a5b7e05e: Pull complete
710c4b456373: Pull complete
Digest: sha256:b0460dba11737144b232a7794403d4052982f2332caeea82f618fc98d0547387
Status: Downloaded newer image for wordpress:latest
Creating wordpress_db_1 ... done
Creating wordpress_wordpress_1 ... done
③.訪問
#學習文檔地址:https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md
Docker學習與實踐(七)