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