Docker 實戰(zhàn)總結(jié)(非常全面)彼棍,趕緊收藏灭忠!

image.png

Docker簡介

Docker是一個開源的應(yīng)用容器引擎,開發(fā)者可以打包自己的應(yīng)用到容器里面座硕,然后遷移到其他機器的docker應(yīng)用中弛作,可以實現(xiàn)快速部署。

簡單的理解华匾,docker就是一個軟件集裝箱化平臺映琳,就像船只、火車蜘拉、卡車運輸集裝箱而不論其內(nèi)部的貨物一樣萨西,軟件容器充當(dāng)軟件部署的標(biāo)準(zhǔn)單元,其中可以包含不同的代碼和依賴項旭旭。

按照這種方式容器化軟件谎脯,開發(fā)人員和 IT 專業(yè)人員只需進行極少修改或不修改,即可將其部署到不同的環(huán)境持寄,如果出現(xiàn)的故障源梭,也可以通過鏡像,快速恢復(fù)服務(wù)稍味。
image

Docker優(yōu)勢

1.特性優(yōu)勢
image.png

2.資源優(yōu)勢
image

Docker基本概念

Client(客戶端):是Docker的用戶端废麻,可以接受用戶命令和配置標(biāo)識,并與Docker daemon通信模庐。
Images(鏡像):是一個只讀模板烛愧,含創(chuàng)建Docker容器的說明,它與操作系統(tǒng)的安裝光盤有點像赖欣。
Containers(容器):鏡像的運行實例屑彻,鏡像與容器的關(guān)系類比面向?qū)ο笾械念惡蛯ο蟆?br> Registry(倉庫):是一個集中存儲與分發(fā)鏡像的服務(wù)。最常用的Registry是官方的Docker Hub 顶吮。

image

Docker改變了什么社牲?

Docker改變了云服務(wù),使云服務(wù)的共融共通的理想逐步成為了可能悴了。并且Docker 已經(jīng)是云策略的一部分搏恤,許多開發(fā)者正在計劃使用 Docker 將業(yè)務(wù)遷移到云端违寿。另外,為了避免被云服務(wù)供應(yīng)商綁定熟空,Docker成為很多開發(fā)者的首選藤巢。

Docker改變了產(chǎn)品交付,為產(chǎn)品的整個生命周期提供了一整套的解決方案和流程息罗。

Docker改變了開發(fā)方式掂咒,提供了簡化的環(huán)境配置、封裝的運行環(huán)境以及統(tǒng)一的環(huán)境迈喉。并且提供了快速部署的方式绍刮。

Docker改變了測試,多版本測試變得極為方便挨摸,快速構(gòu)建測試環(huán)境也變得更加簡單并且無需開發(fā)人員干預(yù)或者搭建孩革。

Docker改變了運維,環(huán)境的一致性讓運維變得更加簡單得运,同時熱更新的支持讓運維不再需要半夜加班部署更新膝蜈,更新可以隨時進行。當(dāng)出現(xiàn)重大問題時熔掺,還能快速回滾到指定版本饱搏。

Docker改變了架構(gòu),自動化擴容支持讓架構(gòu)變得更加簡單瞬女,分布式系統(tǒng)也更加易于搭建和支持窍帝。同時遺留的單體應(yīng)用也很易于轉(zhuǎn)變?yōu)楝F(xiàn)代應(yīng)用努潘。
image

總之诽偷,在某種程度上,Docker改變了產(chǎn)品開發(fā)中的一些游戲規(guī)則疯坤。雖然Docker是一項技術(shù)报慕,但是它也帶來了新的思維,新的流程和工作方法压怠,Docker在推動行業(yè)的發(fā)展眠冈,Docker已經(jīng)在改變世界,并且在逐步的變?yōu)槭聦崱?/p>

Docker安裝使用

操作系統(tǒng):CentOS 7

1菌瘫、安裝依賴

