当前位置:   article > 正文

docker-compose常用模板_docker compose v3完整模版

docker compose v3完整模版


前言

  1. docker-compose版本: 3
  2. 博客里面会放少量的模板, 具体的详细的在项目里面会有
  3. 一些可能会碰到的问题
  4. 一些可能存在的需求
  5. 查看network
  6. 项目地址
    在这里插入图片描述

一、docker-compose一些模板

多个服务

# Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
version: "3"

# 定义服务
services:

  # 为project定义服务
  redis:
    # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
    image: redis:4.0
    # 配置端口 - "宿主机端口:容器暴露端口"
    ports:
      - 6379:6379
    # 配置容器连接的网络,引用顶级 networks 下的条目(就是最下面配置的networks(一级目录))
    networks:
      network_name:
       # 为单redis创建别名, REDIS_URL标记为redis服务的地址. (不配置aliases也可以, 这样就通过定义的服务名: redis链接)
       aliases:
         - REDIS_URL
    # 挂载
    volumes:
      - "/docker/redis/conf/redis.conf:/etc/redis/redis.conf"
      - "/docker/redis/data:/data"
    # 容器总是重新启动
    restart: always
    # 相当于执行一些命令
    command:
      redis-server /etc/redis/redis.conf --appendonly yes
    # 指定一个自定义容器名称,而不是生成的默认名称。
    container_name: redis
    # 使用该参数,container内的root拥有真正的root权限。
    privileged: true

  db:
    image: mysql:5.7
    ports:
      - 3306:3306
    # 添加环境变量
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - "/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
      - "/docker/mysql/logs:/var/log/mysql"
      - "/docker/mysql/data:/var/lib/mysql"
      - "/docker/mysql/sql/init.sql:/docker-entrypoint-initdb.d/init.sql"
      - "/etc/localtime:/etc/localtime"
    networks:
      network_name:
        aliases:
         - MYSQL_URL
    restart: always
    command: --init-file /docker-entrypoint-initdb.d/init.sql
    container_name: mysql
    privileged: true
    
  project-name:
    # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
    image: project-name:1.0.0
    # 构建镜像
    build:
      # 指定项目的地址
      context: /root/docker_mysql_redis
      # 指定Dockerfile
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    # 从文件添加环境变量
    env_file:
      - /root/environment.env
    networks:
      network_name:
       aliases:
        - PROJECT_URL
    privileged: true
    restart: always
    container_name: test-name
    
  # ........可以继续添加


networks:
  # bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信
  network_name:
    driver: bridge

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

单个服务

version: "3"

services:

  nacos:
    image: nacos/nacos-server:1.2.1
    ports:
      - 8848:8848
    # 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
    networks:
      network_nacos:
        aliases:
         - NACOS_URL
      # 通过docker network ls 进行获取
      docker_network_mysql:
    restart: always
    environment:
      MODE: standalone
    container_name: nacos
    privileged: true

networks:
  docker_network_mysql:
    external: true
  network_nacos:
    driver: bridge

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

二、一些可能会碰到的问题

docker-compose拉取不下来

    更换yum源:
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    hosts添加解析:
    52.216.16.16 github-production-release-asset-2e65be.s3.amazonaws.com
    重新安装
  • 1
  • 2
  • 3
  • 4
  • 5

docker-compose -v报找不到

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 1

docker镜像拉取太慢

    更换镜像源
    建议配置阿里云的镜像地址: https://developer.aliyun.com/article/29941  
  • 1
  • 2

network以路径为前缀

    # -p Specify an alternate project name (default: directory name) 比如配置的network, 会以路径为前缀, 配置该值, 可以代替
    # -f Specify an alternate compose file (default: docker-compose.yml) 指定yaml文件
    # -d 后台运行
    docker-compose -p docker -f /root/docker-init.yaml up -d
  • 1
  • 2
  • 3
  • 4

三. 一些可能存在的需求

加入一个存在的网络, 同时创建一个新的网络

    # 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
  • 1
services:
  nacos:
    # 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
    networks:
      network_nacos:
        aliases:
         - NACOS_URL
      # 通过docker network ls 进行获取
      docker_network_mysql:
networks:
  docker_network_mysql:
    external: true
  network_nacos:
    driver: bridge
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
    参考文件:individually/docker-nacos.yaml
    先执行docker-mysql.yaml, 然后执行docker-nacos.yaml
    docker exec -it nacos bash
    ping MYSQL_URL / ping db            
  • 1
  • 2
  • 3
  • 4

将已经运行的容器, 新增到一个新的网络中

     创建一个网络docker_mysql: docker network create docker_mysql
     将已运行的容器mysql加入该网络: docker network connect --alias MYSQL_URL docker_mysql mysql
     --alias MYSQL_URL可以通过别名通信. 也可以不要, 但是这样就只能通过容器的ID或者通信
     docker network connect 一个已存在网络 容器名/容器ID
  • 1
  • 2
  • 3
  • 4

将当前镜像备份

    docker tag docker.io/chaim2436/sentinel-dashboard:1.7.1 chaim2436/sentinel-dashboard:1.7.1
    docker rmi docker.io/chaim2436/sentinel-dashboard:1.7.1后chaim2436/sentinel-dashboard:1.7.1会依旧存在
    这里不能rmi id, 因为tag之后两个镜像的ID将会是一样的
  • 1
  • 2
  • 3

启动docker-compose.yaml中的某一个服务

    docker-compose -f /root/docker-init.yaml up -d db
  • 1

四.查看network

docker network inspect docker_mysql, 查看网络里面有哪些容器

这些容器之间都是可以相互通信的, 服务名或者别名都是可行的
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/74173
推荐阅读
相关标签
  

闽ICP备14008679号