Docker30:Docker Compose

Docker30:Docker Compose

Created
Nov 18, 2021 11:29 AM
Last Edited
Last updated December 2, 2021
Tags

1. 简介

以前手动操作单个容器 DockerFile bulid run
Docker Compose轻松高效管理容器,定义运行多个容器。
Docker Compose是Docker官方开源项目,需要安装。
DockerFile让程序在任何地方运行。Web服务、Redis、mysql、nginx...多个容器。
docker-compose.yml
version: "3.9" # optional since v1.27.0 services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
 

2. 安装Docker Compose

2.1 下载

# 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 # 这个下载快一些 $ sudo 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
查看
notion image

2.2 授权

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

2.3 查看

docker-compose --version
notion image
 

3. 体验

3.1 创建文件夹

$ mkdir composetest $ cd composetest

3.2 创建测试文件

  •  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
# 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"]
 

3.3 创建 Compose 文件

创建文件docker-compose.yml
version: "3.9" services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
notion image

3.4 构建运行app,运行compose

当前文件夹下运行
root@docker:/home/composetest# docker-compose up
 
启动成功如图
notion image
浏览访问:http://localhost:5000/
notion image
刷新一下,变成了2次
notion image
查看镜像
  • 自动下载了相关镜像
notion image
查看运行的容器
notion image
 
查看网络规则,compose帮助创建了网络
notion image
 
notion image
  1. 应用app.py
  1. Dockerfile 应用打包为镜像
  1. Docker-compose.yml文件(定义整个服务,需要的环境。web、redis)完整的上线服务
  1. 启动compose项目(docker-compose up)
 

3.5 停止

Ctrl + C
notion image
# 后台启动 docker-compose up -d # 关闭后台启动 docker-compose stop
 
 
 
流程:
  1. 网络
  1. 执行Docker-compose.yml
  1. 启动服务
 
 

配置信息

  • Yaml规则
# 3层 version: '' # 版本 service: # 服务 服务1:web # 服务配置 images build network ... 服务2: redis 服务3: redis # 其他配置 网络、卷、全局规则 volumes: nrework: config: