Docker 入门到实战教程(十三)Docker Compose

文章目录

  • 一. Docker Compose 概述与使用

  • 二. 安装 Docker Compose

  • 三. 使用Docker Compose

  • 四. 更新Docker Compose

  • 五. 更新应用程序测试

一. Docker Compose 概述与使用

1.1 概述
  • Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务

  • 我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定 义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某 项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后 端的数据库服务容器,甚至还包括负载均衡容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件 (YAML 格式)来定义一组相关联的应用容器为一个项目(project)。有了Compose,我们就不需要再一个个组件去写一份Dockerfile,只需要将整体环境同一起来,写在一份docker-compose.yml文件即可

1.2 使用步骤

使用Compose基本上是一个三步过程:

  • 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。

  • 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。

  • 运行 docker-compose up Compose启动并运行您的整个应用程序。

一个docker-compose.yml看起来像这样:

version: '2.0'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

有关Compose文件的更多信息,请参见 Compose文件参考。

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

Compose具有用于管理应用程序整个生命周期的命令:

  • 启动,停止和重建服务

  • 查看正在运行的服务的状态

  • 运行服务的日志输出

  • 在服务上运行一次性命令

1.3 Docker-Compose使用命令
创建并启动容器
docker-compose up
创建并后台启动容器
docker-compose up -d
查看当前compose进程
docker-compose ps
启动容器
docker-compose start
关闭容器
docker-compose stop  # 关闭容器
关闭并移除容器
docker-compose down   # 关闭并移除容器
查看日志
docker-compose logs
关闭并移除容器并删除容器清除存储
docker-compose down --volumes

二. 安装 Docker Compose

两种最新的docker安装方式

  • 下载docker-compose二进制文件安装

  • pip安装(将 Compose 当作一个 Python 应用来从 pip 源中安装)

2.1. 下载docker-compose二进制文件安装

运行以下命令以下载Docker Compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
80a0a8cb114531f65b3efa16d304353e.png
file

使用官方github下载很慢,采用换源

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
8f08f7083190a5eea1a04b549b9f0b01.png
file
  • 要安装其他版本的Compose,请替换1.25.4 为要使用的Compose版本。

将可执行权限应用于二进制文件:

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

查看版本:

docker-compose --version
953cb8e921004941550a594a16624bea.png
file
2.2. pip安装
udo pip install docker-compose
2.3. 卸载

二进制包方式安装的,删除二进制文件即可

sudo rm /usr/local/bin/docker-compose

pip 安装的,则执行如下命令即可删除

sudo pip uninstall docker-compose

三. 使用Docker Compose

上面说到使用的三个步骤

这里构建一个运行在Docker Compose上的简单Python Web应用程序。该应用程序使用Flask框架,并在Redis中维护一个计数器。尽管该示例使用Python,但即使您不熟悉此处演示的概念,也应可以理解。

3.1 项目创建目录
mkdir composetest
cd composetest
594f44faa5f7ae28dd40f09638c63e97.png
file
3.2 项目目录中创建一个名为app.py的文件

将以下内容粘贴

touch 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.3 在项目目录中创建一个名为requirements.txt的文件

内容如下:

touch requirements.txt

内容如下:

flask
redis
cc498abe9e53f4d373ee7412af4f81fd.png
file
3.4 创建Dockerfile

在此步骤中,编写一个构建Docker映像的Dockerfile。该图像包含Python应用程序所需的所有依赖关系,包括Python本身。

粘贴以下内容:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk add -U tzdata && ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo "${TIMEZONE}" > /etc/timezone
RUN apk add -U tzdata && ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo "${TIMEZONE}" > /etc/timezone
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
  • 从Python 3.7映像开始构建映像

  • 将工作目录设置为/code

  • 设置flask命令使用的环境变量

  • 修改源为了快速下载 -安装gcc,以便诸如MarkupSafe和SQLAlchemy之类的Python包可以编译加速

  • 复制requirements.txt并安装Python依赖项

  • 将.项目中的当前目录复制到.映像中的工作目录

  • 将容器的默认命令设置为flask run。

3.5 在compose中定义服务

在项目目录中创建一个名为docker-compose.yml的文件,然后粘贴以下内容:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:latest"

该Compose文件定义了两个服务:webredis

网络服务

该web服务使用从Dockerfile当前目录中构建的映像。然后,它将容器和主机绑定到暴露的端口5000。此示例服务使用Flask Web服务器的默认端口5000。

Redis服务

该redis服务使用从Docker Hub注册表中提取的公共Redis映像,如果存在最新版则不拉取

注: compose 版本对应关系

https://docs.docker.com/compose/compose-file/compose-file-v2/
3.6 生成和运行与撰写你的应用程序

在项目目录中,运行来启动应用程序

docker-compose up

394de8e97b83266ca118cdcdfc820321.pngccd758e6a17ad9171c165c4eefaf3528.png

完成以后可以通过浏览器确认结果

打开浏览器输入: http://ip:5000/

应该在浏览器中看到一条消息,内容为:

Hello World! I have been seen 1 times.
9d80ddac3d7b92f584a0430d525d9c9c.png
file
3.7 关闭并移除该应用

通过docker-compose down 从第二个终端的项目目录中运行,或在启动该应用的原始终端中按CTRL + C来停止该应用

