docker關(guān)閉mysql端口映射的使用方式
需求
項(xiàng)目中的數(shù)據(jù)庫(kù)為mysql,如果將端口映射到宿主機(jī)上,容易被工具掃描出,且隨著國(guó)產(chǎn)化的進(jìn)程推進(jìn),mysql將不被允許。
為了提高安全性與滿(mǎn)足項(xiàng)目需求,這里采用隱藏mysql端口方式,不映射宿主機(jī)端口,僅允許docker容器間訪問(wèn)。
系統(tǒng)部署說(shuō)明
環(huán)境:
- Centos 7
- Docker version 24.0.6
- Docker Compose version v2.16.0
新增docker網(wǎng)絡(luò)
由于我們需要新建指定ip的容器,docker默認(rèn)網(wǎng)絡(luò)是隨機(jī)分配ip,無(wú)法實(shí)現(xiàn)需求。
新建網(wǎng)絡(luò)步驟如下
# 查看docker網(wǎng)卡 docker network ls # 查看具體信息,通常默認(rèn)網(wǎng)卡為bridge docker network inspect <網(wǎng)卡id> /<網(wǎng)卡NAME> docker network inspect bridge # 創(chuàng)建網(wǎng)絡(luò),注意,不要和上面已經(jīng)存在的網(wǎng)段相同 docker network create --subnet=172.18.0.0/16 myself_network
報(bào)錯(cuò)處理:
Error response from daemon: Pool overlaps with other one on this address space
說(shuō)明172.18網(wǎng)段已經(jīng)被使用,需要修改一個(gè)網(wǎng)段,比如172.36,注意后續(xù)容器中使用的所有網(wǎng)段需要同步修改。
數(shù)據(jù)庫(kù)部署
創(chuàng)建/sdb/db/data目錄,并下載初始化數(shù)據(jù)庫(kù)腳本test.sql,進(jìn)入目錄,將初始化腳本放在/sdb/db/data目錄下。
PS:將數(shù)據(jù)庫(kù).sql文件映射到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目錄下,在容器首次啟動(dòng)時(shí),文件會(huì)自動(dòng)執(zhí)行,重啟容器將不再執(zhí)行當(dāng)前腳本。
方法一:docker run方式啟動(dòng)容器
直接在/sdb/db/data目錄下執(zhí)行以下docker run命令,啟動(dòng)容器,并初始化test.sql腳本。
# 使用以上創(chuàng)建的網(wǎng)絡(luò),給容器指定一個(gè)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方式啟動(dòng)
在/sdb/db/data目錄下創(chuàng)建docker-compose.yml文件,內(nèi)容如下
version: '3'
# 這里需要指定使用以上創(chuàng)建的網(wǎng)絡(luò),否則會(huì)報(bào)錯(cuò)
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啟動(dòng)容器
docker-compose up -d
服務(wù)部署說(shuō)明
配置完數(shù)據(jù)庫(kù)固定ip,我們可以在服務(wù)中使用,啟動(dòng)容器的環(huán)境變量或配置文件都可以,docker-compose文件大致如下,具體不細(xì)展開(kāi)。
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:
# 注意:這個(gè)地址網(wǎng)段需要與數(shù)據(jù)庫(kù)一致
ipv4_address: 172.18.0.3
# 啟動(dòng)數(shù)據(jù)中臺(tái)Java服務(wù)端容器
api:
image: "api:1.0"
# 容器名
container_name: "test-api"
restart: always
ports:
- "8080:8080"
environment:
# 這里可以設(shè)置環(huán)境變量,使用以上配置的mysql數(shù)據(jù)庫(kù)ip端口
DB_JDBC_URL: jdbc:mysql://127.18.0.136:3306/test
DB_USERNAME: root
DB_PASSWORD: 123456
networks:
myself_network:
# 注意:這個(gè)地址網(wǎng)段需要與數(shù)據(jù)庫(kù)一致
ipv4_address: 172.18.0.4啟動(dòng)服務(wù)
docker-compose up -d
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用phpstorm對(duì)docker中的腳本進(jìn)行debug的方法
這篇文章主要介紹了使用phpstorm對(duì)docker中的腳本進(jìn)行debug的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
docker容器間跨宿主機(jī)通信-基于overlay的實(shí)現(xiàn)方法
這篇文章主要介紹了docker容器間跨宿主機(jī)通信-基于overlay的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
使用Docker快速搭建Airflow+MySQL詳細(xì)步驟
本文詳細(xì)介紹了如何使用Docker和Docker Compose安裝并配置Apache Airflow 2.9.3,步驟包括創(chuàng)建項(xiàng)目目錄、編寫(xiě)docker-compose.yml文件、創(chuàng)建所需目錄結(jié)構(gòu)、啟動(dòng)和管理Docker容器,以及如何訪問(wèn)和配置Airflow Web UI,感興趣的朋友跟隨小編一起看看吧2024-09-09
.netcore 使用surging框架發(fā)布到docker
這篇文章主要介紹了netcore 使用surging框架發(fā)布到docker,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

