云原生 从Docker、Jenkins、Kubernetes从入门到精通系列
Docker实战系列
1. Docker Compose 介绍
Docker Compose 快速入门(从零开始快速编写一个入门的DockerCompose实战)
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
Compose 是一个定义和运行多容器应用程序的工具。
Compose 简化了整个应用程序堆栈的控制,让我们能够轻松地在一个简单易懂的 YAML 配置文件中管理服务、网络和卷。然后,只需使用一个命令即可从配置文件中创建和启动所有服务。
Compose 适用于所有环境;生产、准备、开发、测试以及 CI 工作流。它还具有用于管理应用程序整个生命周期的命令:
- 启动、停止和重建服务
- 查看正在运行的服务的状态
- 流式输出正在运行的服务的日志
- 在服务上运行一次性命令
2. 常用命令
启动命令(-d 表示后台启动)
docker-compose up -d
停止服务
docker-compose down
列出所有运行容器
docker-compose ps
查看服务器日志
docker-compose logs
构建或者重新构建服务
docker-compose build
启动服务
docker-compose start
停止已运行的服务
docker-compose stop
重启服务
docker-compose restart
3. 安装与使用
Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。(Windos桌面版也包括了Compose应用程序)
3.1 下载
//下载最新版本
https://github.com/docker/compose/releases
3.2 授权
mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
开发环境可以授予最高权限
chmod 777 /usr/local/bin/docker-compose
3.3 检查安装情况以及版本
docker-compose -v
docker-compose --version
docker-compose version
3.4 卸载
如果是二进制包方式安装的,删除二进制文件即可。
rm -rf /usr/local/bin/docker-compose
reboot
4. Docker Compose 实践
Docker Compose 使用 YAML 文件来定义多服务的应用。 Docker Compose 默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。
Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes
- version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。
- services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。
- networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。
- volumes 用于指引 Docker 来创建新的卷。
Compose中有两个重要的概念:
- 服务 (
service
):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 - 项目 (
project
):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml
文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
5. Docker Compose 文件编写示例与解释
编写一个redis、eureka的配置文件:
version: '3'
services:
mysql:
build:
context: ./mysql
environment:
MYSQL_ROOT_PASSWORD: admin
restart: always
container_name: mysql
volumes:
- /data/edu-bom/mysql/test:/var/lib/mysql
image: mysql/mysql:5.7
ports:
- 3306:3306
networks:
net:
eureka:
build:
context: ./edu-eureka-boot
restart: always
ports:
- 8761:8761
container_name: edu-eureka-boot
hostname: edu-eureka-boot
image: edu/edu-eureka-boot:1.0
depends_on:
- mysql
networks:
net:
networks:
net:
volumes:
vol:
解释:
mysql部分解释
mysql
是服务的名称。build
下的context: ./mysql
指定了 Dockerfile 的构建上下文目录。environment
部分设置了环境变量,其中MYSQL_ROOT_PASSWORD
设置了 MySQL 的 root 用户密码为admin
。restart: always
指定容器退出时总是自动重启。container_name: mysql
指定容器的名称为mysql
。volumes
部分将宿主机的/data/edu-bom/mysql/test
目录挂载到容器内的/var/lib/mysql
目录,用于持久化 MySQL 数据。image: mysql/mysql:5.7
指定使用 Docker Hub 上的mysql/mysql:5.7
镜像。ports
部分将容器的3306
端口映射到宿主机的3306
端口,允许外部访问 MySQL 服务。networks
部分将该服务连接到定义的net
网络。
eureka部分解释
eureka
是服务的名称。build
下的context: ./edu-eureka-boot
指定了 Dockerfile 的构建上下文目录。restart: always
指定容器退出时总是自动重启。ports
部分将容器的8761
端口映射到宿主机的8761
端口,允许外部访问 Eureka 服务。container_name: edu-eureka-boot
指定容器的名称为edu-eureka-boot
。hostname: edu-eureka-boot
指定容器的主机名为edu-eureka-boot
。image: edu/edu-eureka-boot:1.0
指定使用edu/edu-eureka-boot:1.0
镜像。depends_on
部分指定该服务依赖于mysql
服务,即在启动eureka
服务之前会先启动mysql
服务。networks
部分将该服务连接到定义的net
网络。
Networks 和 Volumes 部分解释:
networks
部分定义了一个名为net
的自定义网络,用于连接两个服务。volumes
部分定义了一个名为vol
的卷,但在当前配置文件中没有使用到。