柚子快報(bào)激活碼778899分享:學(xué)習(xí)docker記錄(二)
柚子快報(bào)激活碼778899分享:學(xué)習(xí)docker記錄(二)
查看命令
輸入docker image或者 docker container 可以出現(xiàn)對(duì)應(yīng)的命令:
也可以輸入docker --help查看。
操作鏡像
首先拉取鏡像
執(zhí)行docker pull docker.io/library/ubuntu:18.04命令或者docker pull ubuntu:18.04,因?yàn)槭菑膁ocker hub拉取ubunto官方鏡像,可以省略掉倉(cāng)庫(kù)地址以及倉(cāng)庫(kù)名中的用戶(hù)名。
其次運(yùn)行鏡像
執(zhí)行命令:
$ docker run -it --rm \
ubuntu:18.04 \
bash
運(yùn)行鏡像其實(shí)就是創(chuàng)建一個(gè)容器并且運(yùn)行啟動(dòng)這個(gè)容器:
● -it:這是兩個(gè)參數(shù),一個(gè)是 -i:交互式操作,一個(gè)是 -t 終端。我們這里打算進(jìn)入 bash 執(zhí)行一些命令并查看返回結(jié)果,因此我們需要交互式終端。 ● --rm:這個(gè)參數(shù)是說(shuō)容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容器并不會(huì)立即刪除,除非手動(dòng) docker rm。我們這里只是隨便執(zhí)行個(gè)命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費(fèi)空間。 ● ubuntu:16.04:這是指用 ubuntu:16.04 鏡像為基礎(chǔ)來(lái)啟動(dòng)容器。 ● bash:放在鏡像名后的是命令,這里我們希望有個(gè)交互式 Shell,因此用的是 bash。
每一行的結(jié)尾的 \ 是換行符,這樣看起來(lái)更清晰。
執(zhí)行完命令之后就會(huì)進(jìn)入到這個(gè)創(chuàng)建ubuntu的容器的終端中。 執(zhí)行命令 cat /etc/os-release 查看一下操作系統(tǒng)的版本:
確實(shí)是拉取的ubuntu:18.04的版本。輸入exit可以退出容器。
創(chuàng)建鏡像
用docker commit來(lái)對(duì)某個(gè)鏡像做出改動(dòng),然后制作成定制的鏡像:
創(chuàng)建一個(gè)nginx的鏡像: docker run --name testNginx -d -p 9009:80 nginx (剛開(kāi)始的時(shí)候,訪(fǎng)問(wèn)域名:9009一直訪(fǎng)問(wèn)失敗,原來(lái)是ECS安全組端口沒(méi)有放行)進(jìn)入到這個(gè)容器中,通過(guò)命令修改nginx文字: docker exec -it testNginx bash echo '
Hello, Docker!
' > /usr/share/nginx/html/index.html exit再次訪(fǎng)問(wèn),會(huì)發(fā)現(xiàn)訪(fǎng)問(wèn)頁(yè)面修改了。docker commit [選項(xiàng)] <容器ID或容器名> [<倉(cāng)庫(kù)名>[:<標(biāo)簽>]]
執(zhí)行命令 docker comit --author zhuruilin testNginx testNginx:0.2
可以發(fā)現(xiàn)新制作的鏡像就查詢(xún)到了,但是這種docker commit定制的鏡像是在另外的鏡像的基礎(chǔ)上執(zhí)行了很多其他命令之后得到的,但是執(zhí)行過(guò)什么命令其他使用者是不會(huì)知道的,創(chuàng)建人不一定就能完整記得。而且在其他鏡像上再次定制鏡像,只會(huì)讓鏡像變得越來(lái)越臃腫,所以正常不使用這種方式來(lái)制作鏡像,應(yīng)該是Dockerfile的方式來(lái)制作鏡像。
部署一個(gè)簡(jiǎn)答的springboot項(xiàng)目
項(xiàng)目極其簡(jiǎn)單,就是有一個(gè)固定寫(xiě)死返回字符的接口:
使用idea中的maven工具打成一個(gè)jar包,利用工具上傳jar包到服務(wù)器,cd到j(luò)ar包的同級(jí)目錄下,新增Dockerfile,
vim Dockerfile
FROM openjdk:8-jre
MAINTAINER zhuruilin
VOLUME /www/wwwroot/dockerPractise/day1029
RUN mkdir -p /www/wwwroot/dockerPractise/day1029
WORKDIR /www/wwwroot/dockerPractise/day1029
ENTRYPOINT ["java","-jar","dockerDemo-1.jar"]
根據(jù)Dockerfile制作鏡像:
docker build -t dockerdemo:0.1 .
末尾的點(diǎn)不能缺失,構(gòu)建鏡像完畢之后就可以根據(jù)鏡像創(chuàng)建容器
這里末尾的 . 并不是指當(dāng)前目錄,docker build 是調(diào)用docker remote api 去都調(diào)用docker 服務(wù)端接口,docker build 會(huì)將一些本地的文件發(fā)送給服務(wù)端, 因?yàn)橥ǔJ窃贒ockerfile文件同級(jí)目錄下執(zhí)行docker build,所以將這一層目錄作為上下文路徑。如果Dockerfile中有COPY ,ADD命令,會(huì)將本地文件傳給docker服務(wù)端 ; 如果Dockerfile中這么寫(xiě):
COPY /test/test1.jar /result
就會(huì)將docker run命令中指定的上下文路徑中的 /test/test1.jar包復(fù)制,而不是復(fù)制 Dockerfile目錄中的 /test/test1.jar文件。
docker run --name dockerdemo -d -p 90009:9009 dockerdemo:0.1
訪(fǎng)問(wèn)域名:9009/docker/test,會(huì)出現(xiàn)文字,說(shuō)明運(yùn)行成功。
出現(xiàn)問(wèn)題: 使用命令 docker container ls,并沒(méi)有運(yùn)行的容器,使用 docker container ls -a 才可以看見(jiàn)容器,說(shuō)明運(yùn)行容器失敗。 ,刪除掉這個(gè)容器,再次創(chuàng)建,命令如下:
docker run --name demo1030 -p 9009:9009 demo:0.1 -d
會(huì)出現(xiàn)提示 Error: Unable to access jarfile dockerDemo-1.jar。
最后發(fā)現(xiàn)在Dockerfile中添加一個(gè) copy xxx.jar /www/wwwroot/dockerPractise/day1029/test/xx.jar, 也就是說(shuō)沒(méi)有把jar包發(fā)送給docker服務(wù)端,導(dǎo)致啟動(dòng)jar失敗。修改完Dockerfile之后就可以了。
柚子快報(bào)激活碼778899分享:學(xué)習(xí)docker記錄(二)
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。