11-Docker容器单机编排工具
1.docker-compose介绍
Compose 是用于定义和运行多容器 Docker 应用程序的工具。
通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。
写好yaml文件之后,只需要运行一条命令,就会按照资源清单里的配置运行相应的容器服务。
Compose 使用的三个步骤:
1.使用 Dockerfile 定义应用程序的环境。
2.使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
3.最后,执行 docker-compose up 命令来启动并运行整个应用程序。
官方版本说明:
https://docs.docker.com/compose/compose-file/compose-versioning/
2.安装docker-compose
方法1:直接yum安装-版本比较老
yum install docker-compose
方法2:使用官方脚本安装
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
方法3:推荐
对于较新版本的Docker来说,不需要在单独安装docker-compose了,新版本的Docker已经集成了,只需要将原来的docker-compose替换为docker compose即可。
3.docker-compose命令格式
build 		#构建镜像
bundle 		#从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备 份文件
config -q   #查看当前配置,没有错误不输出任何信息
create 		#创建服务,较少使用
down 		#停止和删除所有容器、网络、镜像和卷
events 		#从容器接收实时事件,可以指定json 日志格式,较少使用
exec 		#进入指定容器进行操作
help 		#显示帮助细信息
images 		#显示镜像信息
kill 		#强制终止运行中的容器
logs 		#查看容器的日志
pause 		#暂停服务
port 		#查看端口
ps			#列出容器
pull 		#重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
push 		#上传镜像
restart 	#重启服务
rm 			#删除已经停止的服务
run 		#一次性运行容器
scale 		#设置指定服务运行的容器个数
start 		#启动服务
stop 		#停止服务
top 		#显示容器运行状态
unpause 	#取消暂定
up 			#创建并启动容器
4.docker-compose语法介绍
官方英文参考文档:
https://github.com/compose-spec/compose-spec/blob/master/spec.md
菜鸟教程翻译文档:
https://www.runoob.com/docker/docker-compose.html
模板案例:
version: '版本号'
services:
  服务名称1:
    build: .	构建镜像
    image: 容器镜像
    container_name: 容器名称
    environment:
      - 环境变量1=值1
      - 环境变量2=值2
    command:
      - 参数
    volumes:
      - 存储驱动1:容器内的数据目录路径
      - 宿主机目录路径:容器内的数据目录路径
    ports:
      - 宿主机端口:映射到容器内的端口
    resources:			#资源限制
      limits:			#最大的资源使用
        cpus: '0.50'
        memory: 50M
      reservations:		#能运行容器的最低要求
        cpus: '0.25'
        memory: 20M
    networks:
      - 自定义网络的名称
    links:
      - namenode
  服务名称2:
    build: .  构建镜像
    image: 容器镜像
    container_name: 容器名称
    environment:
      - 环境变量1=值1
      - 环境变量2=值2
    command:
      - 参数
    volumes:
      - 存储驱动2:对应容器内的数据目录路径
    ports:
      - 宿主机端口:映射到容器内的端口
    networks:
      - 自定义网络的名称
    links:
      - namenode
    depends_on:		容器启动顺序依赖
      - mysql
networks:
  自定义网络名称:
    driver: bridge
来自ChatGPT的回答:
version: '3.8' # 指定使用的 docker-compose 文件版本
services: # 定义和配置服务
  webapp: # 服务名称
    image: my-web-app:latest # 使用的镜像
    build: # 构建配置
      context: ./dir # Dockerfile 所在的上下文目录
      dockerfile: Dockerfile # Dockerfile 名称,如果不在上下文目录的根,则需要指定路径
    ports:
      - "5000:5000" # 映射端口,格式为 "主机:容器"
    environment: # 环境变量
      DEBUG: "true"
    volumes: # 卷挂载
      - ./data:/var/myapp/data # 映射卷,格式为 "主机目录:容器目录"
    networks: # 网络配置
      - my-network
    deploy: # 部署配置
      resources: # 资源限制
        limits: # 限制
          cpus: '0.5' # 限制使用的 CPU 核心数
          memory: 50M # 限制使用的内存量
        reservations: # 预留
          cpus: '0.25' # 预留的 CPU 核心数
          memory: 20M # 预留的内存量
  redis: # 另一个服务
    image: "redis:alpine" # 使用的镜像
    networks:
      - my-network
