Docker编排利器DockerCompose
Docker编排利器DockerCompose
作者:IT王小二
Docker 编排利器 DockerCompose,编排之后可以一次性通过一条命令启动一组服务。
例如一条命令启动 SpringBoot 项目,同时启动 SpringBoot 项目依赖的其他中间件(MySQL、Redis等)。
一、安装DockerCompose
1、下载 Docker Compose 。
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、授予 docker-compose
文件可执行权限。
chmod +x /usr/local/bin/docker-compose
3、查看会否安装成功。
docker-compose --version
二、DockerCompose详解
1. 使用DockerCompose步骤
- 使用
Dockerfile
构建自定义镜像上传服务器,一般需要修改初始镜像行为时才需要使用。 - 使用
docker-compose.yml
文件定义需要部署的应用程序服务,这样它们可以在隔离环境中一起运行,以便执行脚本一次性部署。 - 最后执行
docker-compose up
命令来创建并启动所有服务。
2. docker-compose.yml常用命令
version
描述 Compose 文件的版本信息,各版本详细信息可以参考 官方文档 。
# 指定 3 版本语法
version: '3'
services
services 节点下面的即是定义的各种服务,服务之下为容器,容器与容器直之间可以以服务名称为域名进行访问。
image
指定运行的镜像名称。
# 指定镜像为 mysql5.7
image: mysql:5.7
container_name
指定容器名称。
# 容器名称
container_name: admin_mysql
ports
指定宿主机和容器的端口映射。
# 映射 mysql端口
ports:
- 3306:3306
volumes
将宿主机的文件或目录挂载到容器中。
# 挂载 mysql 目录到容器
volumes:
- /itwxe/dockerData/mysql/data:/var/lib/mysql
- /itwxe/dockerData/mysql/conf:/etc/mysql
- /itwxe/dockerData/mysql/log:/var/log/mysql
environment
配置环境变量。
# 设置 mysql 密码
environment:
- MYSQL_ROOT_PASSWORD=root
links
连接其他容器的服务。
# 可以 admin_mysql 为域名访问服务名称为 db 的容器
links:
- db:admin_mysql
3. Docker Compose常用命令
启动所有相关容器
docker-compose up -d
指定文件启动
docker-compose -f docker-compose.yml up -d
停止所有相关容器
docker-compose stop
列出所有容器信息
docker-compose ps
停止并删除所有容器(注意数据挂载)
docker-compose down
三、SpringBoot示例
此处还是以自己写的项目为示例,我的项目依赖 MySQL、Redis、minio(非必要)。
1、打包 SpringBoot 项目镜像,打包可以参考 → Docker使用maven插件打包SpringBoot项目
。
2、我的项目启动依赖 MySQL 中的 sunny 库,首先得创建容器,挂载宿主机目录,可以参考 → Docker搭建MySQL并挂载数据
。
3、项目依赖 Redis 镜像自定义配置启动,可以参考 → Docker搭建Redis5.0并挂载数据
。
4、修改项目 MySQL 和 Redis 使用别名访问,以 MySQL 为例。
# 修改前
jdbc:mysql://192.168.5.33:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8
# 修改后
jdbc:mysql://admin_mysql:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8
5、编辑 docker-compose.yml 文件。
version: '3'
services:
# 指定MySQL服务名称
mysql:
# 指定服务使用的镜像
image: mysql:5.7
# 指定容器名称
container_name: admin_mysql
# 指定服务运行的端口
ports:
- 3306:3306
# 指定容器中需要挂载的文件
volumes:
- /itwxe/dockerData/mysql/data:/var/lib/mysql
- /itwxe/dockerData/mysql/conf:/etc/mysql
- /itwxe/dockerData/mysql/log:/var/log/mysql
# 指定容器的环境变量
environment:
- MYSQL_ROOT_PASSWORD=123456
# 指定Redis服务名称
redis:
# 使用自定义镜像(指定配置文件)
image: itwxe/redis:5.0.8
container_name: admin_redis
ports:
- 6379:6379
volumes:
- /itwxe/dockerData/redis/data:/data
# 指定项目服务名称
sunny-admin:
# 指定服务使用的镜像
image: itwxe/sunny-admin:0.0.1
# 指定容器名称
container_name: sunny-admin
# 指定服务运行的端口
ports:
- 9002:9002
# 指定容器中需要挂载的文件
volumes:
- /itwxe/dockerData/sunny-admin/logs:/var/logs
# 指定别名,项目yml中可以通过别名访问,例如:
links:
- mysql:admin_mysql
- redis:admin_redis
6、进入 docker-compose.yml 文件目录,启动服务。
docker-compose up -d
可以看到服务都正常启动了,此时可以访问下项目,项目正常访问。