在docker中部署前后端項(xiàng)目

一:安裝docker

首先,根據(jù)docker的官網(wǎng),找到對(duì)應(yīng)的操作系統(tǒng)進(jìn)行安裝docker。
對(duì)應(yīng)操作系統(tǒng)

這里給我的是Ubuntu,點(diǎn)進(jìn)入之后在Get Docker Engine - Ubuntu (Community)下點(diǎn)擊網(wǎng)址。
Ubuntu

根據(jù)步驟進(jìn)行安裝,然后他會(huì)自行啟動(dòng)。


如果是centos系統(tǒng),我們可以直接使用

yum install docker

啟動(dòng)后設(shè)置為開機(jī)啟動(dòng)

systemctl start docker

systemctl enable docker

二:安裝mysql

在dockerhub上找到mysql的安裝方式:dockerhub

輸入sudo docker pull mysql

然后可以通過docker images進(jìn)行查看鏡像。

接下來需要在容器中運(yùn)行mysql。
注意: 這里需要注意,根據(jù)dockerhub mysql的運(yùn)行來說:這里不僅要端口映射,后臺(tái)運(yùn)行,還得設(shè)置它的密碼。
那我們?cè)趺醋瞿兀?/p>

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

實(shí)際上,應(yīng)該是這么做:

sudo docker run --name demomysql -p 3306:3306 -e  MYSQL_ROOT_PASSWORD=123456 -d mysql

三:avicat ssh連接中ssh tunnel:the negotiation of encryption is failed

在navicat使用ssh通道連接服務(wù)器端數(shù)據(jù)庫時(shí),會(huì)出現(xiàn)
ssh tunnel:the negotiation of encryption is failed 或者ssh tunnel:server does not support diffie-hellman-group1-sha1 forkeyexchange的問題。
這是因?yàn)榉?wù)器關(guān)于ssh的加密設(shè)置沒有和navicat協(xié)調(diào)好。
需要做以下操作:

1.進(jìn)入文件

sudo vim /etc/ssh/sshd_config

2.在文件的末尾添加

 KexAlgorithms diffie-hellman-group1-sha1
 Ciphers 3des-cbc

3.保存,然后運(yùn)行

ssh-keygen -A
service sshd restart

四:mysql 1251

很遺憾,這次我下的是8.0.15版本,所以Navicat依舊連接不上,那么我還得繼續(xù)解決這個(gè)問題,殘念...
那么我們還是看看..
進(jìn)入怎么進(jìn)入mysql的容器吧。

sudo docker ps -a

查看容器
1.png
sudo docker start  containerID

然后進(jìn)入它的base中

docker exec -it mysql(容器名) bash

接下來就可以操作了:

mysql -uroot -p
2.png

接下來操作:

1.對(duì)遠(yuǎn)程連接進(jìn)行授權(quán)
mysql> GRANT ALL ON *.* TO 'root'@'%';
2.更改密碼的加密規(guī)則
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

'root' 為你自己定義的用戶名
'localhost' 指的是用戶開放的IP,可以是'localhost'(僅本機(jī)訪問,相當(dāng)于127.0.0.1),可以是具體的'...'(具體某一IP),也可以是 '%' (所有IP均可訪問)
'password' 是你使用的用戶密碼

3.刷新權(quán)限
mysql> flush privileges;
image.png

完成!

三:部署spring boot項(xiàng)目

這里首先將項(xiàng)目生成一個(gè)jar包。

1.生成鏡像

在服務(wù)器上新建一個(gè)文件夾。 比如我就在/home/user下建立了一個(gè)docker文件夾。然后將jar包放入其中。
進(jìn)行第二步,寫一個(gè)Dockerfile文件:建議查看這個(gè)

FROM java:8
VOLUME /tmp
ADD cms-0.0.1-SNAPSHOT.jar app.jar 
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

和jar包放入一個(gè)文件夾。

然后使用docker build命令生成鏡像:

sudo docker build -t  xxx(鏡像名字)  .

注意:這里的.是不能漏的,表示在當(dāng)前文件夾下(所以你一定要cd進(jìn)這個(gè)jar包所在文件夾)
然后運(yùn)行這個(gè)鏡像

sudo docker run    --net=host   -d  xxx

注意一定要使用host網(wǎng)絡(luò)連接方式,否則項(xiàng)目會(huì)連接不上mysql
這是因?yàn)閐ocker會(huì)自動(dòng)給每個(gè)容器分配ip,但是項(xiàng)目里配置的mysql地址是localhost,在容器內(nèi)連接localhost是連接容器本身而不是宿主機(jī)的localhost,所以一直找不到mysql。所以采用host的網(wǎng)絡(luò)方式將容器與宿主機(jī)共用一個(gè)Network Namespace,這樣容器內(nèi)localhost就是宿主機(jī)的localhost了

image.png

完畢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容