文章目录
前言
相信很多新手后端开发人员,在部署项目时,会遇到很多难题吧
本文采用Centos服务器,使用Docker技术实现前后端项目的部署
持续更新中.....
一、Docker是什么?
Docker 是一个开源的应用容器引擎,它允许开发者将他们的应用程序及其依赖打包进一个可移植的容器中,然后这个容器可以在任何支持 Docker 的 Linux 或 Windows 系统上运行。Docker 容器是轻量级、独立的,并且能够快速启动
二、CentOs yum源配置
通过执行这个命令,将CentOs的官方源替换为阿里云的镜像服务来获取软件包。以解决官方源可能存在的速度慢或者不可用的问题,因为国内的一些镜像站通常提供更快的下载速度。
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
三、docker安装
1.安装docker前的环境准备
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
使用yum 包管理器来安装三个软件包,并且在安装过程中自动确认所有提示(通过 -y 选项),无需用户交互。
yum-utils
:这是一个包含一组工具和插件的集合,用于扩展 YUM 的功能。
device-mapper-persistent-data
:这个软件包提供了一种方法来持久化存储设备映射器的状态信息。确保了即使系统重启后,设备映射器的状态也能被正确地恢复。
lvm2
:LVM2 (Logical Volume Manager 2) 是 Linux 下的一种高级磁盘管理技术,它允许用户更灵活地管理硬盘空间。
2.配置docker yum源
进入 vi /etc/docker/daemon.json 文件中,将下列配置放进去
如果没有这个文件,就自己创建一下
mkdir "目录名称" touch "文件名" 创建的时候名字要一致,不要自己辖取
{
"registry-mirrors" :
[
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}
3.docker安装
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.docker启动/重启/关闭/开机自启
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启Docker
systemctl restart docker
# 设置开机自启
systemctl enable docker
5.查看docker yum配置是否成功
docker info
若能看到,说明yum配置成功
6.docker卸载
如果安装失败,可能是系统中已经安装过docker了,或者是没有卸载干净。可以尝试一下先卸载,在重新安装
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
四、防火墙
1. 检查firewalld
状态
首先,确保firewalld
服务正在运行。你可以使用以下命令检查其状态:
sudo systemctl status firewalld
如果firewalld
没有运行,可以使用以下命令启动它并设置开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld
2. 开放3306端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
--zone=public
:指定区域为public
。你可以根据实际情况选择其他区域。--add-port=3306/tcp
:添加3306端口,协议为TCP。--permanent
:使规则永久生效,重启后仍然有效。
然后重新加载防火墙配置以应用更改:
sudo firewall-cmd --reload
3.查看所有规则
sudo firewall-cmd --list-all
五、常见应用的安装
1.MySQL安装
在安装mysql前,需要先创建一下目录
/root/mysql/data
/root/mysql/conf
/root/mysql/init
# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
-d:后台运行容器。
--name mysql:给容器指定一个名称 mysql。
-p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口。这样可以通过宿主机的 3306 端口访问容器内的 MySQL 服务。
-e TZ=Asia/Shanghai:设置环境变量 TZ 的值为 Asia/Shanghai,容器内的时区为中国上海时区。
-e MYSQL_ROOT_PASSWORD=123:设置 MySQL 的 root 用户密码为 123。
-v /root/mysql/data:/var/lib/mysql:挂载卷,将宿主机上的 /root/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录。MySQL 使用这个目录来存储数据文件。
-v /root/mysql/conf:/etc/mysql/conf.d:挂载卷,将宿主机上的 /root/mysql/conf 目录挂载到容器内的 /etc/mysql/conf.d 目录。这里可以放置自定义的 MySQL 配置文件。
-v /root/mysql/init:/docker-entrypoint-initdb.d:挂载卷,将宿主机上的 /root/mysql/init 目录挂载到容器内的 /docker-entrypoint-initdb.d 目录。MySQL 容器在首次启动时会执行此目录下的 SQL 脚本或 shell 脚本来初始化数据库。
mysql:这是要运行的 Docker 镜像名称。默认情况下,Docker 会从 Docker Hub 下载最新版本的官方 MySQL 镜像。若要指定版本,可以改写为mysql:版本号
2.nginx安装
使用前需要先创建一下目录:
/root/nginx/html
/root/nginx/nginx.conf 注意:nginx.conf是文件,不是目录(创建文件的方法是touch"文件名")
docker run -d \
--name nginx \
-p 80:80 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
nginx
-d:后台运行容器。
--name nginx:给容器指定名称 nginx。
-p 80:80:将宿主机的 80 端口映射到容器内的 80 端口。
-v /root/nginx/html:/usr/share/nginx/html:挂载卷,将宿主机上的 /root/nginx/html 目录挂载到容器内的 /usr/share/nginx/html 目录。这是 Nginx 默认存放静态文件(如 HTML 文件、图片等)的位置。
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:挂载卷,将宿主机上的 /root/nginx/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 文件。这是 Nginx 的主配置文件,允许你自定义 Nginx 的配置。
nginx:这是要运行的 Docker 镜像名称。默认情况下,Docker 会从 Docker Hub 下载最新版本的官方 Nginx 镜像。nginx:版本号 可以指定版本
后续前端项目只需要放入root/nginx/html文件夹中,即可运行
3.redis集群部署
注意:redis集群模式下,不仅使用标准端口6379,6380,6381,还需要额外端口号+10000,进行节点通信,确保16379,16380,16381所在节点都是开放的
docker run -d --name redis-node01 --net host -v redis-node01:/data redis:5.0.2 \
--cluster-enabled yes \
--cluster-config-file nodes-node-01.conf \
--cluster-announce-ip 服务器ip地址 \
--port 6379 \
--appendonly yes
docker run -d --name redis-node02 --net host -v redis-node02:/data redis:5.0.2 \
--cluster-enabled yes \
--cluster-config-file nodes-node-02.conf \
--cluster-announce-ip 服务器ip地址 \
--port 6380 \
--appendonly yes
docker run -d --name redis-node03 --net host -v redis-node03:/data redis:5.0.2 \
--cluster-enabled yes \
--cluster-config-file nodes-node-03.conf \
--cluster-announce-ip 服务器ip地址 \
--port 6381 \
--appendonly yes
--net host
: 使用主机的网络命名空间。-v redis-node01:/data
: 将Docker卷redis-node01
挂载到容器内的/data
目录。--cluster-enabled yes
: 启用Redis集群模式。--cluster-config-file nodes-node-01.conf
: 集群配置文件的路径。--cluster-announce-ip 124.70.208.223
: 公告给其他节点的IP地址。--port 6379
:redis监听的端口。--appendonly yes
: 启用AOF持久化
将ip地址与集群关联
#进入redis-node01容器进行操作
docker exec -it redis-node01 /bin/bash
redis-cli --cluster create 192.168.31.81:6379 192.168.31.81:6380 192.168.31.81:6381 --cluster-replicas 0
192.168.31.81:6379 192.168.31.81:6380 192.168.31.81:6381
:指定要加入集群的三个 Redis 节点的 IP 地址和端口号。--cluster-replicas 0
:指定每个主节点的副本数量为 0,即没有副本。
查看集信息
#进入redis编辑模式
redis-cli
#查询集群信息
127.0.0.1:6379> CLUSTER NODES
4f4fddc825e2387783fff9c972409b264e4df5d5 192.168.31.81:6381@16381 master -
0 1563956537241 3 connected 10923-16383
0616e00533a16e931f8dfb2e8844c35ca5721dc8 192.168.31.81:6380@16380 master -
0 1563956538243 2 connected 5461-10922
498b986e07731cead17ad1c62aa95dba6513c7b0 192.168.31.81:6379@16379
myself,master - 0 1563956537000 1 connected 0-5460
4.rocketmq部署
拉取镜像
#拉去镜像
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2
编辑配置文件
注意:配置文件所在路径应该与后面配置的路径一直
#创建broker.conf文件
vi /root/tanhua/rmq/rmqbroker/conf/broker.conf
brokerIP1=192.168.20.131
namesrvAddr=192.168.20.131:9876
brokerName=broker_tanhua
创建容器
#创建nameserver容器
docker create -p 9876:9876 --name rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v rmqserver-logs:/opt/logs \
-v rmqserver-store:/opt/store \
foxiswho/rocketmq:server-4.3.2
#创建broker容器
docker create -p 10911:10911 -p 10909:10909 --name rmqbroker \
-e" JAVA_OPTS=-Duser.home=/opt" \
-e" JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /root/tanhua/rmq/rmqbroker/conf/broker.conf:/etc/rocketmq/broker.conf \
-v rmqbroker-logs:/opt/logs \
-v rmqbroker-store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
启动容器
#启动容器
docker start rmqserver rmqbroker
安装RocketMq管理工具
#部署RocketMQ的管理工具
docker pull styletang/rocketmq-console-ng:1.0.0
启动管理工具
#创建并启动容器
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.20.131:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng:1.0.0
访问地址
http://192.168.20.131:8082/#/
5.mongoDB安装
#拉取镜像
docker pull mongo:4.0.3
#创建容器
docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:4.0.3
#启动容器
docker start mongodb
#进入容器
docker exec -it mongodb /bin/bash
#使用MongoDB客户端进行操作
mongo
show dbs #查询所有的数据库
五.jdk选型与安装(常用版本)
1.jdk8
# 拉取 openjdk:8-jdk-slim
docker pull openjdk:8-jdk-slim
# 拉取 openjdk:8-jre-buster
docker pull openjdk:8-jre-buster
# 拉取 openjdk:8-jdk
docker pull openjdk:8-jdk
2.jdk11
# 拉取 openjdk:11-jdk-slim
docker pull openjdk:11-jdk-slim
# 拉取 openjdk:11-jre-buster
docker pull openjdk:11-jre-buster
# 拉取 openjdk:11-jdk
docker pull openjdk:11-jdk
3.jdk17
# 拉取 openjdk:17-jdk-slim
docker pull openjdk:17-jdk-slim
# 拉取 openjdk:17-jre-buster
docker pull openjdk:17-jre-buster
# 拉取 openjdk:17-jdk
docker pull openjdk:17-jdk
1. jdk-slim
基于 Debian 的精简版(slim),包含完整的 JDK 8,包括编译工具和其他开发工具,相对较小,适合需要完整 JDK 8 功能但希望减少镜像大小的情况。
2. jre-buster
基于 Debian Buster,只包含 JRE 8,不包含编译工具和其他开发工具。比 slim
版本大一些,但仍然比较轻量级,适合只需要运行 Java 应用程序而不需要编译工具的情况。
3.jdk
基于 Debian 的标准版本,包含完整的 JDK 8,包括编译工具和其他开发工具,体积较大,包含了更多的工具和库,适合需要完整 JDK 8 功能且对镜像大小不太敏感的情况。
4.本地安装jdk
将本地下载好得一个jdk.tar文件上传至服务器
在服务器所在目录下,执行
docker load -i jdk.tar
六、jar包的部署
(1).将jar包上传至服务器
(2).构建Dockerfile文件
需要保证Dockerfile文件与所要运行的jar文件在同一目录下
touch Dockerfile
vi Dockerfile
在Dockerfile文件中,写入一下数据。jdk版本可自由更换,本地没有jdk镜像时,会自动拉取。建议先拉去jdk镜像,再构建项目镜像
# 基础镜像
FROM openjdk:8-jre-buster
#FROM openjdk:11.0-jre-buster
#FROM openjdk:17-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
(3)构建镜像
需要自己给要构建的镜像取一个名字
# 开始构建
docker build -t 镜像名称:版本号 .
-
docker build
: 构建一个docker镜像 -
-t
参数是指定镜像的名称和版本号,例如-t docker-demo:1.0
,镜像的名称为docker-demo,版本为1.0 -
.
: 最后的点是指构建时Dockerfile所在路径,.
代表当前目录
也可以直接指定Dockerfile文件所在目录
# 直接指定Dockerfile目录
docker build -t 镜像名称:版本号 /root/demo
(4).创建并运行容器
将自己构建的镜像,创建并允许容器
需要自己取一个容器名
镜像名和版本号,是上一步自己创建时取得名字和版本号
# 1.创建并运行容器
docker run -d --name 容器名 -p 8080:8080 镜像名称:版本号
(5)成果展示
查看日志
#查看日志
docker logs dd
#实时查看
docker logs -f dd
总结
tomcat redis roketmq 持续更新中....