天天看点

centos7安装配置docker-compose

1、Docker-compose简介

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

工程:Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。
服务:一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。
容器:一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。      

2、Docker-compose安装

有pip和下面安装方式。

安装

[root@mydockerhub ~]# wget https://github.com/docker/compose/releases/download/1.26.2/docker-compose-Linux-x86_64
[root@mydockerhub ~]# cp /root/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
[root@mydockerhub ~]# chmod +x /usr/local/bin/docker-compose
[root@mydockerhub ~]# docker-compose -version
docker-compose version 1.26.2, build eefe0d31      

示例

[root@mydockerhub ~]# cat docker-compose.yml
version: '3.1'
services:
  frontend:
    image: konradkleine/docker-registry-frontend:v2
    ports:
      - 8080:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=mydockerhub.com
      - ENV_DOCKER_REGISTRY_PORT=5000      

运行

[root@mydockerhub ~]# docker-compose -f docker-compose.yml up -d      
[root@mydockerhub ~]# mkdir lamp
[root@mydockerhub ~]# cd lamp
[root@mydockerhub ~]# vi docker-compose.yml
version: '3'
services:
  php:
    image: php7.2.10:centos7.8
    hostname: php
    privileged: true
    restart: always
    container_name: php7.2.10
    ports:
      - "9000:9000"
    volumes:
      - /lamp/conf/php:/usr/local/php/etc
      - /lamp/data/website:/opt/XYZ/website
      - /lamp/data/nfs:/opt/XYZ/nfs
    dns:
      - 114.114.114.114
      - 8.8.8.8
    networks:
      lamp-net:
        ipv4_address: 172.16.9.10
    command: /usr/sbin/init
  apache1:
    image: apache2.4.25:centos7.8
    hostname: apache1
    privileged: true
    restart: always
    container_name: apache2.4.25_node1
    ports:
      - "50080:50080"
    volumes:
      - /lamp/conf/apache:/etc/httpd
      - /lamp/data/website:/opt/XYZ/website
      - /lamp/data/nfs:/opt/XYZ/nfs
    depends_on:
      - php
    links:
      - php
    dns:
      - 114.114.114.114
      - 8.8.8.8
    networks:
      lamp-net:
        ipv4_address: 172.16.9.20
    command: /usr/sbin/init
  apache2:
    image: apache2.4.25:centos7.8
    hostname: apache2
    privileged: true
    restart: always
    container_name: apache2.4.25_node2
    ports:
      - "50088:50080"
    volumes:
      - /lamp/conf/apache:/etc/httpd
      - /lamp/data/website:/opt/XYZ/website
      - /lamp/data/nfs:/opt/XYZ/nfs
    depends_on:
      - php
    links:
      - php
    dns:
      - 114.114.114.114
      - 8.8.8.8
    networks:
      lamp-net:
        ipv4_address: 172.16.9.21
    command: /usr/sbin/init
  nginx:
    image: nginx1.18.0:centos7.8
    hostname: nginx
    privileged: true
    restart: always
    container_name: nginx1.18.0
    ports:
      - "80:80"
    volumes:
      - /lamp/conf/nginx:/usr/local/nginx/conf
      - /lamp/logs/nginx:/usr/local/nginx/logs
    depends_on:
      - apache1
      - apache2
      - php
    links:
      - apache1
      - apache2
    dns:
      - 114.114.114.114
      - 8.8.8.8
    networks:
      lamp-net:
        ipv4_address: 172.16.9.30
    command: /usr/sbin/init
networks:
  lamp-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.16.9.0/24
        
检查配置:
[root@mydockerhub lamp]# docker-compose config
ERROR: The Compose file './docker-compose.yml' is invalid because:
networks.lamp-net.ipam.config value Additional properties are not allowed ('gateway' was unexpected)
备注:3以上的版本就不需要设置gateway(网关),删除即可

启动
[root@mydockerhub lamp]# docker-compose up -d(停止和删除是docker-compose down)
Creating network "lamp_lamp-net" with driver "bridge"
Creating php7.2.10 ... done
Creating apache2.4.25_node2 ... done
Creating apache2.4.25_node1 ... done
Creating nginx1.18.0        ... done

[root@mydockerhub lamp]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND             CREATED              STATUS              PORTS                              NAMES
eba53df185d5        nginx1.18.0:centos7.8    "/usr/sbin/init"    57 seconds ago       Up 55 seconds       0.0.0.0:80->80/tcp                 nginx1.18.0
62f88748905b        apache2.4.25:centos7.8   "/usr/sbin/init"    59 seconds ago       Up 56 seconds       80/tcp, 0.0.0.0:50088->50080/tcp   apache2.4.25_node2
920640c7929d        apache2.4.25:centos7.8   "/usr/sbin/init"    59 seconds ago       Up 56 seconds       80/tcp, 0.0.0.0:50080->50080/tcp   apache2.4.25_node1
81fb160f85eb        php7.2.10:centos7.8      "/usr/sbin/init"    About a minute ago   Up 58 seconds       0.0.0.0:9000->9000/tcp             php7.2.10
[root@mydockerhub lamp]# docker-compose ps
       Name             Command       State                Ports              
------------------------------------------------------------------------------
apache2.4.25_node1   /usr/sbin/init   Up      0.0.0.0:50080->50080/tcp, 80/tcp
apache2.4.25_node2   /usr/sbin/init   Up      0.0.0.0:50088->50080/tcp, 80/tcp
nginx1.18.0          /usr/sbin/init   Up      0.0.0.0:80->80/tcp              
php7.2.10            /usr/sbin/init   Up      0.0.0.0:9000->9000/tcp    

[root@mydockerhub lamp]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
be6c8eb1bb36        lamp_lamp-net       bridge              local

[root@mydockerhub lamp]# docker network inspect lamp_lamp-net
访问http://192.168.146.199测试,查看apache1和apache2容器是否都有访问日志。
备注:更改docker-compose.yml文件后重新启动,他会删除并重新创建容器      

继续阅读