以下是为 Ubuntu 24.04.1 定制的详细 Docker 教程,使用镜像加速,并包含 MySQL、Tomcat、Redis、RocketMQ、Nacos 的安装配置。
一、安装 Docker(阿里云镜像加速)
1. 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
2. 安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
3. 配置阿里云 Docker 镜像加速
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加阿里云 Docker 镜像源
sudo echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新源并安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
4. 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
5. 验证 Docker 安装
docker --version
若遭遇了权限拒绝的问题。
解决办法
方法一:使用 sudo
命令以 root
权限运行 Docker 命令
在执行 Docker 命令时,于命令前添加 sudo
,以 root
权限来运行:
sudo docker version
之后输入当前用户的密码,若密码正确,命令就会以 root
权限执行。
不过,每次执行 Docker 命令都使用 sudo
会稍显繁琐,并且存在一定的安全风险。所以,推荐采用下面的方法,将当前用户添加到 docker
用户组。
方法二:将当前用户添加到 docker
用户组
- 检查
docker
用户组是否存在
可以使用以下命令查看系统中是否存在docker
用户组:
cat /etc/group | grep docker
若存在 docker
用户组,会显示类似如下的信息:
docker:x:999:
- 创建
docker
用户组(若不存在)
若系统中不存在docker
用户组,可以使用以下命令创建:
sudo groupadd docker
- 将当前用户添加到
docker
用户组
使用以下命令将当前用户添加到docker
用户组:
sudo usermod -aG docker $USER
这里的 $USER
是当前用户的用户名。
- 更新用户组信息
为了让修改生效,你可以注销当前用户,然后重新登录。或者使用以下命令更新当前会话的用户组信息:
newgrp docker
- 验证修改是否生效
再次运行docker version
命令,查看是否还会出现权限拒绝的错误:
docker version
注意事项
- 把用户添加到
docker
用户组后,该用户就拥有了与root
相近的权限,因为 Docker 允许用户以特权模式运行容器。所以,要谨慎管理docker
用户组的成员。 - 若在执行上述操作后仍有问题,可能需要检查
/var/run/docker.sock
文件的权限设置,确保该文件的权限允许docker
用户组访问。可以使用以下命令查看和修改文件权限:
ls -l /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock
不过,将 /var/run/docker.sock
文件的权限设置为 666
会使所有用户都能访问该文件,存在一定的安全风险,仅在必要时使用。
二. 部署
1,配置镜像
# 依次执行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://dawk9aew.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 也可多配一点(用下面的替换上面的json即可)
{
"registry-mirrors": ["https://hub.atomgit.com/repos","https://docker.m.daocloud.io","https://dockerhub.timeweb.cloud","https://dawk9aew.mirror.aliyuncs.com"]
}
# 完成之后检查是否生效
docker info
以下是使用 Docker 部署和启动常见服务的 详细分步教程,涵盖 MySQL、Tomcat、Redis、Nacos 和 RocketMQ:
2. Docker 部署 MySQL
步骤 1:准备工作
避免后续出现权限问题,先切换用户到root
su root
#再输入密码
- 创建宿主机持久化目录:
mkdir -p /my/mysql/data /my/mysql/conf
- 创建自定义配置文件(可选):
echo "[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci" > /my/mysql/conf/my.cnf
步骤 2:启动 MySQL 容器
docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=your_secure_password \
-p 3306:3306 \
-v /my/mysql/data:/var/lib/mysql \
-v /my/mysql/conf:/etc/mysql/conf.d \
-d mysql:8.0 \
--default-authentication-plugin=mysql_native_password
若配置镜像不可用,可尝试切换上文提供的那些镜像站
步骤 3:验证部署
- 进入容器并连接 MySQL:
docker exec -it mysql mysql -uroot -p
- 输入密码后,执行
SHOW DATABASES;
确认正常运行。
注意事项
- 若需调整时区,添加
-e TZ=Asia/Shanghai
。 - 生产环境建议限制容器资源(如
--memory=2g
)。
3. Docker 部署 Tomcat
步骤 1:创建宿主机目录
mkdir -p /my/tomcat/webapps
步骤 2:启动 Tomcat 容器
docker run --name tomcat \
-p 8080:8080 \
-v /my/tomcat/webapps:/usr/local/tomcat/webapps \
-d tomcat:9.0
步骤 3:部署应用
- 将 WAR 包复制到
/my/tomcat/webapps
:cp myapp.war /my/tomcat/webapps/
- 访问
http://宿主机IP:8080/myapp
验证应用。
调试技巧
- 查看日志:
docker logs -f tomcat
- 若访问 404,检查 WAR 文件名是否与上下文路径匹配。
4. Docker 部署 Redis
步骤 1:准备配置文件和目录
- 创建目录和配置文件:
mkdir -p /my/redis/data vi /my/redis/redis.conf
# redis.conf 基础配置 requirepass your_redis_password appendonly yes
步骤 2:启动 Redis 容器
docker run --name redis \
-p 6379:6379 \
-v /my/redis/data:/data \
-v /my/redis/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis:6.0 \
redis-server /usr/local/etc/redis/redis.conf
步骤 3:测试连接
docker exec -it redis redis-cli
127.0.0.1:6379> AUTH your_redis_password
127.0.0.1:6379> SET test "hello"
127.0.0.1:6379> GET test
5. Docker 部署 Nacos
步骤 1:准备 MySQL 数据库
- 在 MySQL 中创建数据库
nacos
:CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4;
- 执行 Nacos 初始化 SQL 脚本。
步骤 2:启动 Nacos 容器
docker run --name nacos \
-e MODE=standalone \
-e MYSQL_SERVICE_HOST=宿主机IP \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=your_mysql_password \
-p 8848:8848 \
-d nacos/nacos-server:2.0.3
步骤 3:访问控制台
- 浏览器访问
http://宿主机IP:8848/nacos
。 - 默认账号:
nacos
,密码:nacos
。
常见问题
- 若无法连接 MySQL,检查宿主机防火墙是否开放 3306 端口。
- 查看日志:
docker logs -f nacos
6. Docker 部署 RocketMQ
6.1 部署 NameServer
docker run -d \
--name rmqnamesrv \
-p 9876:9876 \
-v /my/rocketmq/logs:/root/logs \
apache/rocketmq:4.9.4 \
sh mqnamesrv
6.2 部署 Broker
-
创建配置目录和文件:
mkdir -p /my/rocketmq/conf /my/rocketmq/store vi /my/rocketmq/conf/broker.conf
brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH
-
启动 Broker:
docker run -d \ --name rmqbroker \ --link rmqnamesrv:namesrv \ -p 10911:10911 -p 10909:10909 \ -v /my/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf \ -v /my/rocketmq/store:/opt/store \ -e "NAMESRV_ADDR=namesrv:9876" \ apache/rocketmq:4.9.4 \ sh mqbroker -c /opt/rocketmq/conf/broker.conf
6.3 验证 RocketMQ
- 进入容器测试消息发送:
docker exec -it rmqbroker bash sh tools.sh org.apache.rocketmq.example.quickstart.Producer
- 查看日志:
docker logs -f rmqnamesrv docker logs -f rmqbroker
通用优化建议
- 容器网络:创建自定义网络提升多容器通信效率:
docker network create mynet docker run --network mynet --name mysql -d ...
- 资源限制:添加
--memory=2g --cpus=1
防止单个容器占用过多资源。 - 数据备份:定期备份挂载的宿主机目录(如
/my/mysql/data
)。 - 日志管理:使用
docker logs
或 ELK 收集容器日志。
按照以上步骤,您将能快速完成服务的部署与验证。遇到问题时,优先检查容器日志和网络配置。
三、验证服务
1. MySQL
docker exec -it mysql mysql -uroot -p # 输入密码 root@123
2. Redis
docker exec -it redis redis-cli -a redis@123
3. Tomcat
访问 http://<服务器IP>:8080
,看到 Tomcat 默认页面即成功。
4. Nacos
访问 http://<服务器IP>:8848/nacos
,默认账号密码为 nacos/nacos
。
5. RocketMQ
- 检查 Namesrv 日志:
docker logs rocketmq-namesrv
- 检查 Broker 日志:
docker logs rocketmq-broker
四,注意事项
- 阿里云镜像加速:已在 Docker 安装步骤中配置,后续拉取镜像默认使用阿里云源。
- 密码安全:示例中密码为简单示例,生产环境需替换为复杂密码。
- 版本兼容性:
- Nacos 2.3.0 需要 MySQL 8.0+。
- RocketMQ 5.x 默认使用 JDK 17,与 Tomcat/Maven 镜像版本对齐。
- 数据备份:通过
volumes
持久化数据,确保容器重启后数据不丢失。 - 防火墙:确保云服务器安全组开放端口(3306、6379、8080、9876、8848 等)。
五,docker基础命令
1. 镜像管理
-
拉取镜像
docker pull [镜像名]:[标签] # 默认标签为 latest docker pull nginx:alpine
-
构建镜像
docker build -t [镜像名]:[标签] [Dockerfile目录] docker build -t myapp:v1 .
-
列出本地镜像
docker images
-
删除镜像
docker rmi [镜像ID或名称]
2. 容器管理
-
运行容器
docker run [选项] [镜像名] docker run -d --name mynginx -p 80:80 nginx # -d: 后台运行,-p: 端口映射
-
列出容器
docker ps # 查看运行中的容器 docker ps -a # 查看所有容器(包括已停止的)
-
启动/停止容器
docker start [容器ID或名称] docker stop [容器ID或名称] docker restart [容器ID或名称]
-
进入容器终端
docker exec -it [容器ID或名称] /bin/bash # 进入交互式终端
-
查看容器日志
docker logs [容器ID或名称] docker logs -f [容器ID或名称] # 实时跟踪日志
-
删除容器
docker rm [容器ID或名称] docker rm -f [容器ID或名称] # 强制删除运行中的容器
3. 网络管理
-
列出网络
docker network ls
-
创建自定义网络
docker network create [网络名]
-
将容器连接到网络
docker network connect [网络名] [容器名]
4. 数据卷管理
-
创建数据卷
docker volume create [卷名]
-
挂载数据卷到容器
docker run -v [卷名]:[容器内路径] [镜像名] docker run -v mydata:/app/data myapp
-
查看数据卷
docker volume ls
5. 系统清理
-
删除所有停止的容器
docker container prune
-
删除未使用的镜像、卷、网络
docker system prune -a # 谨慎使用,会清理无用资源!
6. 其他常用命令
-
查看容器详情
docker inspect [容器ID或名称]
-
复制文件到容器
docker cp [本地文件路径] [容器ID]:[容器内路径] docker cp ./config.json mynginx:/etc/nginx/
-
查看 Docker 版本
docker --version
注意事项
- 使用
-it
参数进入交互式终端(如docker exec -it
)。 - 生产环境避免使用
--privileged
(赋予容器过高权限)。 - 使用
docker-compose
管理多容器应用更高效。