Docker——Docker Compose应用

Posted Pakho`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker——Docker Compose应用相关的知识,希望对你有一定的参考价值。

Docker Compose简介

  • Docker开源项目,负责实现对Docker容器集群的快速编排
  • 托管于Github上,由Python实现,调用 Docker服务的API负责实现对Docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务
  • 所以,Docker-compose默认的管理对象是项目,通过子命令的方式对项目中的一组容器进行生命周期的管理
  • Docker Compose来轻松高效的管理容器,定义运行多个容器
  • 作用:批量容器编排

查阅官方文档

  • https://docs.docker.com/compose/
  • Compose是一个用于定义和运行容器Docker应用程序的工具
  • 使用Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,从配置中创建并启动所有服务
  • Compose适用于所有环境:生产暂存开发测试以及CI工作流
  • 使用Compose基本上分为三个步骤:
    1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制。
    2. Docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行
    3. 运行Docker compose up,Docker compose命令启动并运行整个应用程序。也可以使用Docker compose二进制文件运行Docker compose up。

Docker Compose安装

#由于官方镜像是国外的太慢,使用国内镜像下载
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#为compose授权
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker bin]# docker-compose version

Docker Compose初体验

创建应用
#为项目创建目录
[root@docker docker]# mkdir composetest

#在项目目录中创建一个名为app.py的文件
[root@docker composetest]# vim app.py
import time

import redis
from flask import Flask                                 #导入Flask框架

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)            #使用redis缓存

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的文件(依赖包)
[root@docker composetest]# vim requirements.txt
flask
redis

创建Dockerfile
[root@docker composetest]# vim 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"]

在yml文件中合成服务
[root@docker composetest]# vim docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

使用Compose构建并运行应用程序

#从项目目录中,通过运行docker compose up启动应用程序
[root@docker composetest]# docker-compose up

Creating composetest_web_1   ... done
Creating composetest_redis_1 ... done

#本机测试
[root@docker composetest]# curl localhost:5000
Hello World! I have been seen 1 times.

Docker Compose配置编写规则

  • 只有三层
  • https://docs.docker.com/compose/compose-file/compose-file-v3/
    • 第一层:Version 版本,与Docker Engine对应
    • 第二层:Services服务
      • 服务1:web (服务配置)images build Network
      • 服务2:redis
    • 第三层:其他配置
      • 网络/卷,全局规则
  • Service+的参数
    • container_name:指定自定义容器名称,而不是生成的默认名称
    • depends_on表示服务之间的依赖关系,服务依赖性导致以下行为,[ 如:启动顺序 web -> redis web依赖redis ]

使用Compose一键部署Wordpress博客

#创建一个空的项目目录
[root@docker /]# mkdir my_wordpress

#编写docker-compose.yml文件
[root@docker my_wordpress]# vim docker-compose.yml
version: "3.3"
    
services:
  db:
    image: mysql:5.7                      #镜像使用mysql:5.7
    volumes:
      - db_data:/var/lib/mysql            #数据卷挂载 主机路径:容器路径
    restart: always                       #总是重启,创建容器时没有添加参数导致的后果是当Docker重启时,容器未能自动启动
    environment:                          #环境
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:                           #依赖于数据库db
      - db
    image: wordpress:latest               #下载wp最新版镜像
    volumes:
      - wordpress_data:/var/www/html      #数据卷挂载
    ports:
      - "8000:80"                         #本机8000端口映射容器80端口
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

[root@docker my_wordpress]# docker-compose up    #前台运行
[root@docker my_wordpress]# docker-compose up -d #后台运行

在这里插入图片描述

以上是关于Docker——Docker Compose应用的主要内容,如果未能解决你的问题,请参考以下文章

docker与docker-compose介绍,对比与使用

云原生 | Docker篇深入Docker Compose

docker-compose基础

使用docker-compose.yml在swarm中部署应用

Docker——Docker Compose应用

Docker Compose—简化复杂容器应用的利器