【docker-compose】安装及配置

安装

前提:!注意先安装docker

在线安装

# 下载某版本docker-compose文件并改名docker-compose移动至/usr/local/bin
curl -L "https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 授权docker-compose可执行
chmod +x /usr/local/bin/docker-compose
# 查看是否安装成功
docker-compose -v

离线安装

需要先下载好docker-compose文件

# 授执行权限
chmod +x docker-compose
# 移动至/usr/bin
cp docker-compose /usr/bin/
# 查看是否安装成功
docker-compose -v

配置

mysql5.7

  • !!!注意需要给/docker_mysql/data目录授读写权限, 例如chmod -R 755 /docker_mysql/data
  • version23时都可以
version: '3'
services:
  mysql57:
    image: mysql:5.7
    container_name: mysql5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      TZ: Asia/Shanghai
      MYSQL_USER: test
      MYSQL_PASSWORD: Test@123456
    # 指定启动命令和配置参数
    # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    ports:
      - 3307:3306
    volumes:
      - ./docker_mysql/log:/var/log/mysql
      - ./docker_mysql/data:/var/lib/mysql
      - ./docker_mysql/conf:/etc/mysql/conf.d

bitnami/mysql8.3

有一次离线部署,docker官方mysql镜像docker load无法成功,改为bitnami版才成功

  • !!!注意需要给/docker_mysql/data目录授读写权限, 例如chmod -R 755 /docker_mysql/data
  • bitnami版配置version必须为2时以下配置才会生效
  • version3时容器虽然运行成功,但密码等配置都无法生效
  • 官网文档
  • 生产环境部署时,由于服务器问题,必须增加privileged: true配置,否则启动时报/bitnami/mysql/data相关错误。
  • 如果需要自定义配置,可增加配置文件my_custom.cnf,并映射
version: '2'
services:
  mysql:
    image: bitnami/mysql:8.3
    container_name: mysql8
    restart: always
    # privileged: true
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_USER=prism
      - MYSQL_PASSWORD=123456
      - MYSQL_DATABASE=mydatabase
    ports:
      - 3307:3306
    volumes:
      - ./docker_mysql/data:/bitnami/mysql/data
      # - ./docker_mysql/my_custom.cnf:/opt/bitnami/mysql/conf/my_custom.cnf:ro

redis

  • /docker_redis目录下放入配置文件redis.conf
    #开启远程可连接
    #bind 127.0.0.1
    #自定义密码
    requirepass 123456
    #指定 Redis 监听端口(默认:6379)
    port 6379
    #客户端闲置指定时长后关闭连接(单位:秒。0:关闭该功能)
    timeout 0
    #是否压缩数据存储(默认:yes。Redis采用LZ 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大)
    rdbcompression yes
    #指定本地数据文件名(默认:dump.rdb)
    dbfilename dump.rdb
    #指定本地数据文件存放目录
    dir /data
    #指定日志文件位置(如果是相对路径,redis会将日志存放到指定的dir目录下)
    logfile "redis.log"
    
  • 启动后,可进入容器通过redis-cli测试,例如 auth 密码测试自定义密码是否生效
  • !!!注意,如果是先启动的话会自动生成映射目录,其中redis.conf文件会被映射成为目录而不是文件,需要修改后重启
redis:
    image: redis:6.2.6
    container_name: redis
    restart: always
    volumes:
      - ./docker_redis/redis.conf:/etc/redis/redis.conf
      - ./docker_redis/data:/data
      - ./docker_redis/logs:/logs
    command: redis-server /etc/redis/redis.conf
    ports:
      - "6380:6379"

web前后台分离部署

后端镜像web-server基于openjdk:8-alpine镜像制成,前端镜像web-front基于nginx镜像制成

  • version2时需要增加links配置才能将后端服务web-server传入前端服务web-front内部的nginx配置用于反向代理,为3时不需要links配置即可实现
  • 若后端程序连接的mysql也是通过该docker-compose部署的,则可在配置里不使用ip端口而是直接使用服务名
  • 也可以不在同一个docker-compose.yml配置,但要确保在同一网络,例如yml文件放在同一个目录下
  • 生产环境曾出现前端请求后端404,日志报错显示无法通过容器内部网关访问后端容器ip,该问题可通过重启docker服务解决。原因大概是开关防火墙firewalld影响到了所有容器网络。
version: '3'
services:
  web-server:
    image: 127.0.0.1:5000/web-server
    container_name: web-server
    restart: always
    environment:
      - spring.datasource.url=jdbc:mysql://【mysql服务名】/api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT
      # - spring.datasource.url=jdbc:mysql://【ip】:【port】/api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT
      - JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true
  web-front:
    image: 127.0.0.1:5000/web-front
    container_name: web-front
    restart: always
    # links:
    #   - web-server
    depends_on:
      - web-server
    ports:
      - "8080:80"

前端https(SSL)配置

主要涉及签名证书通过volumes映射,具体配置可见【docker-compose】【nginx】内网环境https配置

nginx动态传参

