docker部署项目
使用Docker部署项目可以实现快速、一致和可重复的部署流程。通过Docker容器化应用,可以将应用、运行时环境和依赖项打包成一个独立的容器,简化了部署过程,提高了开发和运维效率,同时保证了跨不同环境的一致性。
1,安装docker
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速
这里以阿里云镜像加速为例。
5.1.注册阿里云账号
首先访问阿里云网站:
https://www.aliyun.com/
注册一个账号。
5.2.开通镜像服务
在首页的产品中,找到阿里云的容器镜像服务:
点击后进入控制台:
首次可能需要选择立刻开通,然后进入控制台。
5.3.配置镜像加速
找到镜像工具下的镜像加速器:
页面向下滚动,即可找到配置的文档说明:
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
到这docker就安装完毕了,接下去就可以开始准备部署项目
创建部署项目的目录结构
先在本地创建好部署项目的目录,到时候,直接将这个docker目录上传至云服务器,即可进行部署。
- backend:放后端即将部署的xxx.jar包和构建后端项目镜像的dockerfile文件
- frontend:放前端项目和nginx的配置文件nginx.conf
- mysql:放构建mysql镜像的dockerfile文件
2,构建docker镜像
构建Mysql镜像的Dockerfile
ADD ./init/*.sql /docker-entrypoint-initdb.d/:是将 ./init/ 目录下的所有 .sql 文件添加到 Docker 镜像中的 /docker-entrypoint-initdb.d/ 目录中。这样,在容器启动时,数据库容器会执行这些 SQL 脚本,用于初始化数据库的结构、表和数据等内容。
所以如果你可以将要初始化的sql文件放入到mysql目录下init文件夹下
# 基础镜像
FROM mysql:5.7
# 执行sql脚本
ADD ./init/*.sql /docker-entrypoint-initdb.d/
构建后端镜像
IDEA打包后端项目
通过Dockerfile构建后端jar镜像
后端镜像:springbootr2ork-0.0.1-SNAPSHOT.jar
将springbootr2ork-0.0.1-SNAPSHOT.jar 和 下面这个Dockerfile放到backend目录下
Dockerfile文件内容如下:
# 基础镜像
FROM java:8
#指定工作目录
WORKDIR /app
# 将jar包添加到工作目录
ADD ./springbootr2ork-0.0.1-SNAPSHOT.jar /app
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java","-jar","/app/springbootr2ork-0.0.1-SNAPSHOT.jar"]
构建前端镜像
打包前端项目
Node.js包管理工具npm进行打包
npm run build #打包命令
编写nginx配置文件
配置文件中的root /usr/share/nginx/html1/dist;
指定前段项目文件的所在目录(即将上个步骤打包的dist文件放到/html1/dist目录下)
若有多个server则需要在配置文件中配置多个server块,一个server块表示一个前端项目
proxy_pass:配置反向代理的服务器地址
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://yiliao-gateway:51601;
} 在这个例子中,当客户端访问 http://xxxx:8081/api时,Nginx 会将请求代理到 http://yiliao-gatewya:51601的服务器。即Nginx 会将这些请求转发给另一个服务器进行处理,然后将处理结果返回给客户端。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/json;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
# 指定前端项目所在的位置
location / {
root /usr/share/nginx/html1/dist; #dist包存放的路径
index index.html index.htm;
try_files $uri $uri/ /index.html; # 解决刷新后404
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://yiliao-gateway:51601;
}
}
server {
listen 8082;
# 指定前端项目所在的位置
location / {
root /usr/share/nginx/html2/dist; #dist包存放的路径
index index.html index.htm;
try_files $uri $uri/ /index.html; # 解决刷新后404
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3,docker-compose编排部署项目
编排部署mysql
编写docker-compose-base.yml 部署 基础组件Mysql,如果要使docker容器能互相访问则需指定相同网络通过networks指定相同一个网络
networks:
- lkw-net
networks:
lkw-net:
name: lkw
docker-compose-base.yml文件内容如下:
version: "3"
services:
mysql:
image: mysql:5.7
container_name: mysql
build:
context: ./mysql
ports:
- "3306:3306"
privileged: true
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- lkw-net
networks:
lkw-net:
name: lkw
编排部署前端和后端
由于通过nginx配置了两个前端项目,所以需要通过ports映射两个端口8081和8082,volumes需要配置挂载两个项目所在存放的目录
docker-compose-service.yml文件内容如下:
volumes:
- “/images/user:/images/user” # 挂载图片保存路径
将前面一个是云服务器的目录,后一个是docker容器内部的目录,就是将docker的/images/user目录挂载到云服务器的/images/user目录下。
version: "3"
services:
frontend:
image: nginx
container_name: frontend
ports:
- "8081:8081"
- "8082:8082"
volumes:
- "./frontend/nginx.conf:/etc/nginx/nginx.conf"
- "./frontend/html1/dist:/usr/share/nginx/html1/dist"
- "./frontend/html2/dist:/usr/share/nginx/html2/dist"
networks:
- lkw-net
backend:
container_name: backend
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "8080:8080"
volumes:
- "/images/user:/images/user" # 挂载图片保存路径
networks:
- lkw-net
networks:
lkw-net:
name: lkw
4,部署
上传文件到云服务器
将整个docker目录通过xshell+xftp上传至云服务器
部署
部署mysql容器
docker compose -f docker-compose-base.yml up -d
部署后,通过navicat测试连接,连接成功后,即可部署前端和后端容器
docker compose -f docker-compose-service.yml up -d
查看容器状态,容器的status都为up状态则为成功
docker ps -a
即可通过ip:前端端口
访问部署的项目。若访问失败,云服务器并没有放开服务对应的端口号。
附:阿里云服务器开放端口
更多推荐
所有评论(0)