Docker Compose简介及使用

1、Docker Compose简介

关于Docker Compose,官方文档(https://docs.docker.com/compose/)里有介绍:


百度翻译:

Compose是定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,从配置创建并启动所有服务。要了解有关Compose的所有功能的更多信息,请参阅功能列表。

Compose适用于所有环境:生产、登台、开发、测试以及CI工作流。您可以在常见用例中了解更多关于每个用例的信息。


简单来说Compose是一个将多个docker容器组合部署的技术,能通过编写yaml配置文件来一键启动、暂停所有的容器,而不再需要用一条条的docker run命令来启动多个容器

2、Docker Compose的使用概述

关于Docker Compose的使用概述,官方也有给出:

Docker Compose简介及使用_第1张图片


百度翻译:

1、使用Dockerfile定义应用程序的环境,以便可以在任何地方运行。

2、在docker-compose.yml文件中定义构成应用程序的服务,因此它们可以在隔离环境中一起运行。

3、运行docker compose up这一条命令,这条命令将启动并运行您的整个应用程序。您也可以运行docker-compose up这条命令来让Compose运行起来(docker-compose二进制文件)。

官方给出的docker-compose.yml示例如下:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    depends_on:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

3、安装Docker Compose

最新版的Docker Compose只要用yum下载就行,一般来说只要是按照官方文档的步骤来安装最新版的Docker,在执行下载Docker的那条命令里就已经包含了下载Docker Compose的语句了(如下图所示),所以按照官方文档下载的也不需要重新下载Docker Compose,可以略过步骤3(1),若下载时没按官方文档的来或下载Docker时略过了对docker-compose-plugin的下载,可以使用步骤3(1)的命令来下载Docker Compose

(1)下载Docker Compose

yum install docker-compose-plugin

(2)使用以下命令检验Docker Compose是否安装成功

docker compose version

效果图:

4、使用Docker Compose

(1)创建文件夹

进入工作目录,输入官方文档里的命令来新建一个文件夹

Docker Compose简介及使用_第2张图片

mkdir composetest
cd composetest

效果图:

(2)创建一个名为app.py的文件,并在该文件里面写入官方给出的代码

Docker Compose简介及使用_第3张图片

vim 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)

(3)创建一个名为requirements.txt的文件,并在该文件里面写入官方给出的内容

Docker Compose简介及使用_第4张图片

vim requirements.txt

新建完后写入以下内容,然后保存并退出

flask
redis

(4)创建一个名为Dockerfile的文件,并在该文件里面写入官方给出的内容

Docker Compose简介及使用_第5张图片

vim 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

#安装gcc编译器
RUN apk add --no-cache gcc musl-dev linux-headers

#把刚刚我们创建的requirements.txt文件拷贝到镜像里
COPY requirements.txt requirements.txt

#下载requirements.txt里写好的flask和redis
RUN pip install -r requirements.txt

#指定5000为对外暴露的端口
EXPOSE 5000

#把当前目录拷贝进镜像里
COPY . .

#指定这个容器启动的时候要运行的命令,执行的命令为:flask run
CMD ["flask", "run"]

(5)创建一个名为docker-compose.yml的文件,并在该文件里面写入官方给出的内容

Docker Compose简介及使用_第6张图片

vim docker-compose.yml

新建完后写入以下内容,然后保存并退出  

version: "3.9"
#build后可以跟自己写的Dockerfile文件,写在build后面的Dockerfile文件用于生成镜像
services:
  web:
    build: .
    ports:
      - "8000:5000"
#如果build后没值,则镜像用从DockerHub上拉下来的redis镜像
  redis:
    image: "redis:alpine"

(6)使用以下命令查看该文件夹下的文件,看是否齐全

app.py:程序

docker-compose.yml:用于部署应用

Dockerfile:用于创建docker镜像

requirements.txt:里面写着需要依赖的包

ls

效果图: 

(7)在当前文件夹下运行docker compose up命令

docker compose up

效果图:

(PS:1、一开始加载都会比较久,因为需要到国外去下载东西,所以需要耐心等待;2、可以不用去管那个WARNING,一开始我看它颜色是红色以为是报错了,然后一直上网找解决方案,但好像都解决不了,后来继续时发现这个WARNING并不影响实际使用) 

Docker Compose简介及使用_第7张图片

另起一个窗口访问服务器,使用docker ps命令能看到运行中的docker容器 

(8)另起一个窗口访问服务器,访问服务器的8000端口(在步骤4(5)进行了8000:5000的端口映射),发现输出Hello World!的语句

5、使用compose构建的docker容器的名称是自动生成的,生成规则为文件名-服务名-num(num是副本的数量,用集群跑compose时,到时候就会自动生成docker容器,num就会自动往上加)

6、查看compose的网络规则

(1)使用以下命令查看所有的docker网络

docker network ls

效果图:

Docker Compose简介及使用_第8张图片

(2)找到compose自动生成的网络,即composetest_default,然后使用以下命令查看该网络的详情,发现composetest_redis_1和composetest_web_1在同一个网络下,所以这两个docker容器之间能通过容器名或容器id互相访问

docker network inspect composetest_default

效果图:

Docker Compose简介及使用_第9张图片

其他:

Docker Compose的yaml文件配置

 1、第一步是确认应使用的Compose版本

(1)去看官方文档,根据给出的文档选择对应的Compose版本

https://docs.docker.com/compose/compose-file/compose-file-v3/

Compose和Docker Engine版本对比截图:

Docker Compose简介及使用_第10张图片

(2)使用以下命令查看自己的docker engine版本

docker version

效果图:

Docker Compose简介及使用_第11张图片

(3)由图可知我的Docker Engine版本为20.10.17,根据官方文档的版本对比表,没有对应Docker Engine 20版本的Compose版本,所以只能使用最新的Compose 3.8版本

#通过对比Compose和Docker Engine的版本,得出Compose使用3.8版本
version:'3.8'

2、第二步配置services

官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/#service-configuration-reference

#配置我们自己的服务
services:
  #服务名称
  web
    #跟docker build命令一样
    build:
      #表示在指定目录下找Dockerfile
      context: .
      #Dockerfile的名称
      dockerfile:
      #当前服务跑在哪个地址上
      network:host
    #容器启动时执行的命令
    command:bundle exec thin -p 3000
    #Entrypoint指令用于设定容器启动时第一个运行的命令及其参数
    entrypoint: /code/entrypoint.sh
    #指定docker容器的名称
    container_name: my-web-container
    #依赖关系:有些项目需要redis先启动,项目后启动,所以这时候需要配置依赖关系,如下配置就是让db服务先启动,然后redis服务启动,最后web服务才启动
    depends_on:
      - db
      - redis
    #配置环境变量
    environment:
    #当前服务对外暴露的端口
    expose:
      - "8080"
    #服务的镜像名称
    image:web:0.1
  #服务名称
  redis:
    #服务的镜像名称
    image: redis
  #服务名称
  db:
    #服务的镜像名称
    image: mysql

3、第三步配置其他参数(不做硬性要求)

    #容器数据卷挂载目录
    volumes:
      - type: volume
        #主机目录
        source: mydata
        #容器目录
        target: /data
        volume:
          nocopy: true
    #配置docker自定义网络
    networks:
     - my-network
    configs:

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。

你可能感兴趣的:(docker,docker,容器,运维)