使用Docker部署前后端分離項目的完整步驟
引言
使用若依項目來部署演示,代碼地址:RuoYi-Vue
首先在本地啟動若依項目,確保本地可以成功啟動:

部署需要用到的鏡像匯總:
(1)Redis鏡像
(2)MySQL鏡像
(3)后端工程自定義鏡像
(4)Nginx鏡像
鏡像:
[root@zy-host home]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-admin latest 9c91f33418ce 3 hours ago 807MB nginx latest 605c77e624dd 12 months ago 141MB redis latest 7614ae9453d1 12 months ago 113MB mysql latest 3218b38490ce 12 months ago 516MB java 8 d23bdf5b1b1b 5 years ago 643MB
容器:
[root@zy-host home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5cc7296c0ae7 ruoyi-admin "sh -c 'java $JAVA_O…" 3 hours ago Up 3 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp ruoyi-admin fb5135730d4f nginx "/docker-entrypoint.…" 4 hours ago Up 39 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp zy_nginx 62aede427243 mysql "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp zy_mysql 35ca274f4ec8 redis "docker-entrypoint.s…" 15 hours ago Up 15 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp zy_redis
下面介紹部署過程:
1. Redis部署
(1)搜索Redis鏡像
[root@zy-host home]# docker search redis
(2)拉取Redis鏡像
[root@zy-host home]# docker pull redis [root@zy-host home]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 7614ae9453d1 12 months ago 113MB
(3)創(chuàng)建Redis容器
[root@zy-host home]# docker run -d -p 6379:6379 --name zy_redis redis 35ca274f4ec8c3d2d1d4bb97c975cbd4a0bc95c943df2cfa2c3e17d997d1941b
2. MySQL部署
(1)拉取MySQL鏡像、
[root@zy-host ~]# docker pull mysql
(2)查看鏡像
[root@zy-host ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 7614ae9453d1 12 months ago 113MB mysql latest 3218b38490ce 12 months ago 516MB
(3)啟動MySQL容器
[root@zy-host ~]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name zy_mysql mysql
(4)使用本地Navicat測試連接

(5)導入sql文件
新建數(shù)據(jù)庫 ry_vue,導入項目所需的sql文件


3. 后端部署
(1)創(chuàng)建工作目錄
在云服務器的 /home 下創(chuàng)建 ruoyi 目錄,作為工作目錄:
[root@zy-host home]# mkdir ruoyi [root@zy-host home]# ls copy.txt docker mysql ruoyi test tomcat
(2)修改配置文件
修改 application 配置文件中 MySQL 數(shù)據(jù)庫和 Redis 數(shù)據(jù)庫地址為云服務器地址:


(3)本地后端項目打包
在本地環(huán)境下,使用maven的 package 命令對后端項目打包(jar包):


(4)編寫 Dockerfile 文件
FROM java:8 VOLUME /tmp ADD *.jar /app.jar EXPOSE 8080 RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
(5)上傳jar包和Dockerfile
將本地打好的jar包和Dockerfile文件上傳至云服務器的 /home/ruoyi 目錄下:

(6)創(chuàng)建鏡像
使用編寫的 Dockerfile 創(chuàng)建后臺項目的鏡像:
[root@zy-host ruoyi]# docker build -t ruoyi-admin . Sending build context to Docker daemon 81.83MB Step 1/5 : FROM java:8 ---> d23bdf5b1b1b Step 2/5 : ADD *.jar /app.jar ---> 1acfeec0802e Step 3/5 : CMD ["--server.port=8080"] ---> Running in 46fa3ac5952d Removing intermediate container 46fa3ac5952d ---> 3fe6fec239b7 Step 4/5 : EXPOSE 8080 ---> Running in 16b39dba98ec Removing intermediate container 16b39dba98ec ---> 6ecd7fa673e1 Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in 546854a2884b Removing intermediate container 546854a2884b ---> 80e3109a3cab Successfully built 80e3109a3cab Successfully tagged ruoyi-admin:latest
查看構(gòu)建好的鏡像
[root@zy-host ruoyi]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-admin latest 80e3109a3cab 31 seconds ago 725MB
(7)使用構(gòu)建好的鏡像啟動容器
[root@zy-host ruoyi]# docker run -d -p 8080:8080 --name ruoyi-admin ruoyi-admin 3ab5d9246b3b15cfe6b0461ad0d99d0c7f71dff21ba0ba66bfb7b09b1b908438
(8)網(wǎng)頁訪問測試
訪問8080端口,可以看到后端工程啟動成功。

4. Nignx部署
(1)拉取nginx鏡像
[root@zy-host home]# docker pull nginx
(2)啟動一個nginx測試容器
啟動容器直接掛載目錄不行,需要使用一個nginx測試容器先把nginx相關(guān)配置文件拷貝出來,再掛載。
[root@zy-host home]# docker run -d -p 80:80 --name zy_nginx_test nginx
(3)拷貝測試容器內(nèi)容
在宿主機 /usr/local/nginx目錄下新建三個目錄:conf 、html、log
[root@zy-host nginx]# pwd
/usr/local/nginx
[root@zy-host nginx]# mkdir {conf,html,log}
[root@zy-host nginx]# ls
conf html log將測試容器對應內(nèi)容拷貝到宿主機中:
[root@zy-host nginx]# docker cp zy_nginx_test:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
(4)刪除測試容器
將剛才nginx的測試容器刪除
[root@zy-host nginx]# docker rm -f zy_nginx_test
(5)啟動新的 nginx 容器
[root@zy-host nginx]# docker run -d --restart=always --privileged=true --name zy_nginx -p 80:80 \ -v /usr/local/nginx/cert:/etc/nginx/cert \ -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /usr/local/nginx/html:/usr/share/nginx/html \ -v /usr/local/nginx/log:/var/log/nginx \ nginx
-d:后臺運行
--restart=always:自啟動
--privileged=true:表示擁有更多的權(quán)限
--name 容器命名
-p 宿主機端口和容器端口的映射
-v 宿主機目錄和容器目錄的映射
(6)訪問測試
訪問云服務器公網(wǎng)地址,可以看到nginx部署成功。

(7)查看掛載情況
[root@zy-host nginx]# docker inspect zy_nginx
"Mounts": [
{
"Type": "bind",
"Source": "/usr/local/nginx/html",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/usr/local/nginx/log",
"Destination": "/var/log/nginx",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/usr/local/nginx/cert",
"Destination": "/etc/nginx/cert",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/usr/local/nginx/conf/nginx.conf",
"Destination": "/etc/nginx/nginx.conf",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],5. 前端部署
(1)修改配置文件
修改前端工程 vue.config.js 文件,target修改為 云服務器 地址

(2)前臺工程打包
# 構(gòu)建生產(chǎn)環(huán)境 npm run build:prod
打好包之后前端工程目錄下會出現(xiàn)一個dist文件夾:

(3)上傳dist包
將dist包上傳至云服務器宿主機 /usr/local/nginx/html 目錄下:

(4)編輯nginx配置文件
修改 宿主機 /usr/local/nginx/conf 目錄下的 nginx.conf文件:
[root@zy-host conf]# pwd /usr/local/nginx/conf [root@zy-host conf]# vim nginx.conf
修改后的文件內(nèi)容如下:
[root@zy-host conf]# vim nginx.conf
[root@zy-host conf]# cat nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name 39.107.232.89
charset utf-8;
location / {
root /usr/share/nginx/html/dist; #前端工程存放路徑,注意這里的路徑是容器內(nèi)的,不是宿主機的
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://39.107.232.89:8080/; # 后端項目的發(fā)布地址加端口
}
}
}(4)重啟nginx容器
需要重啟nginx容器之后,修改的配置文件內(nèi)容才會同步過去。
[root@zy-host html]# docker restart zy_nginx
(5)訪問測試

總結(jié)
到此這篇關(guān)于使用Docker部署前后端分離項目的文章就介紹到這了,更多相關(guān)Docker部署前后端分離項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法
這篇文章主要介紹了docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
Spring Boot 2.4 新特性之一鍵構(gòu)建Docker鏡像的過程詳解
這篇文章主要介紹了Spring Boot 2.4 新特性之一鍵構(gòu)建Docker鏡像的過程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
詳解修改docker啟動默認網(wǎng)橋docker0為自定義網(wǎng)橋
本篇文章主要介紹了詳解修改docker啟動默認網(wǎng)橋docker0為自定義網(wǎng)橋 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
Docker安裝wordpress并配置數(shù)據(jù)庫超詳細介紹版
安裝WordPress是一項常見的任務,使用Docker可以使這個過程更加簡單和可靠,下面這篇文章主要給大家介紹了關(guān)于Docker安裝wordpress并配置數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2023-11-11
內(nèi)網(wǎng)環(huán)境下registry搭建步驟詳解
這篇文章主要為大家介紹了內(nèi)網(wǎng)環(huán)境下的registry搭建步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10

