????????在代碼編寫完成即將部署的時(shí)候,如果采用docker容器的方法,需要將jar包打成docker鏡像并通過鏡像將容器啟動(dòng)起來。具體的步驟如下。
一、首先下載java鏡像
????????先使用docker search java命令進(jìn)行搜索。
?????????然而在拉取鏡像的時(shí)候要注意不能直接去選擇pull java ,不然會(huì)出現(xiàn)manifest for java:latest not found: manifest unknown: manifest unknown?的報(bào)錯(cuò)。
?正確的做法是:在search的時(shí)候指明好版本,然后在進(jìn)行pull操作。
docker search jdk8
?????????然而在pull的時(shí)候,發(fā)現(xiàn)還是超時(shí)了,出現(xiàn)這種情況一般是沒有配好鏡像源或者配置的鏡像源失效了。
?????????我打開鏡像源進(jìn)行查看,并且對鏡像源進(jìn)行ping的操作,然而發(fā)現(xiàn)前面兩個(gè)鏡像都能 ping通,但后面嘗試?yán)^續(xù)去pull?鏡像,發(fā)現(xiàn)仍然失敗,最后我只保留了自己配置的阿里云鏡像,發(fā)現(xiàn)可以正常pull?成功。(這里我其實(shí)也沒有弄的很明白,原來配置了三個(gè)鏡像源地址反而pull不成功,而且前面兩個(gè)地址可以ping通,但是發(fā)現(xiàn)這幾個(gè)網(wǎng)站單獨(dú)并不能打開)
改成一個(gè)鏡像后再search?和?pull 好了
?二、新建一個(gè)工作目錄,將jar包拷貝進(jìn)去
?三、新建一個(gè)Dockerfile文件
文件內(nèi)容如下:
FROM dockette/jdk8
WORKDIR /test
COPY ?jx-system-0.0.1-SNAPSHOT.jar ? /test/jx-system-0.0.1-SNAPSHOT.jar
CMD ["java","-jar","jx-system-0.0.1-SNAPSHOT.jar","-Dfile.encoding=utf-8"]
代碼解釋
- FROM dockette/jdk8 ——表示基于dockette/jdk8鏡像構(gòu)建
- WORKDIR /test ——表示指定容器內(nèi)的工作目錄為/test
- COPY ——拷貝jx-system-0.0.1-SNAPSHOT.jar到容器工作目錄/test
- CMD ——執(zhí)行java啟動(dòng)jar的指令。
?四、構(gòu)建鏡像并啟動(dòng)容器
docker build -t app-docker .
????????表示從當(dāng)前目錄構(gòu)建鏡像,這條命令會(huì)把當(dāng)前目錄下文件全部打包發(fā)送到docker引擎服務(wù)端,然后在服務(wù)端根據(jù)Dockerfile進(jìn)行構(gòu)建操作。其中的-t
?是 Docker 命令?docker build
?的一個(gè)選項(xiàng),用于指定生成的鏡像的名稱和標(biāo)簽,格式為?name:tag
。在命令行中,-t
?選項(xiàng)后面可以緊接著將生成的鏡像命名為一個(gè)字符串。
例如,docker build -t remdocker .
?命令中的?-t remdocker
?意思是將生成的鏡像命名為?remdocker
。.
?表示指定當(dāng)前目錄作為 Dockerfile 文件的構(gòu)建上下文。
通常情況下,生成的鏡像名稱包含命名空間(Namespace)的名稱,以便在 Docker Hub 上進(jìn)行管理和分享,例如?username/repo:tag
。不過如果沒有 Docker Hub 賬號(hào),也可以不指定命名空間,只用標(biāo)準(zhǔn)格式?name:tag
。
????????而命令 docker run -it --network my-net ?-p 20233:20233 --name appd -d app-docker?表示把容器啟動(dòng)起來。根據(jù)剛才的Dockerfile配置,容器生成后,必然會(huì)在容器根目錄下生成test目錄,并且test目錄下存在app.jar文件,容器執(zhí)行CMD定義的指令也是基于test目錄的。
docker run -it --network my-net ?-p 20233:20233 --name appd -d app-docker
具體的命令的含義如下:
-
docker run
:啟動(dòng)一個(gè)Docker容器。 -
-it
:將Docker容器的輸入綁定到當(dāng)前終端,以便可以進(jìn)行交互式操作。 -
--network my-net
:將Docker容器連入名為my-net的網(wǎng)絡(luò)中。這個(gè)網(wǎng)絡(luò)需要先通過docker network create
命令創(chuàng)建。 -
-p 20233:20233
:將Docker容器的20233端口映射到主機(jī)的20233端口。這樣,可以通過主機(jī)的20233端口訪問Docker容器。 -
--name appd
:給Docker容器命名為appd。 -
-d app-docker
:以名為app-docker的鏡像為基礎(chǔ)啟動(dòng)Docker容器并將其放入后臺(tái)運(yùn)行。
綜上所述,這條命令啟動(dòng)了一個(gè)交互式的Docker容器,并將其放入已經(jīng)創(chuàng)建的名為my-net的網(wǎng)絡(luò)中,在主機(jī)的20233端口與Docker容器的20233端口建立了映射,給Docker容器命名為appd,以名為app-docker的鏡像為基礎(chǔ)啟動(dòng)并將其放入后臺(tái)運(yùn)行。
【此處還要注意:-p
(小寫p)和-P
(大寫P)選項(xiàng)在Docker命令行中有不同的含義。
-p host_port:container_port
(小寫p)選項(xiàng)用于將主機(jī)端口映射到Docker容器端口,例如:
docker run -p 8080:80 nginx
????????此命令將host的8080端口映射到Docker容器中的80端口,因此可以通過?http://localhost:8080?訪問NGINX歡迎頁面。而-P
(大寫P)選項(xiàng)用于將Docker容器的所有暴露的端口映射到主機(jī)上隨機(jī)端口。例如:
docker run -P nginx
? ? ? ? 是將nginx容器的所有暴露的端口映射到主機(jī)上的隨機(jī)端口,您可以通過?docker container port <container_name>
?命令來查看每個(gè)映射的端口??傊?,小寫p用于將主機(jī)端口映射到Docker容器端口,而大寫P用于將所有暴露的端口映射到主機(jī)上隨機(jī)端口?!?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-500592.html
完成之后可進(jìn)入容器內(nèi)部查看文章來源地址http://www.zghlxwxcb.cn/news/detail-500592.html
docker exec -it app /bin/bash
到了這里,關(guān)于Docker部署(1)——將jar包打成docker鏡像并啟動(dòng)容器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!