文章目录
零、安装docker、docker-compose
安装并且处理好用户身份问题,默认docker是需要docker用户或者root用户才可以运行,可以把当前用户加入到docker用户组
sudo apt install docker.io
sudo apt install docker-compose
一、改变docker存储位置
关闭docker
sudo systemctl stop docker
创建docker的新存储位置
mkdir -p /home/user/docker
编辑/etc/docker/daemon.json文件
这个文件默认没有,需要创建
vi /etc/docker/daemon.json
写入内容
{
"data-root": "/home/user/docker"
}
重启docker
sudo systemctl restart docker
二、接入服务
0. 背景
在同一个目录下我建立了两个yml文件,docker-compose-env.yml和docker-compose-ser.yml,其中env包含mysql、redis、etcd、nats四个基础服务,ser中是业务服务。分两个文件可以保证升级服务的时候,不干扰环境。
1.docker-compose-env.yml
# yaml 配置
version: "3.7"
services:
mysql-ser:
image: "mysql:5.7.39"
ports:
- "3306:3306"
command: "--defaults-file=/etc/mysql/my.cnf --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=ser1
- MYSQL_PASSWORD=123456
volumes:
- ./mysql/log:/var/log/mysql
- ./mysql/data:/var/lib/mysql
- ./mysql/conf/my.cnf:/etc/mysql/my.cnf
privileged: true
以mysql为例,将mysql服务命名为mysql-ser,挂载卷保证数据不丢。
1.1 mysql-sql_mode调整
修改my.cnf
确保该文件权限为644,如果具有全局可写权限,那么会忽略该文件,导致sql_mode不生效。
2.docker-compose-ser.yml
# yaml 配置
version: "3.7"
services:
ser1:
image: "ser1:version1"
volumes:
- ./log:/var/log
- ./conf:/etc/ser
- /var/lib/dbus/machine-id:/var/lib/dbus/machine-id
- ./conf/machine-id:/etc/machine-id
ports:
- "8080:8080"
- "8001:8001/udp"
environment:
- TZ=Asia/Shanghai
业务中最重要的一个点是服务使用了quic协议,quic是基于udp的,所以对应的端口映射要标注udp。
conf
业务的conf文件
[database]
type = mysql
host = mysql-ser
port = 3306
database = ser1
user = root
password = 123456
timezone = Asia/Shanghai
max_open_conns = 100
max_idle_conns = 10
debug = false
这里最重要的是,host不能写localhost,需要写mysql-ser,也就是env.yml中的mysql服务名。
总结
记录了一次docker-compose实践。