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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号