docker 常用 compose 整理

本文档详细记录了如何使用Docker Compose配置MySQL、Redis和Nginx服务。在MySQL配置中,强调了版本兼容性、数据持久化、网络设置以及解决Windows到Linux迁移时的中文乱码问题。Redis配置包括了端口映射、数据持久化和命令行参数。Nginx配置涉及端口暴露、网络IP设定和配置文件挂载。这些配置有助于容器间的稳定通讯和数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

        对于docker常用的compose经常是随用随写,但是时间长了总会忘记,在此记录下,以便后期翻看


一、mysql

代码如下(示例):


version: "3.0"		# 切记版本号不要高于4.0,这里指的是compose的版本号
services:
        mysql:
                image: mysql:8.0.26
                container_name: mysql           # container name
                ports:
                        - "3307:3306"           # external port 3307
                volumes:
                        - /home/docker/mysql/data:/var/lib/mysql        # 数据存放在/home/docker/mysql/data
                        - /home/docker/mysql/conf.d:/etc/mysql/conf.d   # custom config
                        - /home/docker/mysql/log:/var/log/mysql         # log
                environment:
                        -  MYSQL_ROOT_PASSWORD=root             # init pwd
                        -  TZ=GMT%2B8
                
                restart: always		# docker重启时,容器自动重启

                networks:			# mysql服务一般都要做一个固定的容器IP,便于后期容器间进行通讯
                        default:	# 此default并不是 默认 的意思,下面有声明的
                                ipv4_address: 181.18.0.6	
                privileged: true	# 为此容器开启root权限,防止出现一些权限问题
                command:
                        --default-authentication-plugin=mysql_native_password    # 这个参数尽量加上,防止因为使用的mysql版本过高而导致密码加密的方式改变,进而会造成在认证时不通过
                        --character-set-server=utf8mb4
                        --collation-server=utf8mb4_general_ci
                        --explicit_defaults_for_timestamp=true
                        --lower_case_table_names=1		#  表名统一不区分大小写




networks:			# 使用的network都要进行声明
        default:
                external:
                        name: zsnet		# zsnet是我自定义的网段

        当我们在进行将windows下的数据迁移到linux下,可能会出现中文乱码的问题,此时可以通过在mysq的命令行以 show variables like “%char%” 查看是否是编码不统一造成的,如果是因为编码不统一造成的,可以直接将以下配置添加到mysql的配置当中去,将这段配置放在/conf.d/docker.cnf

[mysqld]
skip-host-cache
skip-name-resolve

[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[mysqld_safe]
default-character-set = utf8

[client]
default-character-set = utf8

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

二、redis

代码如下(示例):下面字段的意思在mysql差不多都解释了,在此不在进行解释

version: "3.0"
services:
        redis:
                image: redis:6.2.5-alpine
                ports:
                        - "6380:6379"			# 改成你需要映射出去的端口,我这里被占用了,所以使用了6380
                restart: always
                container_name: redis2
                command: redis-server --appendonly yes		# 如果不做集群,此命令就要添加上
                networks:
                        default:
                                ipv4_address: 181.18.0.2
                volumes:
                        - /home/docker/redis/data:/data
                        - /home/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
                        - /home/docker/redis/logs:/logs



networks:
        default:
                external:
                        name: zsnet

三、 nginx

代码如下(示例):

version: "3.0"
services:
  nginx:
    restart: always
    image: nginx:stable-alpine-perl
    container_name: nginx
    ports:
      - 81:80
    networks:
      default:
        ipv4_address: 181.18.0.3
    volumes:
      - /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /home/docker/nginx/html:/usr/share/nginx/html
      - /home/docker/nginx/logs:/var/log/nginx



networks:
  default:
    external:
      name: zsnet

总结

加油噢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值