Docker 入门(五)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker 入门(五)

本系列往期文章:

基本概念:Docker 入门(一)

构建镜像:Docker 入门(二)

数据挂载:Docker 入门(三)

容器互连:Docker 入门(四)


假设我们现在需要启动多个容器,这些容器又需要进行不同的数据挂载,容器之间也需要相互连接,显然,如果按照传统的方法通过 docker run 指令启动他们将会是非法麻烦的,这里我们就需要用到 docker-compose 进行容器编排。



01


docker-compose



这里我们使用一个简单的示例:一个 web 服务,一个 redis 数据库,web 服务挂载本地的数据方便调试,同时也需要连接上 redis 进行操作。


首先在进行编排时,我们将一个大的项目称之为 project ,默认名称为项目文件夹的名称,可以通过设置环境变量 COMPOSE_PROJECT_NAME 改变。在 project 之下,会有多个 service 服务,这是编排的基本单位,比如示例中的 web 和 redis 就是两个不同的 service 。


docker-compose.yml:



如上图所示,首先需要指定 compose 的版本,不同版本之间存在一定的差异,具体的需要查阅官方文档。


然后,在 services 这个 top-level 下面指明各个具体的 service 比如 web 和 redis ,在具体的 service 下面再进行详细的配置:


  • build:通过 dockerfile 重新构建镜像
  • container_name:指定容器的名称
  • image:直接使用已存在的镜像
  • ports:设置端口映射
  • networks:设置容器所在的网络
  • depends_on:设置依赖关系
  • volumes:设置数据挂载
  • restart:设置重启
  • env_file:设置环境变量的集中配置文件
  • environment:同样是设置环境变量
  • command:容器启动后执行的指令


在具体 service 下指定的 networks 必须对应存在于 top-level 的 networks 中,名称可以随意取,所有具有相同 networks 的 service 也就可以进行相互连接,这样就是一个定义网络。


通过 depends_on 设置的依赖关系会决定容器启动的先后顺序,在示例中,由于我们指定了 web 是依赖于 redis 的,所以会启动 redis 之后再启动 web ,但是这里的判断标准是容器运行了就继续启动下一个,如果你想更好的控制启动顺序,可以使用 wait-for-it 或者 dockerize 等官方推荐的第三方开源工具。


至于 volumes ,你可以使用传统挂载设置(示例中就是的),也可以通过自命名的方法,但是如果使用了自命名,其与 networks 类似,必须对应存在于 top-level 的 volumes 之中。


对于环境变量,既可以通过 environment 单独设置,也可以将所有的环境变量集中配置到 env 文件中,然后通过 env_file 引用。


以上就是一些简单且常用的配置。配置完成之后,通过:

docker-compose up 

就可以一次启动所有容器了,启动完成后同样可以通过 compose 的其他指令诸如:pause、unpause、start、stop、restart、kill、down 等等进行其他操作。



02


结语



写到这里,其实我们已经完成了从构建镜像到容器编排整个流程,这里先告一段落。但是目前我们所基于的却一直是单主机环境,而对于多主机等更复杂的环境下如何快速方便的满足生产上的各种需求,我们就不得不提到 swarm 和 kubernetes(简称 k8s ),从目前来看,k8s 已然成为了主流,后续有机会将会围绕 k8s 写一写系列文章

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
20天前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
297 0
|
20天前
|
存储 虚拟化 数据中心
|
12天前
|
Shell iOS开发 Docker
|
20天前
|
Ubuntu 应用服务中间件 Shell
Docker入门
Docker入门
34 0
|
20天前
|
存储 Ubuntu Linux
Docker 从入门到实践:Docker介绍
Docker 从入门到实践:Docker介绍
|
20天前
|
应用服务中间件 持续交付 nginx
【Docker专栏】Docker入门指南:快速构建你的第一个容器
【5月更文挑战第7天】Docker 入门指南:容器化应用利器。了解 Docker 核心概念——镜像、容器和仓库。安装 Docker 后,运行官方 `hello-world` 验证安装,再尝试运行 `nginx` Web 服务器。通过端口映射访问容器内服务,学习管理容器命令。创建自定义镜像,编写 Dockerfile,实现 Python Web 应用容器化。Docker 助力高效开发与运维,探索更多自动化部署与微服务场景。
【Docker专栏】Docker入门指南:快速构建你的第一个容器
|
20天前
|
安全 Linux 数据库
Docker 入门详解
通过遵循这些步骤,你将能够快速入门 Docker 并开始探索容器化的世界,关注 V 哥,技术之路一起成长。
|
20天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
47 0
|
20天前
|
Linux 虚拟化 Docker
docker入门
docker入门
26 2
|
20天前
|
存储 运维 Docker
Docker从入门到精通:Docker 容器数据卷详解
Docker 数据卷是持久化容器数据的关键机制,允许跨容器或主机共享,即使容器删除数据仍保留。创建数据卷可通过命令行或容器启动时指定,挂载到容器目录以读写。使用 `docker volume` 命令可管理数据卷,适用于持久化存储、数据共享及备份场景。了解和善用数据卷能优化 Docker 应用程序的运维。
33 0