# CentOS7中Docker MySQL Tomcat常用操作的示例分析
## 一、環境準備與安裝
### 1.1 Docker環境安裝
```bash
# 卸載舊版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安裝必要工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 設置穩定版倉庫
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安裝Docker CE
sudo yum install docker-ce docker-ce-cli containerd.io
# 啟動Docker并設置開機自啟
sudo systemctl start docker
sudo systemctl enable docker
# 驗證安裝
docker --version
# 臨時關閉防火墻
systemctl stop firewalld
# 永久關閉防火墻
systemctl disable firewalld
# 查看SELinux狀態
getenforce
# 臨時關閉SELinux
setenforce 0
# 永久關閉(需重啟)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 拉取官方MySQL鏡像(以5.7版本為例)
docker pull mysql:5.7
# 運行MySQL容器
docker run -d \
--name mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
參數說明:
- -d
: 后臺運行
- --name
: 容器名稱
- -p
: 端口映射(主機端口:容器端口)
- -e
: 環境變量(設置root密碼)
- -v
: 數據卷掛載(配置文件和數據持久化)
# 進入容器內部
docker exec -it mysql57 bash
# 登錄MySQL
mysql -uroot -p
# 查看容器日志
docker logs -f mysql57
# 停止/啟動容器
docker stop mysql57
docker start mysql57
# 備份數據庫(主機上執行)
docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /backup/all-databases.sql
問題1:字符集設置不生效
解決方案:在掛載的配置目錄中創建my.cnf
文件:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
問題2:數據卷權限問題
# 查看容器用戶
docker exec mysql57 id
# 修改宿主機目錄權限
chown -R 999:999 /data/mysql/data
# 拉取官方Tomcat鏡像(以8.5版本為例)
docker pull tomcat:8.5-jdk8
# 運行Tomcat容器
docker run -d \
--name tomcat8 \
-p 8080:8080 \
-v /data/tomcat/webapps:/usr/local/tomcat/webapps \
-v /data/tomcat/logs:/usr/local/tomcat/logs \
tomcat:8.5-jdk8
方式1:直接掛載WAR包
# 將war包放入掛載目錄
cp project.war /data/tomcat/webapps/
# 自動解壓部署(可能需要重啟容器)
docker restart tomcat8
方式2:使用Dockerfile定制鏡像
FROM tomcat:8.5-jdk8
COPY target/project.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
構建并運行:
docker build -t my-tomcat .
docker run -d -p 8080:8080 --name myapp my-tomcat
# 查看實時日志
docker logs -f tomcat8
# 進入容器調試
docker exec -it tomcat8 bash
tail -f /usr/local/tomcat/logs/catalina.out
# 分析內存使用
docker stats tomcat8
# 創建bridge網絡
docker network create mynet
# 查看網絡列表
docker network ls
# 重新運行MySQL容器加入網絡
docker run -d \
--name mysql57 \
--network mynet \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
# 運行Tomcat容器加入同一網絡
docker run -d \
--name tomcat8 \
--network mynet \
-p 8080:8080 \
tomcat:8.5-jdk8
此時在Tomcat容器中可以直接通過mysql57
主機名訪問MySQL:
# JDBC連接配置示例
jdbc.url=jdbc:mysql://mysql57:3306/dbname
# 下載最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 驗證安裝
docker-compose --version
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql57
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: appdb
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
networks:
- mynet
tomcat:
image: tomcat:8.5-jdk8
container_name: tomcat8
depends_on:
- mysql
volumes:
- /data/tomcat/webapps:/usr/local/tomcat/webapps
- /data/tomcat/logs:/usr/local/tomcat/logs
ports:
- "8080:8080"
networks:
- mynet
networks:
mynet:
driver: bridge
# 啟動服務
docker-compose up -d
# 查看服務狀態
docker-compose ps
# 停止服務
docker-compose down
# 查看日志
docker-compose logs -f tomcat
# 運行容器時限制資源
docker run -d \
--name mysql57 \
--memory="2g" \
--cpus="1.5" \
mysql:5.7
# 查看容器實時資源占用
docker stats
# 使用cAdvisor監控
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8081:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
訪問 http://服務器IP:8081
查看監控儀表盤
MySQL安全配置:
Tomcat安全配置:
Docker安全實踐: “`bash
docker run –privileged=false …
# 使用非root用戶運行容器 docker run -u 1000 … “`
問題現象 | 可能原因 | 解決方案 |
---|---|---|
MySQL容器啟動失敗 | 數據目錄權限問題 | chown -R 999:999 /data/mysql |
Tomcat訪問404 | webapps目錄為空 | 檢查掛載目錄或部署WAR包 |
容器互聯失敗 | 不在同一網絡 | 使用--network 指定相同網絡 |
性能突然下降 | 資源不足 | 使用docker stats 檢查資源占用 |
本文詳細介紹了在CentOS7環境下使用Docker管理MySQL和Tomcat的完整實踐方案,包括:
通過容器化部署,我們實現了: - 環境隔離與快速部署 - 版本控制與回滾能力 - 資源利用率提升 - 標準化運維流程
建議在實際生產環境中結合CI/CD管道實現自動化部署,并定期備份重要數據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。