66fb79e8b17246d3a74edcaff82eddb7.png
file

四. 更新Docker Compose

4.1 重新构建docker-compose.yml文件

将宿主机包含代码的目录挂载到服务,本质就是容器实例与宿主机共享文件。

内容如下:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:latest"

volumes将主机上的项目目录(当前目录)/code安装到容器内部,可以即时修改代码,而不必重建映像。该environment键设置了 FLASK_ENV环境变量,该变量指示flask run要在开发模式下运行并在更改时重新加载代码。此模式仅应在开发中使用。

4.2 重新构建并运行应用程序

在项目目录中,键入docker-compose up以使用更新的Compose文件构建应用程序,然后运行它

docker-compose up -d
083d729b9f009752025aa1ae74579806.png
file

查看进程

docker-compose ps
1d4de052227d6d34bd5a0b1c86b8543a.png
file

查看日志

docker-compose logs
19b443ca5085b9652206283a69ad629c.png
file

查看单个服务日志

docker-compose logs web
6be761c33e1c2e819c8f66921ec815a2.png
file

再次打开浏览器输入: http://ip:5000/

Hello World再次出现,然后刷新以查看计数增量

c67824a45123825f2b729a3099421778.png
file

五. 更新应用程序测试

因为现在应用程序代码是使用卷安装到容器中的,所以您可以对其代码进行更改并立即查看更改,而无需重建映像。

更改问候语app.py并保存。例如,将Hello World!消息更改为Hello from Dong!

4108f9f868d8b6ae888ac918ce9ce34e.png
file

再次打开浏览器输入: http://ip:5000/

在浏览器中刷新应用。问候语应更新,并且计数器应仍在增加。

64395c79b1696863aec8a55930fc6f07.png
file

参考链接:

http://suo.im/6xZyQs
http://suo.im/6qxxYv

 往期推荐 

🔗

Docker 入门到实战教程(一)介绍Docker

Docker入门到实战教程(二)安装Docker

Docker入门到实战教程(三)镜像和容器

Docker 入门到实战教程(四)容器链接

Docker 入门到实战教程(五)构建Docker镜像

Docker 入门到实战教程(六)Docker数据卷

Docker 入门到实战教程(七)安装Redis

Docker 入门到实战教程(八)安装Mysql

Docker 入门到实战教程(九)安装Nginx

Docker入门到实战教程(十)部署Spring Boot项目

Docker入门到实战教程(十一)部署Vue+SpringBoot 前后端分离项目

Docker入门到实战教程(十二)ELK+Filebeat搭建日志分析系统

83e1189aca59260cba1c17830fd64357.jpeg

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Docker入门基础实战完整.pdf》是一本关于Docker容器化技术的入门基础教程,共分为三个部分。 第一部分主要讲解Docker的简介,包括Docker的概述、核心组件、镜像和容器的概念、Docker的应用场景和优势等。此外还介绍了Docker的安装和配置。 第二部分内容则是基于实例进行的Docker基础实战,分为四个章节。第一章介绍如何使用Docker构建Web服务器环境,包括Nginx、MySQL和PHP等服务的部署。第二章则介绍如何使用Docker搭建Java环境,包括JDK、Tomcat等服务的安装。第三章则是讲解如何使用Docker搭建Python环境,并使用Flask框架开发Web应用。最后一章则是将Docker应用于测试环境,介绍如何使用Docker进行网络测试和负载均衡等。 第三部分则是Docker高级进阶,包括Docker的网络模式、数据管理和安全等内容。其中涉及到Docker的官方仓库和Docker Compose等工具的使用。 通过学习《Docker入门基础实战完整.pdf》,可以快速入门Docker容器化技术,并且通过实例进行实践操作,深入了解Docker的各个方面。无论是对于开发者还是运维人员来说,这本书都是一本非常实用的参考书籍。 ### 回答2: 《Docker 入门基础实战完整.pdf》是一本介绍 Docker 技术的入门教程,主要针对刚开始学习 Docker 的人群。本书主要介绍了 Docker 的概念、使用方法、常见操作以及应用实例等方面的内容。 在 Docker 的概念方面,本书介绍了 Docker 的基本定义,包括容器、镜像、仓库等概念。通过对这些概念的具体解释,可以让读者更好地理解 Docker 的基础知识。 在 Docker 的使用方法方面,本书介绍了 Docker 的安装、配置、镜像管理和容器管理等方面的内容。通过该章节的学习,读者可以了解到如何安装 Docker,如何通过命令行与 Docker 进行交互等基础操作。 在常见的 Docker 操作方面,本书主要介绍了 Docker 的日常使用场景,包括 Docker ComposeDocker Swarm、Dockerfile 和 Docker Network 等操作。这些常见的操作可以使读者能够更好地了解 Docker 技术的使用方法,也可以帮助读者在实际应用中更有效地使用 Docker。 在 Docker 应用实例方面,本书提供了一些实用的案例,包括 Web 应用、数据库容器、持续集成等。这些案例可以帮助读者更好地了解如何在实际应用场景中使用 Docker,也可以帮助读者更快速地上手实战操作。 总的来说,《Docker 入门基础实战完整.pdf》是一本非常实用的 Docker 技术入门指南。它覆盖了 Docker 的基础知识、常见操作和应用实例等方面,对于想要入门 Docker 技术的读者是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值