????????
一.什么是Docker Compose?
Docker Compose是Docker的一个工具,用于定义和管理多个Docker容器的应用程序。它允许您通过一个单独的文件来定义多个服务、网络和卷,并通过简单的命令来启动、停止和管理整个应用。
Docker Compose使用YAML文件来描述应用程序的组件和配置。在这个YAML文件中,您可以定义每个服务的镜像、端口映射、环境变量、挂载卷、网络设置等。通过使用Docker Compose,您可以将复杂的多容器应用程序定义为一个简单的文本文件,使得应用的部署和维护变得更加方便和可管理。
?
二.Docker Compose的优势
使用Docker Compose有许多优势,包括:
简化应用定义:通过使用YAML文件来定义整个应用程序,您可以将多个服务和配置集中在一个地方,减少了手动操作和配置的复杂性。
快速部署:一旦您定义了应用程序,只需使用一个命令就可以快速部署整个应用,节省了部署时间和工作量。
依赖管理:Docker Compose允许您定义服务之间的依赖关系,确保各个服务在正确的顺序启动,避免了因依赖问题导致的启动失败。
易于扩展:如果您的应用需要扩展,只需修改YAML文件中的服务定义,再次运行命令即可完成扩展,非常方便。
环境隔离:每个服务在Docker容器中运行,实现了环境隔离,保证了应用之间不会相互干扰,提高了安全性。
创建自定义网络:
docker network create --subnet=172.33.0.0/16 mynet
查看网络信息
docker network list
查看指定网络的详细信息
docker network inspect mynet
删除指定网络
docker network rm mynet
创建容器并测试自定义网络?
docker run -it --name t1 --net mynet \
?--ip 172.18.0.2 --restart=always centos:latest /bin/bash
向docker compose移植
mkdir /docker-compose
docker compose.yml文件的常用手段?
? ? ? ? ? ? ? ? 字段 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述
build ?docker ? filecontext ? ?指定Dockerfile文件名构建镜像上下文路径
image ? ? ? ? ? ? ? ? ? ? ? ? ?指定镜像
command ? ? ? ? ? ? ? ? ? 执行命令,覆盖默认命令
container name ? ? ? ? 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale
deploy ? ? ? ? ? ? ? ? ? ? ? ?指定部署和运行服务相关配置,只能在Swarm模式使用
environment ? ? ? ? ? ? ? 添加环境变量
networks ? ? ? ? ? ? ? ? ? ?加入网络
ports ? ? ? ? ? ? ? ? ? ? ? ? ? 暴露容器端口,与-p相同,但端口不能低于60
volumes ? ? ? ? ? ? ? ? ? ? ?挂载宿主机路径或命令卷
restart ? ? ? ? ? ? ? ? ? ? ? ? ?重启策略,默认no,always,no-failure,unless-stoped
hostname ? ? ? ? ? ? ? ? ? ?容器主机名
?MySQL主从集群
mkdir -p /usr/local/mysql/conf
cd /usr/local/mysql/conf
vim /usr/local/mysql/conf/my.cnf
?
version:"3" services: test: images:mysql/mysql-server:5.7 networks: my_net: ipv4_address:172.18.0.0/16 volumes: -/soft/mysql/master/conf/my.cnf:/etc/my.cnf -/soft/mysql/master/data:/var/lib/mysql -/soft/mysql/master/script:/script restart: on-failure privileged:true environment: MYSQL_ROOT_PASSWORD=123456 networks: - my_net slave: image:mysql/mysql-server:5.7 volumes: - /soft/mysql/slave/conf/my.cnf:/etc/my.cnf - /soft/mysql/slave/data:/script - /soft/mysql/slave/script restart: on-failure #也可以 使用--restart=always \一直 privileged:true environment: MYSQL_ROOT_PASSWORD=123456 networks: my_net: driver:bridge ipam: config: - subnet:172.18.0.0/16
?