一、docker-compose介绍
官网介绍:
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
二、docker-compose安装
新版docker安装时会自带docker-cpomse,但是使用时,中间没有 “-”
安装命令
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
启动docker并启动开机自启
systemctl start docker
systemctl enable docker
查看docker和docker compose版本
docker --version
docker compose version
三、docker-compose基本语法(新版docker)
- 启动容器(守护进程):
# 在测试目录中,执行以下命令来启动应用程序:
docker compose up
# 如果你想在后台执行该服务可以加上 -d 参数:
docker compose up -d
- 查看容器:
docker compose ps
- 重启容器:
docker compose restart
- 清理容器:
docker compose down
四、docker-compose安装常用软件
1、MySQL
初始化MySQL映射目录
mkdir -p /data/mysql
cd /data/mysql
mkdir db
mkdir conf
mkdir logs
编写docker-compose.yml文件
touch docker-compose.yml
vim docker-compose.yml
version: '3'
services:
mysql:
restart: always
privileged: true
image: mysql:8.0
container_name: mysql8.0
volumes:
- ./db:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/var/logs
- ./mysql-files:/var/lib/mysql-files
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: "12345678"
ports:
- 3306:3306
network_mode: "bridge"
编写MySQL配置文件my.cnf
cd conf
touch my.cnf
vim my.cnf
###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
# sql_mode 是 MySQL 的一个系统变量,它控制了 MySQL 在执行 SQL 语句时的行为。
# STRICT_TRANS_TABLES:启用严格模式,当插入或更新数据时,MySQL 将拒绝任何不符合数据类型的数据。
# NO_ZERO_IN_DATE:当日期或日期时间字段中的值为 "0000-00-00" 时,MySQL 将抛出警告或错误。
# NO_ZERO_DATE:当日期或日期时间字段中的值为 "0000-00-00" 或 "0000-00-00 00:00:00" 时,MySQL 将抛出警告或错误。
# ERROR_FOR_DIVISION_BY_ZERO:当除数为零时,MySQL 将抛出错误。
# NO_ENGINE_SUBSTITUTION:当请求的存储引擎不可用时,MySQL 将抛出错误,而不是自动使用另一个可用的存储引擎。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# MySQL8 的密码认证插件
default_authentication_plugin=mysql_native_password
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 允许最大连接数
max_connections=1000
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=1
max_allowed_packet=16M
# 设置时区(按照实际情况填写)
default-time_zone='+0:00'
# binlog 配置
expire-logs-days = 90
max-binlog-size = 500M
# server-id 配置
server-id = 1
###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
启动MySQL容器
cd ..
docker compose up -d
如果全部是复制进去的,因为格式问题,第一次运行可能会出错,用vim进去调整一下格式再运行。
先下载镜像再编译
启动成功
Navicat连接成功
2、Redis
初始化映射目录
mkdir -p /data/redis
cd /data/redis
mkdir data
mkdir conf
编写docker-compose.yml文件
touch docker-compose.yml
vim docker-compose.yml
version: '3' #设置docker compose 版本
services: #设置services
redis:
image: redis:latest #镜像名称
container_name: redis #容器名称
restart: always #重启docker引擎后该容器也重启
ports:
- 6379:6379 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf:rw #redis.conf文件和data目录分别映射了主机的redis.conf文件和主机的data目录
- ./data:/data:rw
command:
/bin/bash -c "redis-server /usr/local/etc/redis/redis.conf " #使用command可以覆盖容器启动后默认执行的命令。这里启动执行指定的redis.conf文件
编写Redis配置文件
cd conf
touch redis.conf
vim redis.conf
protected-mode no
port 6379
timeout 0
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec
requirepass 123456
启动容器
cd /data
docker compose up -d
启动成功
连接成功