主要借助docker-compose的environment、Dockerfile的envsubst以及nginx配置文件模版实现,【docker-compose】【nginx】动态配置

资源限制:内存、cpu

  • 使用deploy进行资源限制时version必须为3
  • cpus配置必须使用引号‘’
  • reservations是限制最小使用,limits限制最大使用
  • 需通过docker-compose --compatibility up -d启动才能生效
  • 可通过docker stats --no-stream查看内存及cpu使用情况
version: '3'
services:
  web-server:
    image: 127.0.0.1:5000/web-server
    container_name: web-server
    restart: always
    deploy:
      resources:
        limits:
          memory: 8G
          cpus: "4"
        reservations:
          memory: 2G
          cpus: "2"
  web-front:
    image: 127.0.0.1:5000/web-front
    container_name: web-front
    restart: always
    depends_on:
      - web-server
    ports:
      - "8080:80"
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: "2.00"
        reservations:
          memory: 512M
          cpus: "1.00"

nacos+sentinel+gateway

  • docker-compose可以通过服务名访问服务,避免了每次修改ip和端口,便于移植
version: '3'
networks: #自定义网络myapp,为了只有这些服务可以在该网络内相互访问
  myapp:
    driver: bridge
services: #将容器抽象成服务
  nacos: #注册中心(官方镜像)
    image: nacos/nacos-server:latest
    container_name: nacos
    restart: always
    environment:
      MODE: standalone
      PREFER_HOST_MODE: ip
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: 【ip地址】#数据库在外部
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_USER: nacos
      MYSQL_SERVICE_PASSWORD: Nacos@123456
      # MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
    volumes:
      - ./docker_nacos/standalone-logs/:/home/nacos/logs
    ports:
      - "8848:8848"
    networks:
      - myapp
  sentinel: #熔断限流(官方镜像)
    image: bladex/sentinel-dashboard
    container_name: sentinel-nacos
    restart: always
    depends_on:
      - nacos
    environment:
      NACOS_SERVER_ADDR: nacos:8848
      NACOS_USERNAME: nacos
      NACOS_PASSWORD: nacos
      NACOS_NAMESPACE: public
      NACOS_GROUP_ID: SENTINEL_GROUP
    ports:
      - "8858:8858"
    networks:
      - myapp
  gateway: #网关(自制镜像)
    image: nacos-gateway
    container_name: nacos-gateway
    restart: always
    depends_on:
      - nacos
    ports:
      - "18890:18890"
    environment:
      - spring.cloud.nacos.discovery.server-addr=nacos:8848
      - spring.cloud.sentinel.transport.dashboard=sentinel:8858
    networks:
      - myapp
  authserver: #认证中心(自制镜像)
    image: nacos-authserver
    container_name: nacos-authserver
    restart: always
    depends_on:
      - nacos
    environment:
      - spring.datasource.url=jdbc:mysql://【mysql服务名】/oauth?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT
      - spring.cloud.nacos.discovery.server-addr=nacos:8848
      - spring.cloud.sentinel.transport.dashboard=sentinel:8858
      - JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true
    networks:
      - myapp

问题汇总

iptables No chain/target/match by that name

原因:centos7默认防火墙为firewalld,而不是iptables,而docker使用iptables来做端口映射,所以一旦将firewalld关闭,则会报错
解决:启动防火墙,并一定注意开放平台访问的端口

systemctl start firewalld.service
firewall-cmd --zone=public --add-port=[port]/tcp --permanent
firewall-cmd --reload

【mysql】docker-compose.yml修改mysql密码,重启后不生效

描述:修改后的密码无法连接mysql,但旧密码依然可以
问题:因为带有旧有登录信息的卷依然在
解决docker volume ls 找到旧卷,docker volume rm删除旧卷
注意!!!千万不要移除mysql容器重启,虽然密码生效了,但是删库,所有数据都没了

【redis】启动redis失败

查看映射到宿主机的日志redis.log

Warning: Could not create server TCP listening socket 10.XX.XX.XX:6379: bind: Cannot assign requested address
1:M 16 May 2024 06:53:18.313 # Failed listening on port 6379 (TCP), aborting.

问题:端口并未占用,但绑定具体ip地址失败,具体原因不清楚
解决:将配置文件中的bind [ip地址]改为bind 0.0.0.0后启动成功

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装配置docker-compose,可以按照以下步骤进行操作: 1. 首先,确保您的服务器上已经安装了Docker。Docker是一种容器化技术,可以帮助您轻松部署和管理应用程序。如果您还没有安装Docker,请根据您的操作系统进行安装。 2. 下载docker-compose二进制文件。您可以通过以下命令从Docker官方网站下载最新版本 #### 引用[.reference_title] - *1* [nginx-certbot:Nginx和certbot与docker-compose的样板配置](https://download.csdn.net/download/weixin_42156940/18370445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [zentao_docker-compose:通过docker-compose构建zentao](https://download.csdn.net/download/weixin_42131541/19060486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [DevOps、DevSecOps历程核心实践,交付流水线PPT](https://download.csdn.net/download/zoutuo/88220830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值