Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
- 使用的三个步骤
- 使用 Dockerfile 文件定义应用程序的环境
- 使用 docker-compose.yml 问阿金定义构成应用程序的服务,这样他们可以在隔离环境中一起运行
- 最后 执行 docker-composer up 命令来创建 并启动所有的服务
Docker compose 安装 并为安装脚本添加执行权限
sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 2. 查看是否安装成功
docker-compose -v
- 案例
- 2.1 编写docker-compose.yml 文件
# 1. 创建nginx 目录
mkdir -p /soft/docker/docker-nginx
# 2. 切换到指定目录
cd /soft/docker/docker-nginx
# 3. 编写docker-compose.yml 文件
vi docker-compose.yml
# 版本信息
version: "3.8"
# 定义服务可以是多个
services:
nginx: #服务名
image: nginx # 创建容器锁需要的镜像
container_name: mynginx # 容器名称 默认为 (工程名称_服务名_序号)
ports: # 宿主机和容器端口映射关系
- "80:80" # 左边主机端口 右边容器端口
networks: # 配置容器连接网络,引用顶级 networks 下的条目
- nginx-net
# 定义网络 , 可以是多个, 不声明, 默认创建一个网络名称为 “工程名称_default” 的 bridge 网络
networks:
nginx-net: # 一个具体的网络条目名称
name: nginx-net # 网络名称 默认为(工程名称_网络条目名称)
driver: bridge # 网络模式 默认为 bridge
- 1 执行文件
docker-compose up
正常访问Nginx
3. docker-compose down 自动删除容器 和 网络
[root@root docker-nginx]# docker-compose down
Removing mynginx ... done
Removing network nginx-net
- 使用 compose 搭建redis 集群
4.1 编写redis 配置文件 - 创建目录
[root@root ~]# mkdir -p /soft/redis/redis-cluster
- 目录下 编写 redis-cluster.tmpl
port ${
PORT}
requirepass root
masterauth root
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.220.133
cluster-announce-port ${
PORT}
cluster-announce-bus-port 1${
PORT}
# 2. 第二胎虚拟机改下ip
- 执行端口文件
# 1. 第一台linux
for port in `seq 6371 6373`; do \
mkdir -p ${
port}/conf \
&& PORT=${
port} envsubst < redis-cluster.tmpl > ${
port}/conf/redis.conf \
&& mkdir -p ${
port}/data; \
done
# 2. 第二台 虚拟机
for port in `seq 6374 6376`; do \
mkdir -p ${
port}/conf \
&& PORT=${
port} envsubst < redis-cluster.tmpl > ${
port}/conf/redis.conf \
&& mkdir -p ${
port}/data; \
done
- 编写Docker compose 模板文件
# 描述compose 版本信息
version: "3.8"
services:
redis-6371: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6371 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6371/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6372: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6372 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6372/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6373: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6373 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6373/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
------
#描述版本信息
version: "3.8"
#定义服务 可以多个
services:
redis-6374: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6374 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6374/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6375: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6375 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6375/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6376: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6376 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6376/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
启动:
docker-compose up -d (后台运行)
# 1. 进入容器
docker exec -it redis-6374 bash
# 2 . 进入目录
cd /usr/local/bin
# 3. 执行集群指令
redis-cli -a root --cluster create 192.168.220.132:6371 192.168.220.132:6372 192.168.220.132:6373 192.168.220.133:6374 192.168.220.133:6375 192.168.220.133:6376 --cluster-replicas 1
# 4. 检查集群状态
redis-cli -a root --cluster check 192.168.220.132:6371
# 5. 集群模式设置 -c -a 用户
redis-cli -c -p 6374 -a root
- 创建OK
# 描述compose 版本信息
version: "3.8"
services:
redis-6371: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6371 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6371/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6372: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6372 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6372/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
redis-6373: #服务名称
image: redis # 创建容器时镜像
container_name: redis-6373 # 容器名称
restart: always #容器总是重新启动
network_mode: "host" # 网络模式 host
volumes: #数据卷目录挂载
- /soft/redis/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /soft/redis/redis-cluster/6373/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 启动容器后默认执行的命令
mysql7:
image: mysql
container_name: mysql7
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- /soft/mysql/data:/var/lib/mysql
- /soft/mysql/my.conf:/etc/mysql/my.conf
registry:
image: registry
container_name: registry
ports:
- "5000:5000"
restart: always
volumes:
- /soft/docker/:/var/lib/registry
- /soft/docker/certs/:/certs
- /soft/docker/auth/:/auth
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domian.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key