Docker进阶Docker Compose
1.Docker Compose介绍
定义、运行多个容器(YAML文件)
作用:批量容器编排
Docker Compose是Docke官方的开源项目。需要单独安装
(1)服务services:容器、应用(例如:单个web、redis、redis)
(2)项目project:一组关联的容器。(例如:博客:web,mysql)
2.Docker Compose安装
(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

(2)国内地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

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

docker-compose --version

3.开始使用Docker Compose
官方实例:https://docs.docker.com/compose/gettingstarted/)
pwd
mkdir composetest
cd composetest/
pwd

vim app.py


1 import time 2 3 import redis 4 from flask import Flask 5 6 app = Flask(__name__) 7 cache = redis.Redis(host='redis', port=6379) 8 9 def get_hit_count(): 10 retries = 5 11 while True: 12 try: 13 return cache.incr('hits') 14 except redis.exceptions.ConnectionError as exc: 15 if retries == 0: 16 raise exc 17 retries -= 1 18 time.sleep(0.5) 19 20 @app.route('/') 21 def hello(): 22 count = get_hit_count() 23 return 'Hello World! I have been seen {} times.\n'.format(count)
vim requirements.txt


vim Dockerfile


1 # syntax=docker/dockerfile:1 2 FROM python:3.7-alpine 3 WORKDIR /code 4 ENV FLASK_APP=app.py 5 ENV FLASK_RUN_HOST=0.0.0.0 6 RUN apk add --no-cache gcc musl-dev linux-headers 7 COPY requirements.txt requirements.txt 8 RUN pip install -r requirements.txt 9 EXPOSE 5000 10 COPY . . 11 CMD ["flask", "run"]
vim docker-compose.yml


1 version: "3.9" 2 services: 3 web: 4 build: . 5 ports: 6 - "5000:5000" 7 redis: 8 image: "redis:alpine"
docker-compose up

查看localhost:5000
刷新页面

docker image ls

vim docker-compose.yml


1 version: "3.2" 2 services: 3 web: 4 build: . 5 ports: 6 - "5000:5000" 7 volumes: 8 - .:/code 9 environment: 10 FLASK_ENV: development 11 redis: 12 image: "redis:alpine"
docker-compose up

vim app.py

1 import time 2 3 import redis 4 from flask import Flask 5 6 app = Flask(__name__) 7 cache = redis.Redis(host='redis', port=6379) 8 9 def get_hit_count(): 10 retries = 5 11 while True: 12 try: 13 return cache.incr('hits') 14 except redis.exceptions.ConnectionError as exc: 15 if retries == 0: 16 raise exc 17 retries -= 1 18 time.sleep(0.5) 19 20 @app.route('/') 21 def hello(): 22 count = get_hit_count() 23 #return 'Hello World! I have been seen {} times.\n'.format(count) 24 return 'Hello from Docker! I have been seen {} times.\n'.format(count)

docker-compose up -d 用于“分离”模式
docker-compose ps 查看当前正在运行的内容
docker-compose run 允许服务运行一次性命令
docker-compose run web env 查看web服务可用的环境变量
docker-compose stop 停止服务
docker-compose down --volumes 关闭所有内容,完全删除容器
4.compose配置编写规则
version: '' #版本 services: #服务 服务1:web #服务配置 images build network ... 服务2:redis ... 服务3:mysql ... #其它配置 网络/卷、全局规则 volumes: networks: configs:
https://docs.docker.com/compose/compose-file/compose-file-v3/

5.一键部署WordPress(官方实例)
官方地址:https://docs.docker.com/samples/wordpress/
pwd
mkdir my_wordpress
cd my_wordpress/

vim docker-compose.yml

1 version: "3.9" 2 3 services: 4 db: 5 image: mysql:5.7 6 volumes: 7 - db_data:/var/lib/mysql 8 restart: always 9 environment: 10 MYSQL_ROOT_PASSWORD: somewordpress 11 MYSQL_DATABASE: wordpress 12 MYSQL_USER: wordpress 13 MYSQL_PASSWORD: wordpress 14 15 wordpress: 16 depends_on: 17 - db 18 image: wordpress:latest 19 volumes: 20 - wordpress_data:/var/www/html 21 ports: 22 - "8000:80" 23 restart: always 24 environment: 25 WORDPRESS_DB_HOST: db:3306 26 WORDPRESS_DB_USER: wordpress 27 WORDPRESS_DB_PASSWORD: wordpress 28 WORDPRESS_DB_NAME: wordpress 29 volumes: 30 db_data: {} 31 wordpress_data: {}
docker-compose up -d

访问localhost:8000


浙公网安备 33010602011771号