Docker之Docker-compose使用

1.  docker-compose介绍

    Compose作为一个独立的工具,本身并没有与Docker客户端进行集成 ,需要单独安装。(注:在安装之前,主机上必须先安装好Docker引擎)

    定义和运行多个docker容器的工具

    一个文件  docker-compose.yml

    一条命令  docker-compose up

2.  docker-compose安装

    1.  RPM安装

        yum install -y docker-compose-plugin

    2.  二进制方式

        curl -SL https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

        chmod +x /usr/local/bin/docker-compose

        docker-compose -v

3.  Docker-compose命令基础

    我的样例

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '85:80'
      - '86:81'
      - '8443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

    1.  指定配置文件

        -f  用来指定配置文件的,该参数可以使用多次。

        docker-compose -f docker-compose.yml -f docker-compose.admin.yml up

    2.  指定项目名称

        docker-compose启动容器时会默认地把当前的目录名称设置为容器名称的前缀

        -p  用来指定容器名称

        docker-compose -p yang up

    3.  构建镜像

        docker-compose build

    4.  检查配置文件  

        docker-compose config  输出整个配置文件的内容

        docker-compose config -q  不输出整个配置文件的内容,除非有语法问题

    5.  创建容器(已废弃)

        docker-compose create  只创建容器不运行

    6.  进入服务容器

        docker-compose exec app /bin/bash

    7.  杀死服务容器

        docker-compose kill app

        docker-compose -f docker-compose.yml kill

    8.  查看服务容器日志

        docker-compose logs app

        docker-compose -f docker-compose.yml logs

    9.  暂停服务容器

        docker-compose pause app

        docker-compose -f docker-compose.yml pause

        docker-compose unpause app  解除暂停

    10.  查看容器与镜像

        docker-compose ps

        docker-compose ps -q  输出容器ID

        docker-compose images

    11.  重启服务容器

        docker-compose restart app

        docker-compose -f docker-compose.yml restart                      

    12.  删除项目容器

        docker-compose rm app  删除停止的容器

        docker-compose rm -f app  强制删除停止的容器,不提示 

    13.  启动服务容器

        docker-compose start app  

        docker-compose -f docker-compose.yml start

    14.  停止服务容器

        docker-compose stop app

        docker-compose -f docker-compose.yml stop

    15.  查看进程状态

        docker-compose top app

        docker-compose -f docker-compose.yml top 

    16.  启动项目

        docker-compose up -d

        docker-compose up --scale app=5  启动5个服务

4.  Docker-compose配置文件

    1.  样例                            

   version: "3.9"  
   services:  #用于定义不同的应用服务
       myapp:
            build: ./myapp
            ports:
              - "80:80"
            container_name: myapp
            depends_on:  #指定服务间的依赖关系。
                - database
            networks:
               - mynet
        database:
            image: mysql:5.7
            environment:
                MYSQL_ROOT_PASSWORD: 123456
            ports:
              - "3306:3306"
            container_name: db
            volumes:
                - "mydata:/var/lib/mysql"    #数据卷挂载
            networks:
                - mynet
    networks:
        mynet:
            driver: bridge

    volumes:
       mydata:

    2.  image

        指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像。

        image: redis

        image: mysql:5.7

        image: a4bc65fd

    3.  build

        1.  除了可以基于指定的镜像,还可以基于一份Dockerfile,这个构建标签就是build,它可以指定Dockerfile所在文件夹的路径。  

            build:  /path/to/build/dir  绝对路径

            build:  ./dir  相对路径

        2.  如果要指定Dockerfile文件 

            build:

              context:  ./dir

              dockerfile:  Dockerfile

        3.  如果同时指定了image和build两个标签,那么compose会构建镜像并且把镜像命名为image后面的那个名字

            build:    ./dir

            image:  webapp:tag

        4.  构建过程中指定环境变量

            build:

              context:  .

              args:

                buildno:1

                password: secret

    4.  command

        使用command可以覆盖容器启动后默认执行的命令

    5.  configs

        

        source:  Docker存在的配置的名称

        target:  容器内部的目标路径

        uid/gid:  指定配置文件存放时的用户归属

        mode:  指定配置文件的权限

    6.  container_name

        指定容器的名称

    7.  depends_on

        解决容器的依赖和启动先后的问题

    8.  environment

        设置镜像变量,它可以将变量保存到镜像里面,启动后的容器也会包含这些变量设置

    9.  networks

        加入网络,这是一个顶级的选项,与服务,版本等选项同级

    10.  logging

        用于配置日志服务       

logging:
    driver: syslog
    options:
        syslog-address: "tcp://192.168.1.100:123"

    11.  ports

        映射端口的标签

        ports:

           - "3000"

           - "3000-3005"

           - "8000:8000"

           - "127.0.0.1:8000:8000"

    12.  secrets

        为每个服务配置独立的secrets,与config使用方法一致

    13.  volumes

        volumes:

          -  /var/lib/mysql  挂载到容器内部的路径

          -  /opt/data:/var/lib/mysql  使用绝对路径

          -  datavolume:/var/lib/mysql  已经存在的数据卷                              

5.  docker-compose.yml实例

    1.  实例1

version: '2'
services:
  log:
    image: goharbor/harbor-log:v1.7.1
    container_name: harbor-log 
    restart: always
    dns_search: .
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - SETGID
      - SETUID
    volumes:
      - /var/log/harbor/:/var/log/docker/:z
      - ./common/config/log/:/etc/logrotate.d/:z
    ports:
      - 127.0.0.1:1514:10514
    networks:
      - harbor
  registry:
    image: goharbor/registry-photon:v2.6.2-v1.7.1
    container_name: registry
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - /data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
      - ./common/config/custom-ca-bundle.crt:/harbor_cust_cert/custom-ca-bundle.crt:z
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "registry"
  registryctl:
    image: goharbor/harbor-registryctl:v1.7.1
    container_name: registryctl
    env_file:
      - ./common/config/registryctl/env
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - /data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
      - ./common/config/registryctl/config.yml:/etc/registryctl/config.yml:z
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "registryctl"
  postgresql:
    image: goharbor/harbor-db:v1.7.1
    container_name: harbor-db
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - SETGID
      - SETUID
    volumes:
      - /data/database:/var/lib/postgresql/data:z
    networks:
      - harbor
    dns_search: .
    env_file:
      - ./common/config/db/env
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "postgresql"
  adminserver:
    image: goharbor/harbor-adminserver:v1.7.1
    container_name: harbor-adminserver
    env_file:
      - ./common/config/adminserver/env
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - /data/config/:/etc/adminserver/config/:z
      - /data/secretkey:/etc/adminserver/key:z
      - /data/:/data/:z
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "adminserver"
  core:
    image: goharbor/harbor-core:v1.7.1
    container_name: harbor-core
    env_file:
      - ./common/config/core/env
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
    volumes:
      - ./common/config/core/app.conf:/etc/core/app.conf:z
      - ./common/config/core/private_key.pem:/etc/core/private_key.pem:z
      - ./common/config/core/certificates/:/etc/core/certificates/:z
      - /data/secretkey:/etc/core/key:z
      - /data/ca_download/:/etc/core/ca/:z
      - /data/psc/:/etc/core/token/:z
      - /data/:/data/:z
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
      - adminserver
      - registry
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "core"
  portal:
    image: goharbor/harbor-portal:v1.7.1
    container_name: harbor-portal
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - NET_BIND_SERVICE
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
      - core
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "portal"

  jobservice:
    image: goharbor/harbor-jobservice:v1.7.1
    container_name: harbor-jobservice
    env_file:
      - ./common/config/jobservice/env
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - /data/job_logs:/var/log/jobs:z
      - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z
    networks:
      - harbor
    dns_search: .
    depends_on:
      - redis
      - core
      - adminserver
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "jobservice"
  redis:
    image: goharbor/redis-photon:v1.7.1
    container_name: redis
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - /data/redis:/var/lib/redis
    networks:
      - harbor
    dns_search: .
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "redis"
  proxy:
    image: goharbor/nginx-photon:v1.7.1
    container_name: nginx
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - NET_BIND_SERVICE
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    dns_search: .
    ports:
      - 80:80
      - 443:443
      - 4443:4443
    depends_on:
      - postgresql
      - registry
      - core
      - portal
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"
networks:
  harbor:
    external: false

    2.  实例2,wordprees博客部署

        创建一个空文件夹,在文件夹下创建一个docker-compose.yml,内容如下:

version: '3'

services:
    db:
        image: mysql:5.7
        volumes:
            - "./.data/db:/var/lib/mysql"
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: wordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress
    wordpress:
        depends_on:
            - db
        image: wordpress:latest
        links:
            - db
    ports:
        - "8000:80"
    restart: always
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_PASSWORD: wordpress

        启动docker-compose up -d

 

            

posted @ 2023-05-23 15:04  奋斗史  阅读(362)  评论(0)    收藏  举报