为了账号安全,请及时绑定邮箱和手机立即绑定

第11天:用Docker Compose简化多容器应用

这是来自adventofdocker.com的跨贴。

嘿,你好!恭喜你坚持到第11天了。今天我们来学习Docker Compose。在过去的几天里,我们了解了环境变量、网络和卷。我们来看看一个典型的命令,运行一个具有这些功能的容器:

    docker run -d \
      --name api \
      --network myapp-network \
      -v mydata:/data # -v (挂载卷) \
      -e 秘密消息="Hello Docker!" \
      -e 端口=8080 \
      -p 8080:8080 # -p (端口映射) \
      hello-world-go # hello-world-go (一个简单的 Go 语言示例应用)

启动容器(docker run)并以后台模式运行(-d)。设置容器名称为 api,连接到 myapp-network 网络。将 mydata 卷挂载到容器内的 /data 目录,设置环境变量 秘密消息"Hello Docker!"端口8080,并将主机的 8080 端口映射到容器的 8080 端口。

进入全屏模式。退出全屏模式。

这可真不少需要记住和输入的!现在想象一下运行多个容器,每个容器都有自己的一套配置。这时候Docker Compose就派上用场了。

什么是 Docker Compose?

Docker Compose(https://docs.docker.com/compose/)是一种工具,帮助你定义和运行多容器应用。你不再需要使用冗长的Docker命令,而是编写一个描述整个应用栈的 YAML 配置文件。

让我们把之前的设置转换成 Docker Compose 文件。创建一个新的文件,命名为 docker-compose.yml

    services:
      api:
        build: .
        ports:
          - "8080:8080"
        environment:
          - SECRET_MESSAGE=Hello Docker!
          - PORT=8080
        volumes:
          - mydata:/data
        networks:
          - myapp-network
    volumes:
      mydata:
    networks:
      myapp-network:

全屏模式或退出全屏

现在你可以直接运行这个命令,而不用输入那么长的Docker命令了。

docker compose up

进入全屏模式。退出全屏模式。

Docker Compose 将:

  1. 创建网络连接
  2. 创建数据卷
  3. 如有必要,构建镜像
  4. 根据所有指定的配置启动容器

全部停下来:

docker compose down # 停止并移除所有由 Docker Compose 创建的容器和网络

进入全屏 退出全屏

让我们给应用程序增加一些复杂性,我们将给应用程序添加一个数据库和一个反代。

services:
  服务:
api:
  API:
build: .
  构建: .
ports:
  端口:
  - "8080:8080"
environment:
  环境:
  - SECRET_MESSAGE=你好 Docker!
  - 端口=8080
volumes:
  卷:
  - mydata:/数据
networks:
  网络:
  - myapp网络
depends_on:
  依赖:
  - 数据库
db:
  数据库:
image: postgres
  镜像: postgres
ports:
  端口:
  - "5432:5432"
environment:
  环境:
  - POSTGRES_USER=postgres
  - POSTGRES_PASSWORD=postgres
  - POSTGRES_DB=myapp
volumes:
  卷:
  - postgres_data:/var/lib/postgresql/data
networks:
  网络:
  - myapp网络
nginx:
  NGINX:
image: nginx
  镜像: nginx
ports:
  端口:
  - "80:80"
networks:
  网络:
  - myapp网络
depends_on:
  依赖:
  - api
volumes:
  卷:
  mydata:
  postgres_data:
networks:
  网络:
  myapp网络:

进入全屏 退出全屏

我们在这里做了以下几件事情:

  • 添加了数据库服务
  • 添加了反向代理服务
  • 添加了对API服务的依赖(因此它会在数据库启动之后再启动)
  • 添加了对Nginx服务的依赖(因此它会在API启动之后再启动)

为了简便起见,我们直接将密钥硬编码在这里。当然,在实际部署中不会这么做!如何管理密钥是另一个话题(也许留到明天再说)。

Docker Compose 的基本命令

这里有一些你经常会使用的重要命令:

  • docker compose up - 启动服务,即运行相关容器
  • docker compose up -d - 以分离模式启动服务
  • docker compose down - 停止并移除服务容器
  • docker compose ps - 查看正在运行的服务
  • docker compose logs - 查看服务的日志信息
  • docker compose build - 构建或重新构建服务,即生成新的服务镜像
下一步

这只是Docker Compose能做的开始!明天我们会更深入地了解一些更高级的功能。

就像往常一样,仅仅通过查看代码你不会学到任何东西。所以试着将你现有的 Docker 命令转换为一个 compose 文件。试着玩玩看,看看它是怎么工作的,以及如何让它出问题。
如果你有任何问题,欢迎通过 邮件 联系我们。

祝你编程愉快!🐳🎄

乔纳斯 (qiáo nà sī)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
8
获赞与收藏
25

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消