networks: # 定义网络
  my-network: # 网络名称
    driver: bridge # 网络类型
volumes: # 定义卷
  my-data: # 卷名称
    driver: local # 卷类型
5.使用docker-compose部署zabbix
官方文档:
https://www.zabbix.com/documentation/5.0/zh/manual/installation/containers
使用自定义网络:
docker network create -d bridge --subnet 172.16.1.0/24 --gateway 172.16.1.1 zabbix-net
修改后的docker-compose文件:
version: '3.9'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    user: 2000:2000
    environment:
      - "MYSQL_ROOT_PASSWORD=123"
      - "MYSQL_DATABASE=zabbix"
      - "MYSQL_USER=zabbix"
      - "MYSQL_PASSWORD=zabbix"
    command:
      --character-set-server=utf8
      --collation-server=utf8_bin
    volumes:
      - /data/mysql:/var/lib/mysql
  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql
    container_name: zabbix-server-mysql
    environment:
      - "DB_SERVER_HOST=mysql"
      - "MYSQL_USER=zabbix"
      - "MYSQL_PASSWORD=zabbix"
    ports:
      - "10051:10051"
    depends_on:
      - mysql
  zabbix-web-nginx-mysql:
    image: zabbix/zabbix-web-nginx-mysql
    container_name: zabbix-web-nginx-mysql
    environment:
      - "DB_SERVER_HOST=mysql"
      - "MYSQL_USER=zabbix"
      - "MYSQL_PASSWORD=zabbix"
      - "ZBX_SERVER_HOST=zabbix-server-mysql"
      - "PHP_TZ=Asia/Shanghai"
    ports:
      - "80:8080"
networks:
  default:
    external: true
    name: zabbix-net
6.使用docker-compose部署wordpress
version: '3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    user: 2000:2000
    environment:
      - "MYSQL_ROOT_PASSWORD=123"
      - "MYSQL_DATABASE=wordpress"
      - "MYSQL_USER=wordpress"
      - "MYSQL_PASSWORD=wordpress"
    volumes:
      - "/data/wordpress:/var/lib/mysql"
    ports:
      - "3306:3306"
    command:
      --character-set-server=utf8
      --collation-server=utf8_bin
  nginx_php:
    image: nginx_php:v1
    container_name: nginx_php
    ports:
      - "80:80"
networks:
  default:
    external: true
    name: wordpress
7.docker-compose部署jenkins+gitlab
version: '3'
services:
  jenkins:
    image: 'jenkins/jenkins:latest'
    container_name: jenkins
    restart: always
    privileged: true
    user: root
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - '/data/jenkins:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/usr/bin/docker:/usr/bin/docker'
      - '/root/.ssh:/root/.ssh'
      - '/root/.docker/:/root/.docker'
      - '/etc/docker/daemon.json:/etc/docker/daemon.json'
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://10.0.0.11'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        alertmanager['enable'] = false
        grafana['enable'] = false
        prometheus['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
        pgbouncer_exporter['enable'] = false
        gitlab_exporter['enable'] = false
    ports:
      - '9090:80'
      - '2222:22'
    volumes:
      - '/data/gitlab/config:/etc/gitlab'
      - '/data/gitlab/logs:/var/log/gitlab'
      - '/data/gitlab/data:/var/opt/gitlab'
8.docker-compose运行EBK
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/es_01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/es_02:/usr/share/elasticsearch/data
    networks:
      - elastic
  kibana:
    image: docker.elastic.co/kibana/kibana:7.13.4
    container_name: kibana
    environment:
      SERVER_NAME: 10.0.0.12
      ELASTICSEARCH_HOSTS: http://es01
    ports:
      - 5601:5601
    networks:
      - elastic
networks:
  elastic:
    driver: bridge