yum install -y yum-utils device-mapper-persistent-data lvm2

2蜗顽、添加軟件源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 指定阿里云鏡像源

3、安裝docker-ce(對系統(tǒng)內(nèi)核有一定要求雨让,centos6不支持)

yum clean all  yum makecache fast        # 重新生成緩存
yum -y install docker-ce docker-ce-cli containerd.io

4雇盖、設(shè)置自啟并啟動

systemctl enable docker
systemctl start docker

5、查看版本

docker version

運行示例:Nginx

1栖忠、搜索并下載鏡像

docker search nginx
docker pull nginx
image

2崔挖、啟動一個容器并映射端口到本地

docker run -d -p 8080:80 --name Nginx nginx    # 參數(shù)詳解見下文
image

3贸街、訪問本地映射端口
image

Docker常用命令

1.鏡像控制

搜索鏡像:docker  search  [OPTIONS]  TERM

上傳鏡像:docker  push  [OPTIONS]  NAME[:TAG]

下載鏡像:docker  pull  [OPTIONS]  NAME[:TAG]

提交鏡像:docker  commit [OPTIONS]  CONTAINER  NAME[:TAG]

構(gòu)建鏡像:docker  build  [OPTIONS]  PATH

刪除鏡像:docker  rmi [OPTIONS]  IMAGE  [IMAGE...]

增加鏡像標(biāo)簽:docker  tag  SOURCE_IMAGE[:TAG]  TARGET_IMAGE[:TAG]

查看所有鏡像:docker  images  [OPTIONS]  [REPOSITORY[:TAG]]
image

2.容器控制

啟動/重啟容器:docker start/restart CONTAINER

停止/強停容器:docker stop/ kill CONTAINER

刪除容器:docker rm [OPTIONS] CONTAINER [CONTAINER...]

重命名容器:docker rename CONTAINER CONTAINER_NEW

進入容器:docker attach CONTAINER

執(zhí)行容器命令:docker exec CONTAINER COMMAND

查看容器日志:docker logs [OPTIONS] CONTAINER

查看容器列表:docker ps [OPTIONS]
image

3.容器啟動

docker  run  [OPTIONS]  IMAGE  [COMMAND]  [ARG...]

-d : 后臺運行容器,并返回容器ID
-i:以交互模式運行容器狸相,通常與 -t 同時使用
-t:為容器重新分配一個偽輸入終端薛匪,通常與 -i 同時使用
-v:綁定掛載目錄
--name="mycontainer": 為容器指定一個名稱
--net="bridge": 指定容器的網(wǎng)絡(luò)連接類型,支持如下:
     bridge / host / none / container:<name|id>
-p/-P :端口映射脓鹃,格式如圖:
image

4.其他命令

查看docker信息:docker info

docker命令幫助:docker run --help

復(fù)制文件到容器:docker cp custom.conf Nginx:/etc/nginx/conf.d/

更新容器啟動項:docker container update --restart=always nginx

查看docker日志:tail -f /var/log/messages
image

更多可以參考官網(wǎng):https://docs.docker.com/engine/reference/commandline/cli/

image

Docker鏡像構(gòu)建

1.Docker commit(1運行2修改3保存)

#運行容器
docker run -dit -p 8080:80 --name Nginx nginx

#修改容器(這里我只是做個演示逸尖,所以就復(fù)制一下文件,具體修改需要根據(jù)你實際情況)
docker cp custom.conf Nginx:/etc/nginx/conf.d/

#將容器保存為新的鏡像
docker commit Nginx zwx/nginx
image

2.Dockerfile(1編寫2構(gòu)建)

#編寫Dockerfile文件
vim Dockerfile

#執(zhí)行Dockerfile文件
docker build -t zwx/nginx . #后面有個點瘸右,代表當(dāng)前目錄下dockerfile文件
image

3.Dockerfile 常用指令
image

