精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為了實現CI/CD,先來定制一個Docker鏡像

開發 架構
本文帶大家以具體的實例演示了如何制作Docker鏡像,在制作Docker鏡像過程中需要注意的事項,以及制作之后用于CI/CD的腳本編寫。大家可參考以上實例,根據自己的業務場景所需進行對應的改造。

背景

計劃把手頭的項目逐步改造為基于Docker容器的方式發布,同時,項目中已經采用了云廠商提供的CI/CD自動化發布流水線。因此,為配合CI/CD操作,需要先針對項目構建一些發布的腳本,通過腳本來操作Docker鏡像定制、Docker的啟動和停止。

在閱讀和實踐本篇文章之前,如果你還未搭建Docker的環境,可參考上篇文章《??Linux安裝Docker完整教程??》,先把整個環境搭建起來,同時熟悉一下Docker的基本操作命令。

這篇文章就配合具體的實踐案例來為大家講講如何定制一個Docker鏡像,并通過腳本來執行鏡像的構建、項目的發布、容器的啟動與停止等。

什么是Dockerfile?

Dockerfile是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。常見的指令比如有:FROM、RUN、ADD、COPY、CMD、ENV等。

在鏡像構建時,需要注意的一點是:鏡像的構建是一層層構建的,前一層是后一層的基礎。每一層構建完就不會再發生改變,后一層上的任何改變只發生在自己這一層。

像上面提到的指令,每一次操作都會構建一層。比如刪除前一層的文件,在最終容器運行時,雖然看不到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像時,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。

另外,為了減少構建層的數量,在編寫Dockerfile文件時盡量將多層的指令合并成一層執行,比如兩個RUN命令可以通過&&將其合并成一條。

不建議的鏡像制作方式

制作Docker鏡像通常有兩種方式:基于docker commit和基于Dockerfile的形式。

Docker提供了一個 docker commit 命令,可以將容器的存儲層保存下來成為鏡像。換句話說,就是在原有鏡像的基礎上,再疊加上容器的存儲層,并構成新的鏡像。后續運行這個新鏡像時,就會擁有原有容器最后的文件變化。

docker commit的方式除了學習之外,還可以用于一些特殊的場景,比如被入侵后保存現場等。但是不要使用 docker commit 定制鏡像,定制鏡像應該使用 Dockerfile 來完成。

這是因為在使用docker commit制作鏡像時,除了我們想要修改的內容(文件)之外,該命令還會修改一些其他的文件,而且所有對鏡像的操作都是黑箱操作,生成的鏡像也被稱為黑箱鏡像。

除了制作鏡像的人知道執行過什么命令、怎么生成的鏡像,別人根本無從得知。即使制作鏡像的人,一段時間后可能也無法記清具體的操作。這種黑箱鏡像的維護工作是非常痛苦的。

另外,如果使用 docker commit 制作鏡像,以及后期修改的話,每一次修改都會讓鏡像更加臃腫一次,所刪除的上一層的東西并不會丟失,會一直如影隨形的跟著這個鏡像,即使根本無法訪問到。這會讓鏡像更加臃腫。

因此,這里我們不采用 docker commit 的方式制作鏡像,如果大家感興趣的話,可以在網絡上查詢一下該方式的制作流程。本文重點介紹基于 Dockerfile 的方式來制作鏡像,下面就以實例展示一下如何構建一個Docker鏡像。

Dockerfile指令編寫

在/opt目錄下創建一個業務目錄/opt/channel/docker(這里部署的項目為渠道項目,取名channel),在該目錄下存放Dockerfile、待發布的jar包等資源文件。

$ cd /opt/channel/docker
$ touch Dockerfile

上述指令先進入/opt/channel/docker目錄、創建了一個空的Dockerfile(文本)文件。

編輯Dockerfile內容如下:

