首页 > 技术文章 > 走进docker-compose

1ssqq1lxr 2021-03-19 11:13 原文

什么是Docker-Compose?

Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。比如我们发布一个系统可能包含多个服务,服务与服务之间网络需要互通,那此时我们需要一个容器一个容器去启动,如果使用Docker-Compose即可定义一个描述文件docker-compose.yaml完成所有服务的发布, 并且实现容器间互通(单台物理机)。

Docker-Compose安装

  1. Docker Compose依靠Docker Engine进行任何有意义的工作,因此请确保根据您的设置在本地或远程安装Docker Engine。参考上篇文章安装Docker环境
  2. 升级 如果要从Compose 1.2或更早版本进行升级,请在升级Compose之后删除或迁移现有容器。这是因为从1.3版开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。如果Compose检测到创建的没有标签的容器,它将拒绝运行,这样您就不会最终获得两组标签。如果要继续使用现有容器(例如,因为它们具有要保留的数据量),则可以使用Compose 1.5.x通过以下命令迁移它们:
docker-compose migrate-to-labels
#删除容器
docker container rm -f -v myapp_web_1 myapp_db_1 ...
  1. 卸载 如果使用curl以下命令进行安装,则要卸载Docker Compose
#如果使用curl以下命令进行安装,则要卸载Docker Compose 
sudo rm /usr/local/bin/docker-compose
#如果使用pip以下命令进行安装,则要卸载Docker Compose:
pip uninstall docker-compose
  1. 开始安装Docker-Compose
    • 命令安装
    #下载二进制
    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    #修改执行权限
    sudo chmod +x /usr/local/bin/docker-compose
  • 下载可执行文件安装

    新建目录Compose可执行二进制文件下载

    #下载二进制
    mv docker-compose /usr/local/bin/docker-compose
    #修改执行权限
    sudo chmod +x /usr/local/bin/docker-compose

docker-compose.yaml 构建文件

官网demo:


version: '3'
services:
  back:
    image: backService:1.0
    container_name: back
    environment:
      - name=tom
      - DB_PATH=jdbc:sqlite:/data/ns.db
    restart: always
    privileged: true
    ports:
      - "9000:9000"
    networks:
      - "net"
    volumes:
      - "/root/k3s.kube.config:/k3s.kube.config"
      - "/root/data:/data"
      - "/etc/network/interfaces:/etc/network/interfaces"
  front:
    image: front:1.0
    container_name: front
    restart: always
    ports:
      - "10087:80"
    networks:
      - "net"
    volumes:
      - "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
  net:
    
  • version
    1. v3 版本不支持 volume_from 和 extends 属性
    2. cpu 和 内存属性的设置移到了 deploy 中
    3. v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。
  • services 多个服务
    • image 镜像名称
    • build 不使用镜像时候采用主动build镜像
    • environment 环境变量
    • expose 标示端口号
    • ports 映射端口号到宿主机
    • volumes 挂在目录到宿主机
    • depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行
    • container_name 容器名称
    • networks 网络(自定义网络名称)
    • restart always每次docker启动时候重启
    • links 连接目标容器(services下配置的名称)
    • privileged: true:容器可获得root权限
    • logging 日志选项
      • driver 配置驱动
      • options 可选配置
  • networks 配置自定义网络

Docker-Compose命令详解

  1. docker-compose version :用于查看当前的版本

  2. docker-compose ps -a :查看当前启动服务 -a 查看所有包含已经停止的服务,不加则只展示运行中的服务

  3. docker-compose build:用于docker-compose文件中描述的build构建镜像

  4. docker-compose up 启动服务

  5. docekr-compose stop停止服务

  6. docker-compose start 启动停止的服务

  7. docker-compose run 启动docker-compose.yml描述的一个service

  8. docker-compose restart 重启服务

  9. docker-compose logs 查看日志

  10. docker-compose down 下线服务

  11. docker-compose pull 拉取镜像

  12. docker-compose push 推送镜像到仓库

  13. 更多命令参考 docker-compose help

Docker-Compose实战

  1. 为项目创建目录:
mkdir composetest
cd composetest
  1. 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)

在此示例中,redis是应用程序网络上的redis容器的主机名。我们为Redis使用默认端口6379。 3. requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:

flask
redis
  1. 编写Dockerfile
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"]

有关如何编写Dockerfile的更多信息,请查看上篇文章

  1. 编写docker-compose.yml文件
version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

该Compose文件定义了两个服务:web和redis。

  1. 运行服务
 docker-compose up

在浏览器中输入http://localhost:5000/以查看该应用程序正在运行。

下篇带大家详细介绍Docker-Machine,敬请期待!

欢迎关注公众号!

公众号回复:入群,扫码加入我们交流群!

读一本好书,就是在和高尚的人谈话。

 

推荐阅读