Docker本地倉庫

1冷溶、拉取鏡像倉庫

docker search registry
docker pull registry

2、啟動鏡像服務(wù)

docker run -dit \
--name=Registry \  # 指定容器名稱
-p 5000:5000 \    # 倉庫默認(rèn)端口是5000尊浓,映射到宿主機逞频,這樣可以使用宿主機地址訪問
--restart=always \   # 自動重啟,這樣每次docker重啟后倉庫容器也會自動啟動
--privileged=true \  # 增加安全權(quán)限栋齿,一般可不加
-v /usr/local/my_registry:/var/lib/registry  \    # 把倉庫鏡像數(shù)據(jù)保存到宿主機
registry

3苗胀、注冊https協(xié)議(需要通過本地倉庫下載鏡像,均需要配置)

vim /etc/docker/daemon.json # 默認(rèn)無此文件瓦堵,需自行添加基协,有則追加一下內(nèi)容。
   { "insecure-registries":[" xx.xx.xx.xx:5000"] 
   }  #指定ip地址或域名

4菇用、新增tag指明倉庫地址

docker tag zwx/nginx x.xx.xx.xx:5000/zwx/nginx  # 如果構(gòu)建時已經(jīng)指定倉庫地址澜驮,則可以省略

5、上傳鏡像到本地倉庫

docker push x.xx.xx.xx:5000/zwx/nginx

6惋鸥、查看本地倉庫

curl -XGET http://x.xx.xx.xx:5000/v2/_catalog
image.png

Docker與圖形管理工具Portainer

1.簡介 Portainer是Docker的圖形化管理工具杂穷,提供狀態(tài)顯示面板、應(yīng)用模板快速部署卦绣、容器鏡像網(wǎng)絡(luò)數(shù)據(jù)卷的基本操作(包括上傳下載鏡像耐量,創(chuàng)建容器等操作)。

事件日志顯示滤港、容器控制臺操作廊蜒、Swarm集群和服務(wù)等集中管理和操作、登錄用戶管理和控制等功能溅漾。功能十分全面山叮,基本能滿足中小型單位對容器管理的全部需求。
image

2.安裝使用

#搜索并下載鏡像
docker search portainer
docker pull portainer/portainer

#單機方式運行
docker run -d \
-p 9000:9000 \ # portainer默認(rèn)端口是9000添履,映射到本地9000端口屁倔,通過本地地址訪問
--restart=always \  # 設(shè)置自動重啟
-v /var/run/docker.sock:/var/run/docker.sock \  # 單機必須指定docker.sock
--name Prtainer portainer/portainer

訪問http://localhost:9000,首次登陸需要注冊用戶,給admin用戶設(shè)置密碼缝龄,然后單機版選擇local連接即可汰现。

image

控制管理
image

Docker與集群管理工具Swarm

1.簡介

Swarm是Docker官方提供的一款集群管理工具挂谍,其主要作用是把若干臺Docker主機抽象為一個整體,并且通過一個入口統(tǒng)一管理這些Docker主機上的各種Docker資源瞎饲。
image

2.安裝使用

Swarm 在 Docker 1.12 版本之前屬于一個獨立的項目口叙,在 Docker 1.12 版本發(fā)布之后,該項目合并到了 Docker 中嗅战,成為 Docker 的一個子命令妄田。

啟動swarm集群只需要執(zhí)行初始化命令即可:

docker swarm init \       # 默認(rèn)初始化節(jié)點為管理節(jié)點
--advertise-addr xx.xx.xx.xx \   #指定使用的ip
--listen-addr xx.xx.xx.xx:2377   #指定監(jiān)聽ip和port,默認(rèn)為2377

設(shè)置manager節(jié)點

docker swarm join-token manager  #獲取管理節(jié)點token驮捍,放入下面命令

docker swarm join \
--advertise-addr xx.xx.xx.xx \
--listen-addr xx.xx.xx.xx:2377 \
--token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz \
xx.xx.xx.xx:2377

