使用docker快速搭建测试环境

62 阅读5分钟

一、安装docker

docker官网安装步骤

已安装docker引擎的可跳过这一步

# 1、安装yum-utils软件包(提供yum-config-manager实用程序)并设置存储库
sudo yum install -y yum-utils
# 2、设置存储库,之后可以从存储库安装和更新Docker。(第一条指令是docker官方存储库,第二条指令是阿里云存储库,可根据需要自行选择)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3、下载docker引擎(该命令安装docker最新版,需要安装历史版本请参考官方网站)
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4、启动docker服务
sudo systemctl start docker

# 5、验证docker是否启动
systemctl status docker

# 6、查看docker版本
docker -v

二、创建桥接网络

# 创建桥接网络,用于后续docker容器间相互访问。
# 桥接网络名称为 my-net,用户可自定义该名称,后续docker创建容器时需要用到该名称
docker network create -d bridge my-net

# 该命令现在不用执行,用于容器创建后查看容器ip,不同容器间可通过容器ip相互访问
docker inspect 容器名称或容器id

三、安装redis

# 拉取redis镜像,不加版本号默认拉取最新版本redis,也可根据需要修改redis版本
docker pull redis:5.0.14

# 查看redis镜像是否拉取成功
docker images

# 创建启动redis容器
docker run --name redis -p 6379:6379 -v /opt/data/docker/redis:/data -d --network my-net redis:5.0.14 redis-server --save 60 1 --loglevel warning --requirepass PASSWORD

--name:指定容器名称
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
-v: 数据卷挂载,即宿主机目录挂载到容器目录,宿主机若目录不存在会自动生成
-d:后台运行容器,并返回容器ID(后面输入容器名称redis:5.0.14)
-- network:使用第二步创建的桥接网络,用于容器间的相互访问

redis-server(可根据自身需要新增或减少参数配置,也可以先创建完容器,再进入容器中设置以下参数)
--save:持久化参数,redis-server --save 60 1 -->在60秒之后,如果至少有1个key发生变化,则dump内存快照
--loglevel:log 等级分为4 级,debug, verbose, notice, 和warning。生产环境下一般开启notice
--requirepass:设置客户端连接后进行任何其他指定前需要使用的密码


# 进入redis容器内部
docker exec -it redis /bin/bash
# 进入redis
redis-cli
# 简单验证密码,执行该命令后显示OK就没问题
auth PASSWORD

四、安装mysql

# 拉取镜像
docker pull mysql:8.0.28
# 查看镜像是否拉取成功
docker images
# 启动mysql容器
docker run --name mysql --network my-net -p 3306:3306 -v /opt/data/docker/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:8.0.28

MYSQL_ROOT_PASSWORD:指定mysql的ROOT用户密码

# 进入mysql容器
docker exec -it mysql /bin/bash
# 登录mysql
mysql -uroot -p
# 输入指定的ROOT用户密码

登录成功即可

五、安装RocketMQ

# 拉取镜像
docker pull apache/rocketmq:4.9.3
# 查看镜像是否拉取成功
docker images

# 启动NameServer容器
docker run -d -v /opt/data/docker/rocketmq/namesrv/logs:/home/rocketmq/logs --name rmqnamesrv --network my-net -p 9876:9876 apache/rocketmq:4.9.3 sh mqnamesrv

# 查看日志是否启动成功
docker logs rmqnamesrv


# 启动Broker容器
docker run -d -v /opt/data/docker/rocketmq/broker/logs:/home/rocketmq-4.9.3/logs -v /opt/data/docker/rocketmq/broker/store:/home/rocketmq-4.9.3/store --name rmqbroker --network my-net --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10909:10909 -p 10911:10911 -p 10912:10912 apache/rocketmq:4.9.3 sh mqbroker

NAMESRV_ADDR:指定NameServer地址

# 查看日志是否启动成功
docker logs rmqbroker

六、部署后端应用

# 使用 docker inspect 容器名称或容器id 命令查看mysql、redis、MQ等容器IP,将项目中的mysql、redis、MQ等链接地址的IP替换为容器IP,容器间即可相互访问

# 使用maven-package指令将项目打成jar包
将新jar包上传至 /opt/data/docker/app-biz 目录下

# 运行业务容器,部分参数可根据服务器配置以及实际场景自行调整
docker run -d -p 8080:8080 -v /opt/data/docker/app-biz:/usr/local/app-biz -v /opt/data/docker/app-biz/logs:/home/admin/logs/ --name app-biz --network my-net openjdk:8 java -jar -Xms256m -Xmx512m -Xmn512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8 -Xss512k -Dspring.profiles.active=commerce-local -Dserver.port=8080 /usr/local/app-biz/app-biz.jar

# 查看日志,确认应用启动成功
docker logs -f app-biz


# 重新部署应用
停止容器:docker stop app-biz
删除容器:docker rm app-biz
确认容器删除:docker ps -a(确认列表中没有app-biz)
将新jar包上传至 /opt/data/docker/app-biz 目录下
重新运行业务容器,查看日志,确认应用启动成功

七、安装Nginx

# 拉取nginx镜像
docker pull nginx:1.21.6

# 将Nginx 配置文件放到指定挂载目录  /opt/data/docker/nginx/nginx.conf

# 启动nginx容器
docker run --name nginx --network my-net -p 80:80 -v /opt/data/docker/nginx/html:/usr/share/nginx/html:ro -v /opt/data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.21.6

挂载数据卷 ro 模式:指定这个数据卷为只读。
这会将主机上的目录挂载到容器内的目录,但容器内的数据卷只能读取,不能向其写入文件。 另外,ro 的反义词是 rw,表示读写(read-write)。rw是默认的访问模式,如果不指定就是读写,所以可以不用显式写出来。

# 验证nginx是否启动成功
curl localhost:80

八、部署前端应用

前端工程师将项目打包,将压缩包上传到服务器,将压缩包解压到nginx容器挂载的html目录上(/opt/data/docker/nginx/html)