docker越來越流行,但之前pc和imac操作docker略顯繁瑣棒动,而docker桌面端的發(fā)布讓docker操作越來越簡單糙申,本文記錄從0開始搭建一個最簡單的springboot工程,直到通過打包上傳到云服務器全過程船惨。
概要
基本流程是:
創(chuàng)建springboot或spring cloud工程→打包成Jar→打包成dockerfile→上傳鏡像服務器(三方或自建)→云服務器拉取鏡像服務器→運行鏡像
一柜裸,創(chuàng)建SpringBoot Web項目
1.1. 新建SpringBoot工程
使用默認名稱Demo,一路next
1.2. 配置Maven
1.2.1 查看maven是否正確
第一個菜單→Preferences→搜索Maven→選擇正確的配置文件地址和本地倉庫地址
2.2 修改配置文件
打開setting.xml,找到mirrors添加鏡像地址粱锐,修改配置文件為淘寶地址
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
1.3. 刷新工程
右側打開maven管理頁面疙挺,點擊刷新
如果
pom.xml
(根目錄)中沒有錯誤,則項目創(chuàng)建成功怜浅,如果出現(xiàn)紅色標注的錯誤铐然,則執(zhí)行下面操作:
1.3.1 檢查pom.xml錯誤
打開淘寶倉庫地址查詢artifactId
的version
是否錯誤
淘寶maven倉庫查詢地址
1.3.2 修改版本號
根據(jù)groupId
,artifactId
找到合適的版本號version
搀暑,重填版本號沥阳,重新更新pom.xml
文件直到無錯
1.4. 項目結構
說明
application.properties
是項目默認創(chuàng)建的,application.yml
文件需要手動創(chuàng)建可以混合使用但不推薦自点,application.yml更方便易讀桐罕,建議創(chuàng)建application.yml刪除application.properties
# 啟動端口,yaml文件書寫時會有提示
server:
port: 8080
配置文件中什么都不填寫會默認啟動8080
端口
1.5. 添加控制器
添加控制器DemoController
桂敛,讓網(wǎng)站可以被訪問
/** 創(chuàng)建一個rest風格都控制器 */
@RestController
public class DemoController {
/** 通過get方式訪問路徑http://127.0.0.1:8080/index */
@GetMapping("/index")
public String index(){
return "springboot index page";
}
}
1.6. 測試網(wǎng)站
1.6.1 運行
DemoApplication中右鍵Run...
1.6.2 測試
打開瀏覽器訪問127.0.0.1:8080/index
功炮,出現(xiàn)springboot index page表示成功
二,在本地docker中運行
2.1. 下載
下載docker Desktop for mac
或者docker Desktop for windows
官網(wǎng)下載
docker由于歷史原因有很多版本术唬,各個版本適應不同環(huán)境薪伏,最新的是安裝版,簡單易用粗仓,不過對系統(tǒng)有要求毅该,詳細內容可以看看這遍博客:
Docker學習筆記(1)——理清概念
2.2. 安裝
安裝版的docker按照說明直接按照即可,mac需要升級到最新系統(tǒng)潦牛,Windows需要支持虛擬化
Containers / Apps
- 當前容器,可以控制容器運行與停止
要有Container首先要有Image挡育,也就是說Container是通過image創(chuàng)建的
images
- 本地鏡像
Docker鏡像包括一個或者多個只讀層(read-only layers)巴碗,最多127層,相當于每個鏡像都自帶一個迷你操作系統(tǒng)即寒,原來只是打包Jar橡淆,Docker是連同運行環(huán)境一起打包了,保證任何地方運行環(huán)境是一致的
Volumes
- 數(shù)據(jù)持久化
Docker的數(shù)據(jù)持久化即使數(shù)據(jù)不隨著container的結束而結束母赵,數(shù)據(jù)存在于host機器上——要么存在于host的某個指定目錄中(使用bind mount)逸爵,要么使用docker自己管理的volume(/var/lib/docker/volumes下)
Dev Environments
- 開發(fā)環(huán)境
還不成熟,意思是團隊開始時互享鏡像凹嘲,原來需要上傳到Git然后隊友拉取代碼师倔,現(xiàn)在直接共享給隊友
2.3. 編寫dockerfile
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER abc
ADD demoapp.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.profiles.active=online","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
dockerfile
沒有后綴名 - 手動打包:只需要Jar包和dockerfile文件在同一目錄即可,本文使用方法
- idea打包:安裝docker插件后周蹭,在idea打包
-
FROM anapsix/alpine-java:8_server-jre_unlimited
:指定基礎鏡像趋艘,alpine是精簡版linux鏡像,打包后體積會小很多凶朗,推薦 -
MAINTAINER abc
: 維護者信息 -
ADD demoapp.jar app.jar
:將本地文件添加到容器中瓷胧,本地demoapp.jar放到app.jar中 -
RUN bash -c 'touch /app.jar'
:構建鏡像時執(zhí)行的命令,修改這個文件的訪問時間和修改時間為當前時間 -
ENTRYPOINT ["java","-Dspring.profiles.active=online","-- Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
:配置容器棚愤,使其可執(zhí)行化搓萧,ENTRYPOINT可以執(zhí)行一些額外配置 - 參考dockerfile詳解
2.4.打包成docker鏡像
docker build -t demo-alpine:latest .
-
-t
? 給鏡像加一個Tag -
demo-alpine
? 給鏡像起的名稱 -
latest
? 給鏡像的Tag名,不寫自動添加latest
-
.
-Dockerfile所在目錄必填
打開docker desktop
軟件,發(fā)現(xiàn)鏡像已打包上去
2.5.運行鏡像
docker run -d -p 8080:8080 --name demo-alpine demo-alpine:latest
-
-d
- 后臺運行容器瘸洛,并返回容器ID -
-p
- 指定端口映射揍移,格式為:主機(宿主)端口:容器端口
-
--name demo-alpine demo-alpine:latest
-demo-alpine
為運行容器名稱,demo-alpine:latest
為images鏡像名:版本號tag
- 更多參考 Docker run 命令
打開瀏覽器訪問127.0.0.1:8080/index
货矮,出現(xiàn)springboot index page羊精,說明docker本地運行正確
三,上傳至鏡像庫
3.1. 阿里云容器鏡像服務
配置淘寶鏡像(docker hub官網(wǎng)如果使用比較通暢囚玫,可以不配置)
開通阿里云賬號喧锦,按官網(wǎng)提示配置鏡像加速
淘寶鏡像服務
開通鏡像倉庫
1). 開通
- 創(chuàng)建
鏡像倉庫
,注意選擇地區(qū)
- 創(chuàng)建
命名空間
抓督,成功創(chuàng)建后點擊管理
燃少,里面會有教程指導如何上傳鏡像 - 設置
訪問憑證
,設置固定密碼铃在,上傳時需要先登陸
2). 登陸阿里云
docker login --username=您的登錄名@qq.com registry.cn-chengdu.aliyuncs.com
3). 將鏡像推送到阿里云Registry
docker tag [ImageId] registry.cn-chengdu.aliyuncs.com/cdsk/[命名空間]:[鏡像版本號]
docker push registry.cn-chengdu.aliyuncs.com/cdsk/[命名空間]:[鏡像版本號]
-
tag
- 本地鏡像必須打tag才能上傳 -
[ImageId]
- 本地鏡像名字 -
registry.cn-chengdu.aliyuncs.com/cdsk/[命名空間]:[鏡像版本號]
- tag后的名字和版本阵具,在本地也會顯示,推送是推tag后的鏡像
imac第一次上傳時第一次輸入開機密碼定铜,第二次輸入訪問憑證固定密碼阳液,pc未測試
登陸阿里云容器鏡像服務,選擇正確的地區(qū)后可以看見上傳的鏡像
3.2. docker hub容器鏡像服務
- docker官方的鏡像倉庫揣炕,原理和阿里云類似帘皿,但是穩(wěn)定性差,有時不能訪問
- 官網(wǎng)創(chuàng)建倉庫畸陡,然后本地登陸后
push
上去即可
3.3. harbor 自建容器鏡像服務
- Docker容器應用的開發(fā)和運行離不開可靠的鏡像管理鹰溜,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮丁恭,部署我們私有環(huán)境內的Registry也是非常必要的曹动。Harbor是由VMware公司開源的企業(yè)級的Docker Registry管理項目,它包括權限管理(RBAC)牲览、LDAP墓陈、日志審核、管理界面第献、自我注冊跛蛋、鏡像復制和中文支持等功能。
- harbor部署較為復雜痊硕,以后會有專題補充
三種方式都可以上傳鏡像赊级,目的是被云服務器拉取鏡像,從開發(fā)
??鏡像庫
??云服務器
岔绸,最終目的是構建一個持續(xù)集成
開發(fā)環(huán)境
四理逊,云服務器中運行工程
- 阿里云同理
- 系統(tǒng)是centos 7
- 安裝docker
- 拉取鏡像
docker pull registry.cn-chengdu.aliyuncs.com/cdsk/[命名空間]:[鏡像版本號]
- 運行鏡像
docker run -d -p 8080:8080 --name demo registry.cn-chengdu.aliyuncs.com/cdsk/[命名空間]:[鏡像版本號]
- centos 7開放端口8080橡伞,外網(wǎng)登陸
外網(wǎng)ip地址:8080
,成功訪問晋被,完畢撒花??
五兑徘,總結
- 這是一個最簡單的docker服務部署教程
- 正式的服務器一般是多臺服務器,需要安裝openVPN來限制任意登陸
- 正式的服務器中docker使用k8s來集中管理