設(shè)置worker節(jié)點

docker swarm join-token worker  #獲取工作節(jié)點token疟呐,放入下面命令

docker swarm join \
--advertise-addr xx.xx.xx.xx \
--listen-addr xx.xx.xx.xx:2377 \
--token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz \
xx.xx.xx.xx:2377

查看節(jié)點

docker node ls

創(chuàng)建服務(wù)

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

--detach , -d:  指定容器運行于前臺還是后臺,默認(rèn)為false
--name:  服務(wù)名稱
--network:  網(wǎng)絡(luò)連接
--publish , -p:  端口映射
--env , -e:  設(shè)置環(huán)境變量
--tty , -t:  分配tty設(shè)備东且,該可以支持終端登錄
--mount:  文件掛載
--replicas:  指定任務(wù)數(shù)量

對比K8s究竟有何異同?

  • a)出生不同

Google根據(jù)其在Linux上容器管理經(jīng)驗启具,改造到docker管理上,就是kubernetes珊泳。他的在許多方面表現(xiàn)良好,最重要的是構(gòu)造于Google多年的寶貴經(jīng)驗只上鲁冯。

kubernetes并不是為了docker寫的,kubernetes把集群帶到了一個全新的高度,代價是學(xué)習(xí)曲線比較陡色查。docker-swarm 使用了一個不同的方式,它是docker原生的集群工具薯演。

最方便的部分是它暴露了docker標(biāo)準(zhǔn)的編程接口,意味著你之前一直在使用的任何與docker溝通的工具(docker CLI, docker compose等)秧了,都可以無縫的在docker swarm上使用跨扮。

  • b)安裝配置不同

安裝設(shè)置swarm非常簡單,簡單明了并且很靈活验毡。我們需要做的就是安裝一個服務(wù)發(fā)現(xiàn)工具衡创,然后在所有的節(jié)點上安裝swarm容器。

相比較而言米罚,kubernetes的安裝就有點復(fù)雜晦澀了钧汹。不同的操作系統(tǒng)上安裝都不同丈探。每個操作系統(tǒng)都有自己的獨立安裝指令录择。

  • c)運行方式不同

使用Swarm和使用容器沒有什么不同。比如碗降,你習(xí)慣于使用Docker CLI(命令行接口)隘竭,你可以繼續(xù)使用幾乎相同的命令。

如果你習(xí)慣于使用Docker Componse來運行容器讼渊,你可以繼續(xù)在Swarm集群中使用动看。不管你之前習(xí)慣于怎么使用容器,你仍舊可以使用爪幻,只是在更大級別的集群中使用菱皆。

Kubernetes要求你去學(xué)習(xí)它自己的CLI(命令行接口)和配置须误。你不能使用你之前創(chuàng)建的docker-compose.yml配置,你必須要去新建與Kubernetes對應(yīng)的配置仇轻。

你也不能使用之前學(xué)習(xí)的Docker CLI(命令行接口)京痢。你必須要去學(xué)習(xí) Kubernetes CLI(命令行接口)

最后,當(dāng)需要在Docker Swarm 和 Kubernetes做出選擇時篷店,可以考慮如下幾點:

  • 你是否想依賴于Docker自己來解決集群的問題祭椰。如果是,選擇Swarm疲陕。如果某些功能在Docker中不支持方淤,那它也非常可能在Swarm中找不到蹄殃,因為Swarm是依賴于Docker API的携茂。
  • 另外一方面,如果你想要一個工具可以解決Docker的限制诅岩,Kubernetes將是不錯的選擇邑蒋。Kubernetes不是基于Docker,而是基于Google多年對于管理容器的經(jīng)驗按厘。它是按照自己的方式來行事医吊。

Docker運維流程圖

image

Docker配置管理

  • 1.用了容器以后,還需要配置管理嗎逮京?

