lz 在學(xué)習(xí)的過程艇搀,想要把前后端項(xiàng)目都部署到docker腋颠,實(shí)現(xiàn)了在linux 虛擬機(jī)中部署項(xiàng)目袋狞。為了加深記憶涮坐,所以記錄一下填坑的過程凄贩。
準(zhǔn)備:(省略安裝虛擬機(jī)和centOS7linux系統(tǒng))
1、VMware 鏡像centOS7
2袱讹、在虛擬機(jī)中安裝docker
3疲扎、IDEA 一個(gè)簡單的spingboot 項(xiàng)目
4、一個(gè)react項(xiàng)目
直接開始上干貨
一捷雕、在linux系統(tǒng)中安裝docker ,可以結(jié)合docker中國官方文檔https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/椒丧。如果不是root用戶,前面加上sudo 權(quán)限非区,因?yàn)槲乙呀?jīng)安裝過了瓜挽,所以貼一下之前安裝的步驟
1.安裝所需的軟件包。yum-utils 提供了 yum-config-manager 實(shí)用程序征绸,并且 devicemapper 存儲驅(qū)動需要:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.使用下列命令設(shè)置 stable 鏡像倉庫。您始終需要使用 stable 鏡像倉庫俄占,即使您還需要通過 edge 或 testing 鏡像倉庫安裝構(gòu)建也是如此管怠。
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
3.更新 yum 軟件包索引
sudo yum makecache fast
4.安裝最新版本的 Docker CE,或者轉(zhuǎn)至下一步以安裝特定版本
sudo yum install docker-ce
5.啟動docker:
sudo systemctl start docker
6.查 看docker當(dāng)前版本
docker version
7.查看當(dāng)前docker鏡像
docker images
二缸榄、打包springboot項(xiàng)目
1.在IDEA中新建一個(gè)springboot項(xiàng)目渤弛,我這里是dockerdemo里面加入一個(gè)簡單的HelloController.java 然后用maven打包,貼一下部分的代碼甚带,端口默認(rèn)是8080
@RequestMapping("/t-test")
@RestController
public class HelloController {
@RequestMapping(value="/hello")
public String hello(){
return "hello world!";
}
}
2.在target目錄下可以看到打包好的文件她肯,在linux系統(tǒng)中home目錄下創(chuàng)建一個(gè)一個(gè)tt文件夾,把jar包拷貝進(jìn)這里鹰贵,然后新建一個(gè)Dockerfile文件
其中Dockerfile文件內(nèi)容
FROM java:8
VOLUME /tmp
ADD dockerdemo-0.0.1-SNAPSHOT.jar /dalaoyang.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/dalaoyang.jar"]
(1)cd 到tt 目錄創(chuàng)建dockerdemo 鏡像
(2)之后根據(jù)dockerdemo鏡像創(chuàng)建容器并啟動容器
(3)查看虛擬機(jī)ip地址ifconfig
(4)之后在后臺輸入http://192.168.11.128:8080/t-test/hello 可以看到springboot輸出結(jié)果
三、打包react項(xiàng)目
1.運(yùn)用create-app-react 創(chuàng)建一個(gè)reactdemo01
2.npm 安裝axios 測試跨域
3.在vscode 中執(zhí)行npm run build 打包react項(xiàng)目
這里貼一下react部分代碼:
import axios from 'axios';
...
TestKuayu = () => {
console.log("測試跨域問題!");
axios.post('/api/t-test/hello',
querystring.stringify({
id: '42',
lastName: '你好'
})
)
.then(function (response) {
console.log("打印nginx跨域:" + JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
}
...
<h2>{this.state.msg}</h2>
這是首頁組件的內(nèi)容
<button onClick={this.TestKuayu}>測試跨域問題</button>
<hr />
(1)把打包好的文件放入虛擬中甫窟,home 目錄下新建comp
(2)先安裝docker-compose
進(jìn)入下面的網(wǎng)址下載目前的最新版:
https://github.com/docker/compose/releases/tag/1.14.0-rc2
網(wǎng)頁拉到最下面裙顽,下載:
docker-compose-Linux-x86_64
然后將文件上傳到 /usr/local/bin/ 文件夾下,然后將其重命名為docker-compose敷钾,修改此文件的權(quán)限枝哄,增加可執(zhí)行:chmod +x /usr/local/bin/docker-compose
查看docker-compose版本,如下即安裝成功
docker-compose常用的命令:
docker-compose --help你會看到docker-compose命令
docker-compose down 關(guān)閉并刪除容器
(3)在comp目錄下新建一個(gè)compose.yml
version: '2'
services:
# 服務(wù)名稱
nginx:
# 鏡像:版本
image: nginx:latest
# 映射容器80端口到本地80端口
ports:
- "80:80"
# 數(shù)據(jù)卷 映射本地文件到容器
volumes:
# 映射nginx.conf文件到容器的/etc/nginx/conf.d目錄并覆蓋default.conf文件
- ./nginx.conf:/etc/nginx/conf.d/default.conf
# 映射build文件夾到容器的/usr/share/nginx/html文件夾
- ./build:/usr/share/nginx/html
# 覆蓋容器啟動后默認(rèn)執(zhí)行的命令阻荒。
command: /bin/bash -c "nginx -g 'daemon off;'"
(4)在comp目錄下新建一個(gè)nginx.conf
#user nobody;
#worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#events {
# worker_connections 1024;
#}
#http {
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri /index.html;
}
# /api 代理到下面 地址 其中192.168.11.128是你虛擬機(jī)上面的步驟中能正常訪問springboot后臺
location /api/ {
proxy_pass http://192.168.11.128:8080/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
#}
(5)在虛擬機(jī)終端進(jìn)入comp目錄
執(zhí)行docker-compose up -d 即可創(chuàng)建一個(gè)nginx容器
如下圖docker ps查看已經(jīng)啟動的容器挠锥,一個(gè)是dockerdemo ,一個(gè)是nginx
(6)訪問react 項(xiàng)目
http:192.168.11.128:80 可以看到react項(xiàng)目正常顯示侨赡,點(diǎn)擊測試跨域問題蓖租,可以看到react項(xiàng)目正常訪問另一個(gè)容器中springboot后臺項(xiàng)目纱控。
至此整個(gè)流程跑通,因?yàn)槭窃诠镜碾娔X寫文章菜秦,有點(diǎn)倉促甜害。
如果讀者發(fā)現(xiàn)有什么不正確,請指出球昨。
有興趣的朋友可以尔店,一起交流。
ly_dv主慰,一個(gè)小菜鳥嚣州。