您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。