起初我們跟Docker官方一樣卿堂,屬于理想主義派。天真的認(rèn)為容器就應(yīng)該是inmutable的懒棉,當(dāng)需要配置變更的時候草描,重新構(gòu)建鏡像重新部署。

基于這一思路策严,我們在cSphere中添加了個鏡像自動構(gòu)建模塊穗慕,用戶可以配置代碼倉庫的地址。服務(wù)的配置文件保存于Git或者SVN庫中妻导,需要配置變更時逛绵,向版本庫中Push一下,自動通過hook觸發(fā)鏡像構(gòu)建倔韭,并自動完成線上容器的重建术浪。

通過這套系統(tǒng),用戶可以非常方便的批量更新線上的服務(wù)寿酌,并不局限于配置文件的變更胰苏,代碼的變更也天生支持。經(jīng)過實際使用醇疼,這套系統(tǒng)能夠很好的滿足開發(fā)和測試環(huán)境的需求硕并,提升工作效率法焰。

但是,在生產(chǎn)環(huán)境中使用的時候倔毙,我們發(fā)現(xiàn)這種流程其實并不那么完美壶栋,主要表現(xiàn)在:鏡像構(gòu)建和部署雖然自動化了,但構(gòu)建是針對VCS中的某個倉庫的普监,改一行配置就得整體重新構(gòu)建一下贵试,在更新容器時還需要把鏡像重新分發(fā)到所有機器上,配置變更速度太慢凯正。這種方式的配置變更會涉及到服務(wù)的重啟毙玻,這在生產(chǎn)環(huán)境某些場景下是不可接受的 ,有可能引起短暫的服務(wù)中斷廊散。

  • 2.應(yīng)用配置文件應(yīng)該需要做到什么桑滩?

Docker應(yīng)用配置文件能夠保持能夠支持針對不同環(huán)境作出更改。另外配置文件支持在線更改允睹,重啟就生效运准。一般分為以下兩種方式。

a)Docker環(huán)境變量

需要在制作鏡像的時候就需要提前想好缭受,有哪些參數(shù)是部署容器的時候會經(jīng)常更改胁澳, 然后把這些參數(shù)抽出來做成容器的環(huán)境變量,然后在部署的容器的時候填入不同的參數(shù)即可米者。但是如果后續(xù)發(fā)現(xiàn)有一些參數(shù)不同場景下部署的時候也會修改韭畸,那就需要再重新制作鏡像了。

b)應(yīng)用配置文件

上述的管理方式不太靈活蔓搞,靈活的管理方式是將配置文件和鏡像剝離開胰丁,這樣就不會被鏡像給綁定了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喂分,一起剝皮案震驚了整個濱河市锦庸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒲祈,老刑警劉巖甘萧,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讳嘱,居然都是意外死亡幔嗦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門沥潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嬉挡,你說我怎么就攤上這事钝鸽』阈簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵拔恰,是天一觀的道長因谎。 經(jīng)常有香客問我,道長颜懊,這世上最難降的妖魔是什么财岔? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮河爹,結(jié)果婚禮上匠璧,老公的妹妹穿的比我還像新娘。我一直安慰自己咸这,他們只是感情好夷恍,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媳维,像睡著了一般酿雪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侄刽,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天逝薪,我揣著相機與錄音刑枝,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛谴轮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播破喻,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼职祷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁鳖?” 一聲冷哼從身側(cè)響起磺芭,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醉箕,沒想到半個月后钾腺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡讥裤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年放棒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片己英。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡间螟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厢破,我是刑警寧澤荣瑟,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站摩泪,受9級特大地震影響笆焰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜见坑,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一嚷掠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荞驴,春花似錦不皆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孙蒙,卻和暖如春项棠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挎峦。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工香追, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坦胶。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓透典,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顿苇。 傳聞我的和親對象是個殘疾皇子峭咒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355