FROM java:8
COPY ./hqy-service-channel.jar ./app.jar
ENV spring.profiles.active prod
EXPOSE 8190
ENTRYPOINT ["java", "-jar","-Duser.timezone=GMT+08", "./app.jar"]

Dockerfile中涉及到FROM、COPY、ENV、EXPOSE、ENTRYPOINT五個指令,下面逐一講解。

FROM指令

所謂制作鏡像,就是在已經存在的鏡像的基礎上進行定制?;A鏡像是必須指定的,而 FROM 就是指定基礎鏡像,因此一個 Dockerfile 中 FROM 是必備的指令,并且必須是第一條指令。

這里的FROM java:8,也就是采用openjdk在Docker鏡像源中的鏡像,版本為8??梢酝ㄟ^search命令查看一下這個鏡像:

[docker]# docker search java
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
node Node.js is a JavaScript-based platform for s… 11734 [OK]
tomcat Apache Tomcat is an open source implementati… 3368 [OK]
openjdk "Vanilla" builds of OpenJDK (an open-source … 3362 [OK]
java DEPRECATED; use "openjdk" (or other JDK impl… 1976 [OK]

第4個name為java的便是,為了方便后面操作,這里直接將鏡像pull到本地。

docker pull java:8

查看本地pull之后,本地的鏡像列表:

[root@iZ2zehx0enix3i0aiea7p0Z docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
java 8 d23bdf5b1b1b 5 years ago 643MB

后續執行鏡像制作時便以該鏡像為基礎進行構建。

COPY指令

COPY,復制指令,從上下文目錄中復制文件或者目錄到容器里指定路徑。

COPY ./hqy-service-channel.jar ./app.jar

其中第一個參數為源文件路徑,第二個參數為容器內目標文件路徑。這里是將當前目錄下的Spring Boot項目jar包hqy-service-channel.jar,復制到容器內并命名為app.jar。在執行創建鏡像命令之前,需要把項目jar包放到Dockerfile同級目錄下。

ENV指令

ENV指令,用于設置環境變量,定義了環境變量,那么在后續的指令中,就可以使用這個環境變量。

基本格式為:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

第一個參數為變量key,第二個參數為變量值,這里用于設置SpringBoot項目的配置文件的profile為prod(生產配置文件)。

EXPOSE指令

EXPOSE指令,僅僅只是聲明端口。作用是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射。另外,在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。

基本格式:

EXPOSE <端口1> [<端口2>...]

這里采用了8190端口。

ENTRYPOINT指令

ENTRYPOINT指令,類似于CMD指令,但其不會被docker run的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT指令指定的程序。在執行docker run時可以指定ENTRYPOINT運行所需的參數。

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

這里使用ENTRYPOINT指令來執行jar -jar啟動SpringBoot項目。

RUN指令

RUN指令雖然在實例中沒用到,但也是非常常見的一個指令,于執行后面跟著的命令行命令,有以下兩種格式。

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在終端操作的 shell 命令。

exec格式:

RUN ["可執行文件", "參數1", "參數2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等價于 RUN ./test.php dev offline

經過上述一系列的操作,Dockerfile文件編寫完畢。在構建命令時值得注意的是:按照Docker最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。

構建鏡像

上面準備好了Dockerfile文件,再把對應的jar包放在指定的位置,可在Dockerfile文件的目錄執行構建命令,比如:

docker build -t channel .

其中-t channel指定了構建鏡像的名稱,當然也可以同時指定版本編號-t channel:v1。后面的“.”指的是當前目錄。

執行效果如下:

[docker]# docker build -t channel .
Sending build context to Docker daemon 82.31MB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : COPY ./hqy-service-channel.jar ./app.jar
---> 10cb376c7572
Step 3/5 : ENV spring.profiles.active test
---> Running in ca70651b21b6
Removing intermediate container ca70651b21b6
---> ec420f94df51
Step 4/5 : EXPOSE 8190
---> Running in 318e718d552a
Removing intermediate container 318e718d552a
---> 6746bad4a990
Step 5/5 : ENTRYPOINT ["java", "-jar","-Duser.timezone=GMT+08", "./app.jar"]
---> Running in 135de4d42ec8
Removing intermediate container 135de4d42ec8
---> 1720afb4fec7
Successfully built 1720afb4fec7
Successfully tagged channel:latest

執行docker images可查看到鏡像構建完畢:

[docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
channel latest 1720afb4fec7 51 seconds ago 725MB
java 8 d23bdf5b1b1b 5 years ago 643MB

后續便可以通過docker run命令來啟動容器了。

這里為了方便CI/CD操作,我們可以通過腳本來完成整個容器停止、容器移除、鏡像的移除、鏡像的重新制作以及容器的重新啟動,這樣CI/CD的系統只用調用對應的腳本即可。

示例腳本start.sh如下:

#!/bin/bash
# 停止容器
docker stop channel
echo "停止容器success!"
# 移除容器
docker rm channel
echo "移除容器success!"
# 移除鏡像
docker rmi channel
echo "移除鏡像success!"
# 制作鏡像
docker build -t channel /opt/channel/docker/
echo "制作鏡像success!"
# 啟動容器
docker run -d --name channel -p 8190:8190 -v /opt/channel/logs/:/opt/channel/logs/ channel channel:latest
echo "啟動success!"

執行上述腳本之后,查看容器執行結果:

[bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e9eff75cdb6f channel "java -jar -Duser.ti…" 30 seconds ago Up 28 seconds 0.0.0.0:8190->8190/tcp channel

可以看到容器已經成功啟動。當重新構建新的jar包時,只需對目錄中的jar包進行替換,然后再執行一遍start.sh命令即可。

小結

本文帶大家以具體的實例演示了如何制作Docker鏡像,在制作Docker鏡像過程中需要注意的事項,以及制作之后用于CI/CD的腳本編寫。大家可參考以上實例,根據自己的業務場景所需進行對應的改造。

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2020-11-17 11:18:31

Docker

2020-10-21 14:10:28

工具測試開發

2018-01-22 08:50:49

LinuxUbuntuCubic

2011-07-22 16:29:53

IOS Demo CD

2021-01-11 09:17:49

GitLabCIMonorepoDocker

2022-02-22 09:00:00

軟件開發CI/CD 管道工具

2025-04-22 08:20:00

Komodo開源開發

2021-09-02 07:04:45

Docker鏡像語言

2019-07-25 10:31:55

AWSDevOps架構

2019-12-24 11:00:51

FedoraLive CD系統運維

2021-09-07 08:23:45

GitOpsCICD

2021-01-12 09:40:42

軟件開發CICD

2021-07-02 16:30:01

CICDDevOps

2023-05-04 16:03:50

KubernetesCI/CD集成

2022-08-31 22:25:53

微服務架構DevOPs

2021-02-10 08:24:47

微服務CICD

2022-02-11 11:51:08

CI/CD網絡攻擊持續交付

2020-12-15 16:13:21

DevSecOpsCICD

2010-07-17 14:24:50

視頻網站流量Blue Coat

2017-08-01 09:35:03

點贊
收藏

51CTO技術棧公眾號

国产欧美在线| 亚洲伦乱视频| 成人免费视频一区| 国内精品久久久久久久久| 无码任你躁久久久久久老妇| 欧美78videosex性欧美| 不卡免费追剧大全电视剧网站| 欧美高清第一页| 手机在线成人av| sese综合| 中文字幕一区二区三区乱码在线| 99久久99久久| 国产性生活视频| 婷婷综合久久| 亚洲国产成人在线播放| av女优在线播放| 国产高清视频在线观看| 国产在线播精品第三| 久久综合亚洲社区| 不卡的一区二区| xx欧美视频| 日韩理论片网站| 成人av免费在线看| 日韩美女视频网站| 欧美精品系列| 日韩一区二区三区电影在线观看 | 色午夜这里只有精品| 男人操女人下面视频| 蜜桃视频m3u8在线观看| 亚洲欧美怡红院| 精品欧美国产| 国产农村妇女毛片精品| 日韩五码在线| 精品国偷自产在线视频99| 国产xxxxxxxxx| 粉嫩一区二区| 亚洲精品成人天堂一二三| 欧美视频1区| 国产伦理吴梦梦伦理| 亚洲精品在线二区| 久久伊人精品天天| 黑丝av在线播放| 精品国产伦一区二区三区观看说明 | 欧美精品在线观看91| 国产肥白大熟妇bbbb视频| 亚洲一级大片| 欧美妇女性影城| 800av在线免费观看| yw在线观看| 国v精品久久久网| 国产精品一区二区三区免费视频 | 婷婷综合另类小说色区| 在线国产99| 国产福利小视频在线| 99re视频这里只有精品| 成人在线免费网站| 国产区精品在线| 麻豆精品新av中文字幕| 欧洲一区二区视频| 日产欧产va高清| 伊人久久成人| 欧美国产日韩精品| 亚洲国产精品免费在线观看| 久久裸体网站| 最新69国产成人精品视频免费| 亚洲国产果冻传媒av在线观看| 日本99精品| 欧美一区二区三区视频在线 | 国产精品专区免费| 精品久久久久久国产| 无码人妻少妇伦在线电影| 四虎影视国产在线视频| 亚洲欧美日韩国产手机在线| 亚洲蜜桃av| 欧美一级淫片aaaaaa| 国产精品123| 99c视频在线| 亚洲精品一区二区三区不卡| 国产成人超碰人人澡人人澡| 99re国产| 天堂中文资源在线观看| aaa亚洲精品| 麻豆久久久9性大片| 欧美婷婷久久五月精品三区| 久久日韩粉嫩一区二区三区| 欧美高清视频一区| 国产大学生校花援交在线播放| 国产三级三级三级精品8ⅰ区| 日韩av一区二区三区美女毛片| www.成人.com| 欧美激情在线一区二区| 一本色道久久99精品综合| 黄色在线论坛| 亚洲精品一二三| 霍思燕三级露全乳照| 精精国产xxxx视频在线播放| 色婷婷av一区二区三区之一色屋| 91精品无人成人www| 精品国产乱码久久久久久鸭王1 | 成人做爰69片免网站| 日韩久久视频| 九九九久久国产免费| 日本天堂网在线观看| 亚洲欧美高清| 成人福利视频网| 刘亦菲久久免费一区二区| 99久久久久久| 亚洲免费不卡| 草草在线观看| 欧美艳星brazzers| 99999精品| 日韩大胆成人| 精品国内产的精品视频在线观看| 国产精品99无码一区二区| 亚洲精品麻豆| 国产精品精品视频| 国产精品久久久久久无人区| 成人涩涩免费视频| 亚洲精品在线视频观看| 久久一卡二卡| 欧美在线播放高清精品| 精人妻一区二区三区| 欧美日韩第一| 午夜精品久久17c| 在线观看中文字幕2021| 成人h动漫精品一区二区| 欧美日韩一区在线播放| a毛片在线看免费观看| 欧美性猛交xxxxx免费看| 嫩草影院国产精品| 国产精品调教视频| 日韩专区在线播放| 精品国产午夜福利| 国产成人自拍在线| 亚洲精品一区二区三区樱花| 波多野结衣视频一区二区| 欧美老肥妇做.爰bbww| 丰满大乳奶做爰ⅹxx视频 | 亚洲区一区二区| 国产精品成人免费一区二区视频| 久久成人羞羞网站| 欧美一区二区在线| 九色porny丨首页入口在线| 欧美精品日日鲁夜夜添| 西西大胆午夜视频| 激情综合视频| 99re视频在线| 欧美精品日韩少妇| 欧洲激情一区二区| 久久精品国产亚洲av麻豆| 欧美国内亚洲| 91精品久久久久久久久久久| 国产黄色免费在线观看| 欧美性猛交xxxx乱大交蜜桃| 老熟女高潮一区二区三区| 婷婷久久一区| 国产欧美精品一区二区| 国内三级在线观看| 欧美午夜www高清视频| 黄色av网址在线观看| 欧美精品不卡| 91中文在线视频| 国产婷婷视频在线| 在线视频观看一区| www.99热| 日本欧美大码aⅴ在线播放| 国产视频精品网| 日本在线人成| 欧美日韩激情一区二区| 黄色片网站在线播放| 日韩avvvv在线播放| 日韩久久不卡| 精品69视频一区二区三区| 精品一区二区电影| 精品国产午夜福利| 国产精品美女一区二区在线观看| 色乱码一区二区三区在线| 久久久综合色| 亚洲字幕在线观看| 青春草在线视频| 亚洲大尺度美女在线| 四虎成人精品永久免费av| 成人精品小蝌蚪| 欧美 丝袜 自拍 制服 另类| 都市激情亚洲欧美| 国语自产精品视频在免费| 午夜影院免费视频| 91成人免费电影| 人与动物性xxxx| 国产激情一区二区三区桃花岛亚洲| 在线观看av的网址| 欧美sss在线视频| 国产成人午夜视频网址| 3p在线观看| 日韩色视频在线观看| 九九九国产视频| 91欧美激情一区二区三区成人| 激情内射人妻1区2区3区| 日韩成人综合| 国产成人免费观看| 亚洲女色av| 亚洲区一区二区| 国产av无码专区亚洲av| 午夜精品久久久久久久久久| 亚洲精品乱码久久久久久久| 免费日韩一区二区| 在线观看一区二区三区三州| 国产精品久av福利在线观看| 日韩av第一页| a级网站在线播放| 亚洲男人第一网站| 国产日韩欧美中文字幕| 亚洲v精品v日韩v欧美v专区| 人妻一区二区视频| 国产99精品国产| 丁香啪啪综合成人亚洲| 久久精品99久久无色码中文字幕| 999国产在线| 亚洲天堂一区二区| 欧美激情伊人电影| 日韩精品成人av| 日韩成人性视频| 9i精品福利一区二区三区| 一色屋精品亚洲香蕉网站| 久久精品一二三四| 日日摸夜夜添夜夜添国产精品| 最新av在线免费观看| 美女久久久久| 国产精品一区二区免费看| 福利视频一区| 欧美亚洲激情在线| 日韩另类在线| 中文字幕久久久av一区| 四虎在线视频| 日韩欧美不卡一区| 亚洲香蕉在线视频| 色999日韩国产欧美一区二区| 久久影院一区二区| 亚洲私人黄色宅男| 精品国产aaa| 99国产精品久久久久久久久久| 999热精品视频| 琪琪一区二区三区| 久久国产亚洲精品无码| 99精品国产一区二区三区| 久久久久久高清| 国产精品白丝av嫩草影院| 成人免费看片视频| 福利一区二区免费视频| 欧美一区亚洲一区| 51精品在线| 欧美日韩高清在线观看| 国产精品va在线观看视色| 在线观看成人黄色| 青青久在线视频| 日韩精品黄色网| 殴美一级特黄aaaaaa| 精品国产91乱码一区二区三区 | 国产精品男人的天堂| 亚洲少妇视频| 午夜精品一区二区三区视频免费看| 91社区在线高清| 国产亚洲欧洲在线| 国产精品一区在线看| 亚洲天堂av网| 国产视频网站在线| 一本色道久久88精品综合| 日本一区二区三区在线观看视频| 亚洲国产中文字幕在线观看| 高清一区二区三区四区| 亚洲精品www久久久| 少妇荡乳情欲办公室456视频| 精品国产伦一区二区三区观看方式 | 国产在线拍揄自揄拍| 亚洲男帅同性gay1069| 成人性生活毛片| 亚洲免费在线电影| 青青操在线视频观看| 日韩毛片精品高清免费| www日韩在线| 亚洲激情欧美激情| 国产真实夫妇交换视频| 香港成人在线视频| 欧美一级视频免费观看| 欧美性jizz18性欧美| av首页在线观看| 欧美丰满少妇xxxxx高潮对白 | 美女视频网站久久| 亚洲高清视频免费| 成人av网站在线| 三级网站在线免费观看| 国产精品午夜在线观看| 日韩视频中文字幕在线观看| 亚洲一区在线视频| 手机看片久久久| 欧美日韩成人在线一区| 在线免费看91| 在线播放/欧美激情| 亚洲精品字幕在线| 亚洲欧美日韩天堂| 麻豆电影在线播放| 国内精品久久久久| 成人国产精品一区二区免费麻豆| 91在线短视频| 亚洲区小说区图片区qvod| 在线观看欧美亚洲| 99国产一区| 九九九九九九九九| av一区二区三区| av最新在线观看| 欧美日韩裸体免费视频| 中文字幕日韩免费| 欧美精品三级在线观看| 亚洲av成人无码网天堂| 日韩中文第一页| 美女的胸无遮挡在线观看| 国产一区二区丝袜| 日韩高清电影免费| 国产精品久久成人免费观看| 小嫩嫩精品导航| 日韩av成人网| 亚洲国产高清在线观看视频| 国产五月天婷婷| 欧美嫩在线观看| 视频一区二区在线播放| 久久国产精品电影| 欧美极度另类| 99精彩视频在线观看免费| 色吊丝一区二区| 日韩人妻一区二区三区蜜桃视频| 六月丁香综合| 午夜不卡久久精品无码免费| 日韩毛片精品高清免费| 乱子伦一区二区三区| 亚洲国产精品电影| 国产不卡在线| 国产精品自在线| 亚洲aa在线| 野外做受又硬又粗又大视频√| 极品少妇一区二区三区精品视频| 国产精品jizz| 中文字幕在线不卡| 天堂а√在线中文在线新版| 精品久久久久久久久久久久久久久| www.亚洲.com| 国产成人avxxxxx在线看 | 欧美一区二区人人喊爽| www.国产精品.com| 国产精品福利网站| 国产欧美高清视频在线| 国产 福利 在线| proumb性欧美在线观看| 黄色一级片在线| 日韩一二在线观看| 国产黄a三级三级三级av在线看 | 日本一区二区三区视频在线播放| 亚洲午夜极品| 性生活在线视频| 亚洲欧美影音先锋| 国产精品无码在线播放| 日韩一区二区三区在线播放| 午夜无码国产理论在线| 日本一区二区三区免费观看| 天堂久久久久va久久久久| 中文字幕第4页| 91激情五月电影| 里番在线观看网站| 91久久精品一区二区别| 尤物网精品视频| 香蕉视频久久久| 欧美一区三区四区| 韩国精品一区| 日韩高清av电影| 激情图片小说一区| 日韩精品一区二区av| 亚洲天堂男人的天堂| 日韩av懂色| av免费看网址| 国产三级精品视频| 国产乱淫片视频| 456国产精品| 中文字幕中文字幕在线十八区 | 在线国产精品播放| 成人在线视频国产| 亚洲色成人www永久在线观看| 久久综合久久久久88| 91免费视频播放| 久久久久久久国产精品视频| 欧美男gay| 国产精品99久久久精品无码| 色狠狠av一区二区三区| 黄色国产网站在线播放| 久久伊人一区| 国产麻豆精品一区二区| 美女又爽又黄免费视频| 欧美成人免费大片| 精品国产1区| 亚洲精品国产成人av在线| 欧美日韩一区二区在线观看视频 | 国产精品自拍偷拍|