docker关闭mysql端口映射的使用方式
作者:咸鱼翻身不还是咸鱼吗
这篇文章主要介绍了docker关闭mysql端口映射的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
需求
项目中的数据库为mysql,如果将端口映射到宿主机上,容易被工具扫描出,且随着国产化的进程推进,mysql将不被允许。
为了提高安全性与满足项目需求,这里采用隐藏mysql端口方式,不映射宿主机端口,仅允许docker容器间访问。
系统部署说明
环境:
- Centos 7
- Docker version 24.0.6
- Docker Compose version v2.16.0
新增docker网络
由于我们需要新建指定ip的容器,docker默认网络是随机分配ip,无法实现需求。
新建网络步骤如下
# 查看docker网卡 docker network ls # 查看具体信息,通常默认网卡为bridge docker network inspect <网卡id> /<网卡NAME> docker network inspect bridge # 创建网络,注意,不要和上面已经存在的网段相同 docker network create --subnet=172.18.0.0/16 myself_network
报错处理:
Error response from daemon: Pool overlaps with other one on this address space
说明172.18
网段已经被使用,需要修改一个网段,比如172.36
,注意后续容器中使用的所有网段需要同步修改。
数据库部署
创建/sdb/db/data目录,并下载初始化数据库脚本test.sql
,进入目录,将初始化脚本放在/sdb/db/data目录下。
PS:将数据库.sql文件映射到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目录下,在容器首次启动时,文件会自动执行,重启容器将不再执行当前脚本。
方法一:docker run方式启动容器
直接在/sdb/db/data目录下执行以下docker run命令,启动容器,并初始化test.sql脚本。
# 使用以上创建的网络,给容器指定一个ip docker run --name datacenter-mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai --network myself_network -v /sdb/db/data/test.sql:/docker-entrypoint-initdb.d/test.sql -v /sdb/db/data:/var/lib/mysql --ip 172.18.0.136 -d mysql:8.0.27 --default-authentication-plugin=mysql_native_password --lower-case-table-names=1 # 查看容器ip docker inspect datacenter-mysql|grep IPAddress
方法二:docker-compose方式启动
在/sdb/db/data目录下创建docker-compose.yml文件,内容如下
version: '3' # 这里需要指定使用以上创建的网络,否则会报错 networks: myself_network: external: true services: mysql-test: image: mysql:8.0.27 container_name: datacenter-mysql environment: - MYSQL_ROOT_PASSWORD=123456 - TZ=Asia/Shanghai volumes: - /sdb/db/data/test.sql:/docker-entrypoint-initdb.d/test.sql - /sdb/db/data:/var/lib/mysql command: - --default-authentication-plugin=mysql_native_password - --lower-case-table-names=1 networks: my_custom_network: ipv4_address: 172.18.0.136 restart: always
启动容器
docker-compose up -d
服务部署说明
配置完数据库固定ip,我们可以在服务中使用,启动容器的环境变量或配置文件都可以,docker-compose文件大致如下,具体不细展开。
version: '3.7' networks: myself_network: external: true services: web: image: "web:1.0" # 容器名 container_name: "test-web" restart: always ports: - "80:80" networks: myself_network: # 注意:这个地址网段需要与数据库一致 ipv4_address: 172.18.0.3 # 启动数据中台Java服务端容器 api: image: "api:1.0" # 容器名 container_name: "test-api" restart: always ports: - "8080:8080" environment: # 这里可以设置环境变量,使用以上配置的mysql数据库ip端口 DB_JDBC_URL: jdbc:mysql://127.18.0.136:3306/test DB_USERNAME: root DB_PASSWORD: 123456 networks: myself_network: # 注意:这个地址网段需要与数据库一致 ipv4_address: 172.18.0.4
启动服务
docker-compose up -d
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。