当前位置:   article > 正文

Docker Compose简介及使用

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的使用概述,官方也有给出:


百度翻译:

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

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

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

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

  1. version: "3.9" # optional since v1.27.0
  2. services:
  3. web:
  4. build: .
  5. ports:
  6. - "8000:5000"
  7. volumes:
  8. - .:/code
  9. - logvolume01:/var/log
  10. depends_on:
  11. - redis
  12. redis:
  13. image: redis
  14. volumes:
  15. 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)创建文件夹

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

  1. mkdir composetest
  2. cd composetest

效果图:

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

vim app.py

新建完后写入以下代码,然后保存并退出

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

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

vim requirements.txt

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

  1. flask
  2. redis

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

vim Dockerfile

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

  1. #syntax=docker/dockerfile:1
  2. #基础镜像
  3. FROM python:3.7-alpine
  4. #设置镜像的工作目录
  5. WORKDIR /code
  6. #构建的时候设置环境变量
  7. ENV FLASK_APP=app.py
  8. ENV FLASK_RUN_HOST=0.0.0.0
  9. #安装gcc编译器
  10. RUN apk add --no-cache gcc musl-dev linux-headers
  11. #把刚刚我们创建的requirements.txt文件拷贝到镜像里
  12. COPY requirements.txt requirements.txt
  13. #下载requirements.txt里写好的flask和redis
  14. RUN pip install -r requirements.txt
  15. #指定5000为对外暴露的端口
  16. EXPOSE 5000
  17. #把当前目录拷贝进镜像里
  18. COPY . .
  19. #指定这个容器启动的时候要运行的命令,执行的命令为:flask run
  20. CMD ["flask", "run"]

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

vim docker-compose.yml

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

  1. version: "3.9"
  2. #build后可以跟自己写的Dockerfile文件,写在build后面的Dockerfile文件用于生成镜像
  3. services:
  4. web:
  5. build: .
  6. ports:
  7. - "8000:5000"
  8. #如果build后没值,则镜像用从DockerHub上拉下来的redis镜像
  9. redis:
  10. 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 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

效果图:

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

docker network inspect composetest_default

效果图:

其他:

Docker Compose的yaml文件配置

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

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

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

Compose和Docker Engine版本对比截图:

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

docker version

效果图:

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

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

2、第二步配置services

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

  1. #配置我们自己的服务
  2. services:
  3. #服务名称
  4. web
  5. #跟docker build命令一样
  6. build:
  7. #表示在指定目录下找Dockerfile
  8. context: .
  9. #Dockerfile的名称
  10. dockerfile:
  11. #当前服务跑在哪个地址上
  12. network:host
  13. #容器启动时执行的命令
  14. command:bundle exec thin -p 3000
  15. #Entrypoint指令用于设定容器启动时第一个运行的命令及其参数
  16. entrypoint: /code/entrypoint.sh
  17. #指定docker容器的名称
  18. container_name: my-web-container
  19. #依赖关系:有些项目需要redis先启动,项目后启动,所以这时候需要配置依赖关系,如下配置就是让db服务先启动,然后redis服务启动,最后web服务才启动
  20. depends_on:
  21. - db
  22. - redis
  23. #配置环境变量
  24. environment:
  25. #当前服务对外暴露的端口
  26. expose:
  27. - "8080"
  28. #服务的镜像名称
  29. image:web:0.1
  30. #服务名称
  31. redis:
  32. #服务的镜像名称
  33. image: redis
  34. #服务名称
  35. db:
  36. #服务的镜像名称
  37. image: mysql

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

  1. #容器数据卷挂载目录
  2. volumes:
  3. - type: volume
  4. #主机目录
  5. source: mydata
  6. #容器目录
  7. target: /data
  8. volume:
  9. nocopy: true
  10. #配置docker自定义网络
  11. networks:
  12. - my-network
  13. configs:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/74049
推荐阅读
相关标签
  

闽ICP备14008679号