记一次docker-compose实践

文章目录

  • 零、安装docker、docker-compose
  • 一、改变docker存储位置
    • 关闭docker
    • 创建docker的新存储位置
    • 编辑/etc/docker/daemon.json文件
    • 重启docker
  • 二、接入服务
    • 0. 背景
    • 1.docker-compose-env.yml
      • 1.1 mysql-sql_mode调整
    • 2.docker-compose-ser.yml
  • conf
  • 总结


零、安装docker、docker-compose

安装并且处理好用户身份问题,默认docker是需要docker用户或者root用户才可以运行,可以把当前用户加入到docker用户组

一、改变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.ymldocker-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实践。

你可能感兴趣的:(docker,容器,运维)