docker compose简介 Docker Compose 是 Docker 官方推出的工具,用于定义和运行多容器 Docker 应用 。通过单个 YAML 文件(通常命名为 docker-compose.yml
),可以配置应用的服务、网络和卷,一键启动或停止整个应用栈,无需逐个操作容器。 Docker Compose 是管理多容器应用的必备工具,通过 YAML 配置简化部署流程,尤其适合开发和测试环境。对于生产环境,可结合 Kubernetes 等更强大的编排工具。
yaml文件编辑规范 •第一:YAML是一种标记性语言,类似于json数据描述语言,可读性高; •第二:YAML数据结构通过缩进来表示,连续项目通过减号表示,键值对用冒号分隔,数组使用中括号[]
括起来,bash用花括号{}
括起来; •第三:不支持制表符TAB缩进,只能使用空格缩进; •第四:字符后缩进一个空格(如冒号、逗号、横杠后须加空格); •第五:使用#号表示注释; •第六:如果包含特殊字符用单引号' '
标记为普通字符,用双引号表示特殊字符本身的意思,布尔值必须使用双引号" "
括起来; •第七:YAML 区分大小写;
docker compose yaml文件指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 version:指定此yml文件基于的compose的版本 services:指定创建容器的服务选项 network: 网络服务创建 volume: 数据卷服务创建 hostname:容器主机名 build :指定构建镜像上下文路径 context:上下文路径 dockerfile:指定构建镜像的 Dockerfile 文件名 ports:暴露容器端口,与-p相同,但端口不能低于60;例如:- 1234 :80 networks:加入顶级networks下配置的网络 deploy:指定部署和运行服务相关配置,只能在Swarm模式使用 volumes:挂载宿主机路径或命令卷 image:指定容器运行的镜像 command:执行命令,覆盖默认命令 container_name:指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale(扩展) environment:添加环境变量 restart:重启策略,重启策略是no,always,no-failure,unless-stoped no ,默认策略,在容器退出时不重启容器。 on-failure,在容器非正常退出时(退出状态非0),才会重启容器。可加(:3) 规定重启次数 always,在容器退出时总是重启容器。 unless-stopped,在容器退出时总是重启容器 networks:配置网络,指定网卡设备等
compose命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 docker compose up docker compose down docker compose start/stop/restart docker compose up --scale master=2 --scale slave=2 docker compose logs [ -f 容器名称 --tail =50 ]
mysql主从部署
binlog 日志 :主库记录所有数据修改操作,作为主从同步的数据源。
undo 日志 :记录事务执行前的数据状态,用于回滚和多版本并发控制。
redo 日志 :记录事务已提交的修改,确保崩溃后数据可恢复。
relay 日志 :从库临时存储主库 binlog 内容,供 SQL 线程读取执行。
docker-compose.yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 version: '2.27' services: mysql_m: image: mysql:5.7 container_name: mysql_m hostname: mysql_m ports: - 3336 :3306 networks: - mysql_net volumes: - ./my_m.conf:/etc/mysql/conf.d/my.cnf - mysql_m_volume:/var/lib/mysql - mysql_m_volume:/var/log/mysql environment: - MYSQL_ROOT_PASSWORD=root mysql_s: image: mysql:5.7 container_name: mysql_s hostname: mysql_s ports: - 3337 :3306 networks: - mysql_net volumes: - ./my_s.conf:/etc/mysql/conf.d/my.cnf - mysql_s_volume:/var/lib/mysql - mysql_s_volume:/var/log/mysql environment: - MYSQL_ROOT_PASSWORD=root networks: mysql_net: driver: bridge name: mysql_net ipam: driver: default config: - subnet: 192.168 .100 .0 /24 gateway: 192.168 .100 .1 volumes: mysql_m_volume: name: mysql_m_volume mysql_s_volume: name: mysql_s_volume
修改主服务配置文件:my_m.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [mysqld ] server_id=1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-do-db=test binlog_format=STATEMENT symbolic-links=0
修改从服务配置文件:my_s.conf 1 2 3 4 5 6 [mysqld ] server-id=2 relay-log=relay-bin log-bin=mysql-bin slave-skip-errors= 1032 ,1062,1007,1050
执行验证 1 2 3 4 5 6 7 8 9 10 cd mysql_service/docker compose up -d docker exec -it mysql_m bash mysql -uroot -proot show master status;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 create user 'worker' @'%' identified by 'root' ; grant replication slave,replication client on *.* to 'worker' @'%' ; create database test ; show master status; docker exec -it mysql_s bash mysql -uroot -proot CHANGE MASTER TO MASTER_HOST='mysql_m' , MASTER_USER='worker' , MASTER_PASSWORD='root' , MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001' ,MASTER_LOG_POS=778; start slave; show slave status\G; create database test ; use test ; create table test (id int); show tables; use test ; show tables; stop slave; reset master; start slave; show slave status\G;
Linux根目录扩容 第一步:先关机 第二步:添加硬盘-SCSI-创建新虚拟磁盘-设置需要添加的磁盘大小(写作最大磁盘大小)(10G)(存储为单个文件)-下一步-完成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 df -lhls /dev/sd*fdisk -l pvcreate /dev/sdb vgdisplay pvdisplay lvdisplay vgextend centos /dev/sdb lvextend -L +10G /dev/centos/root lvextend -l +2559 /dev/centos/root xfs_growfs /dev/mapper/centos-root df -lhlsblk