前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
1. 把要部署的工程打成一個jar包。(我的工程叫 gentle?)
? ? 打 jar 的方法:超簡單方法: Intellij Idea 把 java 工程打成可運行的 jar
2. 把 jar 包上傳到 服務器確定目錄下。
? ?我是用 rz 命令直接選擇 jar 上傳到我存放 jar 的目錄:/root/jiangyu/dockerfiles/jar
3.編寫超級簡單版本的?dockerfile 文件:
# jdk 是一個已有的包含 jdk 的鏡像FROM jdk# ?作者簽名MAINTAINER JY# ?簡化 jar 的名字路徑 (#:表示注釋掉)COPY jar/gentle-1.0-SNAPSHOT.jar /app.jar# ?執行 java -jar 命令 (CMD:在啟動容器時才執行此行。RUN:構建鏡像時就執行此行)CMD java -jar /app.jar# ?設置對外端口為 8089EXPOSE 8089
4. 通過 dockerfile 文件生成本工程的鏡像:
# -t :給鏡像取名為 gentle
docker build -t gentle .?
此行命令最后有一個點,表示使用當前上下文中的 dockerfile 文件 。
docker images 查看原有鏡像 ,并構建新鏡像:gentle:
從第 2 次查看鏡像可以確認,新的鏡像 gentle 已構建成功。
5. 通過鏡像啟動容器,命令如下:
#? -d 后臺運行、
# 最后一個 gentle 是引用的鏡像的名字、
#? --name jy_gentle 給容器取名為 jy_gentle (取名參數前面是兩短橫線)、
#? -p 8089:8089 端口映射,注意是小寫 p
# 前一個 8089 是對外瀏覽器上訪問的端口,后一個 8089 是容器內工程本身的端口,兩者可不一樣docker run -d -p 8089:8089 --name jy_gentle gentle
docker ps -a :查看當前服務器上所有容器。
從第 2 次查看可知容器已成功啟動。黃框中的是各個容器使用的鏡像的名字,藍框中的是各個容器的名字。
?
我的工程設置的本地端口也是8089?
6. postman 和瀏覽器 順利請求到 gentle 工程中的接口,說明部署成功
7. gentle 工程中接口實現:
?
部署完啦 ,走,出門溜達溜達,找點吃的去? ...
?
--------------------------------
2018.11.28 后記,每次改代碼都要重新部署依舊很麻煩,于是寫了個很簡單的腳本,運行就部署。
腳本內容只是把命令整合到一起了而已:
cd gentle_code# 備份原代碼
tar -zcvf gentle.tar ./gentle# 刪除原代碼文件夾
rm -rf gentle# 拉取代碼
echo -e "\033[32m\n從git拉取代碼\n\033[0m"
git clone https://gitee.com/FJ_WoMenDeShiJie/gentle.git
echo -e "\033[32m\n代碼拉取完成\n\033[0m"# 工程打包
cd gentle
rm -rf ./target/gentle-1.0-SNAPSHOT.jarecho -e "\033[32m\n開始打jar包\n\033[0m"
mvn install -Dmaven.test.skip=true
rm -rf ../../jar/gentle-1.0-SNAPSHOT.jar
cp ./target/gentle-1.0-SNAPSHOT.jar ../../jar
echo -e "\033[32m\njar包完成\n\033[0m"# 刪除原鏡像
docker rmi gentle &> /dev/null
echo -e "\033[32m\n刪除原鏡像\n\033[0m"
echo -e "\033[32m\n構建新鏡像\n\033[0m"cd ../../
docker build -t gentle .
echo -e "\033[32m\n新鏡像構建成功\n\033[0m"# 刪除原容器
docker rm -f gentle# 啟動容器
docker run -d -p 8089:8089 --name gentle gentle
echo -e "\033[32m\n后端工程部署完成\n\033[0m"
?運行效果:
postman 請求,返回的已經有新接口數據了。
?
另外:前端工程部署腳本見:前端 vue 工程 Docker 方式部署