Docker學(xué)習(xí)筆記

一览闰、簡(jiǎn)介

1.1 什么是虛擬化

??在計(jì)算機(jī)中,虛擬化(英語(yǔ):Virtualization)是一種資源管理技術(shù)巷折,是將計(jì)算機(jī)的各種實(shí)體資源压鉴,如服務(wù)器、網(wǎng)絡(luò)锻拘、內(nèi)存及存儲(chǔ)等油吭,予以抽象击蹲、轉(zhuǎn)換后呈現(xiàn)出來(lái),打破實(shí)體結(jié)構(gòu)間的不可切割的障礙婉宰,使用戶可以比原本的組態(tài)更好的方式來(lái)應(yīng)用這些資源歌豺。這些資源的新虛擬部份是不受現(xiàn)有資源的架設(shè)方式,地域或物理組態(tài)所限制心包。一般所指的虛擬化資源包括計(jì)算能力和資料存儲(chǔ)世曾。
??在實(shí)際的生產(chǎn)環(huán)境中,虛擬化技術(shù)主要用來(lái)解決高性能的物理硬件產(chǎn)能過(guò)剩和老的舊的硬件產(chǎn)能過(guò)低的重組重用谴咸,透明化底層物理硬件,從而最大化的利用物理硬件對(duì)資源充分利用骗露。虛擬化技術(shù)種類很多岭佳,例如:軟件虛擬化、硬件虛擬化萧锉、內(nèi)存虛擬化珊随、網(wǎng)絡(luò)虛擬化(vip)、桌面虛擬化柿隙、服務(wù)虛擬化叶洞、虛擬機(jī)等等。

1.2 什么是Docker

??Docker是一個(gè)開源項(xiàng)目禀崖,誕生于2013 年初衩辟,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目。它基于 Google 公司推出的Go語(yǔ)言實(shí)現(xiàn)波附。項(xiàng)目后來(lái)加入了Linux 基金會(huì)艺晴,遵從了Apache 2.0 協(xié)議,項(xiàng)目代碼在GitHub (https://github.com/docker/docker) 上進(jìn)行維護(hù)掸屡。

??Securely build, share and run any application, anywhere
??Docker 自開源后受到廣泛的關(guān)注和討論封寞,以至于 dotCloud 公司后來(lái)都改名為 Docker Inc。Redhat 已經(jīng)在其RHEL6.5 中集中支持 Docker仅财;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用狈究。
??Docker 項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)盏求。
??在 LXC 的基礎(chǔ)上 Docker 進(jìn)行了進(jìn)一步的封裝抖锥,讓用戶不需要去關(guān)心容器的管理,使得操作更為簡(jiǎn)便风喇。用戶操作Docker 的容器就像操作一個(gè)快速輕量級(jí)的虛擬機(jī)一樣簡(jiǎn)單宁改。

為什么選擇Docker?

  • 更高效的利用系統(tǒng)資源
    ??由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷,Docker 對(duì)系統(tǒng)資源的利用率更高魂莫。無(wú)論是應(yīng)用執(zhí)行速度还蹲、內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此谜喊,相比虛擬機(jī)技術(shù)潭兽,一個(gè)相同配置的主機(jī),往往可以運(yùn)行更多數(shù)量的應(yīng)用斗遏。
  • 更快速的啟動(dòng)時(shí)間
    ??傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘山卦,而 Docker 容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核诵次,無(wú)需啟動(dòng)完整的操作系統(tǒng)账蓉,因此可以做到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間逾一。大大的節(jié)約了開發(fā)铸本、測(cè)試、部署的時(shí)間遵堵。
  • 一致的運(yùn)行環(huán)境
    ??開發(fā)過(guò)程中一個(gè)常見的問(wèn)題是環(huán)境一致性問(wèn)題箱玷。由于開發(fā)環(huán)境、測(cè)試環(huán)境陌宿、生產(chǎn)環(huán)境不一致锡足,導(dǎo)致有些 bug 并未在開發(fā)過(guò)程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境壳坪,確保了應(yīng)用運(yùn)行環(huán)境一致性舶得,從而不會(huì)再出現(xiàn)「這段代碼在我機(jī)器上沒(méi)問(wèn)題啊」 這類問(wèn)題。
  • 持續(xù)交付和部署
    ??對(duì)開發(fā)和運(yùn)維(DevOps)人員來(lái)說(shuō)爽蝴,最希望的就是一次創(chuàng)建或配置扩灯,可以在任意地方正常運(yùn)行。
    ??使用 Docker 可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成霜瘪、持續(xù)交付珠插、部署。開發(fā)人員可以通過(guò) Dockerfile 來(lái)進(jìn)行鏡像構(gòu)建颖对,并結(jié)合持續(xù)集成(Continuous Integration) 系統(tǒng)進(jìn)行集成測(cè)試捻撑,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像俐镐,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進(jìn)行自動(dòng)部署虎韵。
    ??而且使用 Dockerfile 使鏡像構(gòu)建透明化遥诉,不僅僅開發(fā)團(tuán)隊(duì)可以理解應(yīng)用運(yùn)行環(huán)境柠横,也方便運(yùn)維團(tuán)隊(duì)理解應(yīng)用運(yùn)行所需條件,幫助更好的生產(chǎn)環(huán)境中部署該鏡像钥顽。
  • 更輕松的遷移
    ??由于 Docker 確保了執(zhí)行環(huán)境的一致性块仆,使得應(yīng)用的遷移更加容易脐彩。Docker 可以在很多平臺(tái)上運(yùn)行徙歼,無(wú)論是物理機(jī)犁河、虛擬機(jī)鳖枕、公有云、私有云桨螺,甚至是筆記本宾符,其運(yùn)行結(jié)果是一致的。因此用戶可以很輕易的將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用灭翔,遷移到另一個(gè)平臺(tái)上魏烫,而不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無(wú)法正常運(yùn)行的情況。
  • 更輕松的維護(hù)和擴(kuò)展
    ??Docker 使用的分層存儲(chǔ)以及鏡像的技術(shù)肝箱,使得應(yīng)用重復(fù)部分的復(fù)用更為容易哄褒,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡(jiǎn)單煌张。此外读处,Docker 團(tuán)隊(duì)同各個(gè)開源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的官方鏡像,既可以直接在生產(chǎn)環(huán)境使用唱矛,又可以作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本井辜。

1.3 容器與虛擬機(jī)的比較

??下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處绎谦,可見容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng)粥脚,而傳統(tǒng)方式則是在硬件層面實(shí)現(xiàn)窃肠。



與傳統(tǒng)的虛擬機(jī)相比,Docker優(yōu)勢(shì)體現(xiàn)為啟動(dòng)速度快刷允、占用體積小冤留。


1.4 Docker組件

1.4.1 Docker服務(wù)器與客戶端

??Docker是一個(gè)客戶端-服務(wù)器(C/S)架構(gòu)程序。Docker客戶端只需要向Docker服務(wù)器或者守護(hù)進(jìn)程發(fā)出請(qǐng)求树灶,服務(wù)器或者守護(hù)進(jìn)程將完成所有工作并返回結(jié)果纤怒。Docker提供了一個(gè)命令行工具Docker以及一整套R(shí)ESTful API。你可以在同一臺(tái)宿主機(jī)上運(yùn)行Docker守護(hù)進(jìn)程和客戶端天通,也可以從本地的Docker客戶端連接到運(yùn)行在另一臺(tái)宿主機(jī)上的遠(yuǎn)程Docker守護(hù)進(jìn)程泊窘。


1.4.2 Docker鏡像與容器

??鏡像是構(gòu)建Docker的基石。用戶基于鏡像來(lái)運(yùn)行自己的容器像寒。鏡像也是Docker生命周期中的“構(gòu)建”部分烘豹。鏡像是基于聯(lián)合文件系統(tǒng)的一種層式結(jié)構(gòu),由一系列指令一步一步構(gòu)建出來(lái)诺祸。例如:

  • 添加一個(gè)文件携悯;
  • 執(zhí)行一個(gè)命令;
  • 打開一個(gè)窗口筷笨。

??也可以將鏡像當(dāng)作容器的“源代碼”憔鬼。鏡像體積很小龟劲,非常“便攜”逊彭,易于分享咸灿、存儲(chǔ)和更新。
??Docker可以幫助你構(gòu)建和部署容器侮叮,你只需要把自己的應(yīng)用程序或者服務(wù)打包放進(jìn)容器即可避矢。容器是基于鏡像啟動(dòng)起來(lái)的,容器中可以運(yùn)行一個(gè)或多個(gè)進(jìn)程囊榜。我們可以認(rèn)為审胸,鏡像是Docker生命周期中的構(gòu)建或者打包階段,而容器則是啟動(dòng)或者執(zhí)行階段卸勺。容器基于鏡像啟動(dòng)砂沛,一旦容器啟動(dòng)完成后,我們就可以登錄到容器中安裝自己需要的軟件或者服務(wù)曙求。

所以Docker容器就是:

  • 一個(gè)鏡像格式碍庵;
  • 一些列標(biāo)準(zhǔn)操作;
  • 一個(gè)執(zhí)行環(huán)境悟狱。

??Docker借鑒了標(biāo)準(zhǔn)集裝箱的概念静浴。標(biāo)準(zhǔn)集裝箱將貨物運(yùn)往世界各地,Docker將這個(gè)模型運(yùn)用到自己的設(shè)計(jì)中挤渐,唯一不同的是:集裝箱運(yùn)輸貨物苹享,而Docker運(yùn)輸軟件。
??和集裝箱一樣浴麻,Docker在執(zhí)行上述操作時(shí)得问,并不關(guān)心容器中到底裝了什么,它不管是web服務(wù)器软免,還是數(shù)據(jù)庫(kù)宫纬,或者是應(yīng)用程序服務(wù)器什么的。所有的容器都按照相同的方式將內(nèi)容“裝載”進(jìn)去膏萧。
??Docker也不關(guān)心你要把容器運(yùn)到何方:我們可以在自己的筆記本中構(gòu)建容器哪怔,上傳到Registry,然后下載到一個(gè)物理的或者虛擬的服務(wù)器來(lái)測(cè)試向抢,在把容器部署到具體的主機(jī)中认境。像標(biāo)準(zhǔn)集裝箱一樣,Docker容器方便替換挟鸠,可以疊加叉信,易于分發(fā),并且盡量通用艘希。

1.4.2.1 Registry(注冊(cè)中心)

??Docker用Registry來(lái)保存用戶構(gòu)建的鏡像硼身。Registry分為公共和私有兩種硅急。Docker公司運(yùn)營(yíng)公共的Registry叫做Docker Hub。用戶可以在Docker Hub注冊(cè)賬號(hào)佳遂,分享并保存自己的鏡像(說(shuō)明:在Docker Hub下載鏡像巨慢营袜,可以自己構(gòu)建私有的Registry)。
https://hub.docker.com/

二丑罪、Docker安裝

2.1 安裝Docker

??Docker官方建議在Ubuntu中安裝荚板,因?yàn)镈ocker是基于Ubuntu發(fā)布的,而且一般Docker出現(xiàn)的問(wèn)題Ubuntu是最先更新或者打補(bǔ)丁的吩屹。在很多版本的CentOS中是不支持更新最新的一些補(bǔ)丁包的跪另。
??由于我的環(huán)境使用的是CentOS,因此這里我將Docker安裝到CentOS上煤搜。注意:這里建議安裝在CentOS7.x以上的版本免绿,在CentOS6.x的版本中,安裝前需要安裝其他很多的環(huán)境而且Docker很多補(bǔ)丁不支持更新擦盾。

  1. yum 包更新到最新
    yum update
  2. 安裝需要的軟件包嘲驾, yum-util 提供yum-config-manager功能,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的
    yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 設(shè)置yum源為阿里云
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安裝docker
    yum -y install docker-ce
  5. 安裝后查看docker版本
    docker -v

2.2 設(shè)置ustc的鏡像

??ustc是老牌的linux鏡像服務(wù)提供者了迹卢,還在遙遠(yuǎn)的ubuntu 5.04版本的時(shí)候就在用辽故。ustc的docker鏡像加速器速度很快。ustc docker mirror的優(yōu)勢(shì)之一就是不需要注冊(cè)婶希,是真正的公共服務(wù)。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker

編輯該文件

mkdir -p /etc/docker
vim /etc/docker/daemon.json

在該文件中輸入如下內(nèi)容

{
 "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

2.3 Docker的啟動(dòng)與停止

啟動(dòng)docker:
systemctl start docker
停止docker
systemctl stop docker
重啟docker
systemctl restart docker
查看docker狀態(tài)
systemctl status docker
開機(jī)啟動(dòng)
systemctl enable docker
查看docker概要信息
docker info
查看docker幫助文檔
docker --help

三蓬衡、常用命令

3.1 鏡像相關(guān)命令

3.1.1 查看鏡像

docker images

  • REPOSITORY :鏡像名稱
  • TAG :鏡像標(biāo)簽
  • IMAGE ID :鏡像ID
  • CREATED :鏡像的創(chuàng)建日期(不是獲取該鏡像的日期)
  • SIZE :鏡像大小

這些鏡像都是存儲(chǔ)在Docker宿主機(jī)的 /var/lib/docker 目錄下

3.1.2 搜索鏡像

如果你需要從網(wǎng)絡(luò)中查找需要的鏡像喻杈,可以通過(guò)以下命令搜索
docker search 鏡像名稱

  • NAME :倉(cāng)庫(kù)名稱
  • DESCRIPTION :鏡像描述
  • STARS :用戶評(píng)價(jià),反應(yīng)一個(gè)鏡像的受歡迎程度
  • OFFICIAL :是否官方
  • AUTOMATED :自動(dòng)構(gòu)建狰晚,表示該鏡像由Docker Hub自動(dòng)構(gòu)建流程創(chuàng)建的

3.1.3 拉取鏡像

拉取鏡像就是從中央倉(cāng)庫(kù)中下載鏡像到本地
docker pull 鏡像名稱
例如筒饰,我要下載centos7鏡像
docker pull centos:7

3.1.4 刪除鏡像

按鏡像ID刪除鏡像
docker rmi 鏡像ID
刪除所有鏡像
docker rmi `docker images -q`

3.2 容器相關(guān)命令

3.2.1 查看容器

查看正在運(yùn)行的容器
docker ps
查看所有容器
docker ps –a
查看最后一次運(yùn)行的容器
docker ps –l
查看停止的容器
docker ps -f status=exited

3.2.2 創(chuàng)建與啟動(dòng)容器

創(chuàng)建容器常用的參數(shù)說(shuō)明:
創(chuàng)建容器命令:
docker run
-i :表示運(yùn)行容器
-t :表示容器啟動(dòng)后會(huì)進(jìn)入其命令行。加入這兩個(gè)參數(shù)后壁晒,容器創(chuàng)建就能登錄進(jìn)去瓷们。即分配一個(gè)偽終端。
--name :為創(chuàng)建的容器命名秒咐。
-v :表示目錄映射關(guān)系(前者是宿主機(jī)目錄谬晕,后者是映射到宿主機(jī)上的目錄),可以使用多個(gè)-v 做多個(gè)目錄或文件映射携取。注意:最好做目錄映射攒钳,在宿主機(jī)上做修改,然后共享到容器上雷滋。
-d :在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器不撑,如果只加-i -t 兩個(gè)參數(shù)文兢,創(chuàng)建后就會(huì)自動(dòng)進(jìn)入容器)。
-p :表示端口映射焕檬,前者是宿主機(jī)端口姆坚,后者是容器內(nèi)的映射端口∈涤蓿可以使用多個(gè)-p做多個(gè)端口映射

  1. 交互式方式創(chuàng)建容器:
    docker run -it --name=容器名稱 鏡像名稱:標(biāo)簽/bin/bash
    這時(shí)我們通過(guò)ps命令查看兼呵,發(fā)現(xiàn)可以看到啟動(dòng)的容器,狀態(tài)為啟動(dòng)狀態(tài)

?退出當(dāng)前容器
?exit

  1. 守護(hù)式方式創(chuàng)建容器:
    docker run -di --name=容器名稱 鏡像名稱:標(biāo)簽
    登錄守護(hù)式容器方式:
    docker exec -it 容器名稱 (或者容器ID) /bin/bash

3.2.3 停止與啟動(dòng)容器

停止容器:
docker stop 容器名稱(或者容器ID)
啟動(dòng)容器:
docker start 容器名稱(或者容器ID)

3.2.4 文件拷貝

如果我們需要將文件拷貝到容器內(nèi)可以使用cp命令
docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
也可以將文件從容器內(nèi)拷貝出來(lái)
docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄

3.2.5 目錄掛載

??我們可以在創(chuàng)建容器的時(shí)候爆侣,將宿主機(jī)的目錄與容器內(nèi)的目錄進(jìn)行映射萍程,這樣我們就可以通過(guò)修改宿主機(jī)某個(gè)目錄的文件從而去影響容器。
創(chuàng)建容器 添加 -v 參數(shù)后邊為宿主機(jī)目錄:容器目錄兔仰,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
??如果你共享的是多級(jí)的目錄茫负,可能會(huì)出現(xiàn)權(quán)限不足的提示。
??這是因?yàn)镃entOS7中的安全模塊selinux把權(quán)限禁掉了乎赴,我們需要添加參數(shù) --privileged=true 來(lái)解決掛載的目錄沒(méi)有權(quán)限的問(wèn)題

3.2.6 查看容器IP地址

我們可以通過(guò)以下命令查看容器運(yùn)行的各種數(shù)據(jù)
docker inspect 容器名稱(容器ID)
也可以直接執(zhí)行下面的命令直接輸出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)

3.2.7 刪除容器

刪除指定的容器:
docker rm 容器名稱(容器ID)

四忍法、應(yīng)用部署

4.1 Mysql部署

拉取mysql鏡像
docker pull mysql:5.7
創(chuàng)建容器
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
-p 代表端口映射,格式為 宿主機(jī)映射端口:容器運(yùn)行端口
-e 代表添加環(huán)境變量 MYSQL_ROOT_PASSWORD是root用戶的登陸密碼

遠(yuǎn)程登錄mysql
連接宿主機(jī)的IP ,指定端口為3306
docker exec -it mysql /bin/bash

使用mysql命令打開客戶端
mysql -uroot -proot --default-character-set=utf8

4.2 Nginx部署

拉取鏡像
docker pull nginx
創(chuàng)建Nginx容器
docker run -di --name=nginx -p 80:80 nginx
將容器內(nèi)的配置文件拷貝到指定目錄
docker cp nginx:/etc/nginx /mydata/nginx/
修改文件名稱
mv nginx conf
終止并刪除容器
docker stop nginx
docker rm nginx
使用docker命令啟動(dòng)
docker run -di --name=nginx -p 80:80 -v /mydata/nginx/conf:/etc/nginx nginx

4.3 Redis部署

拉取鏡像
docker pull redis
創(chuàng)建容器
docker run -di --name=redis -p 6379:6379 redis

4.4 RabbitMQ部署

拉取鏡像
docker pull rabbitmq:3.7.12
創(chuàng)建容器
docker run -di --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.7.12
進(jìn)入容器并開啟管理功能

docker exec -it rabbitmq /bin/bash
#此命令需要在容器中運(yùn)行
rabbitmq-plugins enable rabbitmq_management

訪問(wèn)地址查看是否安裝成功:http://宿主機(jī)IP:15672/


4.5 Elasticsearch部署

拉取鏡像
docker pull elasticsearch:7.5.0
修改虛擬內(nèi)存區(qū)域大小榕吼,否則會(huì)因?yàn)檫^(guò)小而無(wú)法啟動(dòng)
sysctl -w vm.max_map_count=262144
創(chuàng)建容器

docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v
/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.5.0

安裝中文分詞器

docker exec -it elasticsearch /bin/bash
#此命令需要在容器中運(yùn)行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
docker restart elasticsearch

訪問(wèn):http://宿主機(jī)IP:9200/


4.6 Zookeeper部署

拉取鏡像
docker pull zookeeper:3.4.13
創(chuàng)建容器
docker run -di --name=zookeeper -p 2181:2181 zookeeper:3.4.13

五饿序、遷移與備份

5.1 容器保存為鏡像

我們可以通過(guò)以下命令將容器保存為鏡像
docker commit redis myredis

5.2 鏡像備份

我們可以通過(guò)以下命令將鏡像保存為tar 文件
docker save -o myredis.tar myredis

5.3 鏡像恢復(fù)與遷移

首先我們先刪除掉myredis鏡像 然后執(zhí)行此命令進(jìn)行恢復(fù)
docker load -i myredis.tar
-i 輸入的文件
執(zhí)行后再次查看鏡像,可以看到鏡像已經(jīng)恢復(fù)

六羹蚣、Dockerfile

6.1 什么是Dockerfile

Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本原探,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像。

  • 對(duì)于開發(fā)人員:可以為開發(fā)團(tuán)隊(duì)提供一個(gè)完全一致的開發(fā)環(huán)境顽素;
  • 對(duì)于測(cè)試人員:可以直接拿開發(fā)時(shí)所構(gòu)建的鏡像或者通過(guò)Dockerfile文件構(gòu)建一個(gè)新的鏡像開始工作了咽弦;
  • 對(duì)于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無(wú)縫移植胁出。

6.2 常用命令

命令 作用
FROM image_name:tag 定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程
MAINTAINER user_name 聲明鏡像的創(chuàng)建者
ENV key value 設(shè)置環(huán)境變量 (可以寫多條)
RUN command 是Dockerfile的核心部分(可以寫多條)
ADD source_dir/file dest_dir/file 將宿主機(jī)的文件復(fù)制到容器內(nèi)型型,如果是一個(gè)壓縮文件,將會(huì)在復(fù)制后自動(dòng)解壓
COPY source_dir/file dest_dir/file 和ADD相似全蝶,但是如果有壓縮文件并不能解壓
WORKDIR path_dir 設(shè)置工作目錄

6.3 使用腳本創(chuàng)建鏡像

創(chuàng)建目錄
mkdir –p /usr/local/dockerjdk8

下載 jdk-8u202-linux-x64.tar.gz 并上傳到服務(wù)器(虛擬機(jī))中的 /usr/local/dockerjdk8 目錄

創(chuàng)建文件Dockerfile

vim Dockerfile
#依賴鏡像名稱和ID
FROM centos:7
#指定鏡像創(chuàng)建者信息
MAINTAINER xxxx
#切換工作目錄
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相對(duì)路徑j(luò)ar,把java添加到容器中
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
#配置java環(huán)境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV PATH $JAVA_HOME/bin:$PATH

執(zhí)行命令構(gòu)建鏡像
docker build -t='jdk1.8' .

注意后邊的空格和點(diǎn)闹蒜,不要省略

查看鏡像是否建立完成
docker images

七、Docker私有倉(cāng)庫(kù)

7.1 私有倉(cāng)庫(kù)搭建與配置

拉取私有倉(cāng)庫(kù)鏡像
docker pull registry
啟動(dòng)私有倉(cāng)庫(kù)容器
docker run -di --name=registry -p 5000:5000 registry
打開瀏覽器輸入地址http://宿主機(jī)IP:5000/v2/_catalog看到 {"repositories":[]} 表示私有倉(cāng)庫(kù)搭建成功并且內(nèi)容為空

修改daemon.json
vim /etc/docker/daemon.json
添加以下內(nèi)容抑淫,保存退出绷落。
{"insecure-registries":["宿主機(jī)IP:5000"]}
若daemon.json中已存在內(nèi)容 直接在 {} 繼續(xù)中添加
,"insecure-registries":["宿主機(jī)IP:5000"]

此步用于讓 docker信任私有倉(cāng)庫(kù)地址
重啟docker 服務(wù)
systemctl restart docker

7.2 鏡像上傳至私有倉(cāng)庫(kù)

標(biāo)記此鏡像為私有倉(cāng)庫(kù)的鏡像
docker tag jdk1.8 宿主機(jī)IP:5000/jdk1.8
再次啟動(dòng)私服容器
docker start registry
上傳標(biāo)記的鏡像
docker push 宿主機(jī)IP:5000/jdk1.8

八、DcokerMaven插件

微服務(wù)部署有兩種方法:

  • 手動(dòng)部署:首先基于源碼打包生成jar包(或war包),將jar包(或war包)上傳至虛擬機(jī)并拷貝至JDK容器始苇。
  • 通過(guò)Maven插件自動(dòng)部署嘱函。

??對(duì)于數(shù)量眾多的微服務(wù),手動(dòng)部署無(wú)疑是非常麻煩的做法埂蕊,并且容易出錯(cuò)往弓。所以我們這里學(xué)習(xí)如何自動(dòng)部署疏唾,這也是企業(yè)實(shí)際開發(fā)中經(jīng)常使用的方法。

Maven插件自動(dòng)部署步驟:

8.1 修改宿主機(jī)的docker配置函似,讓其可以遠(yuǎn)程訪問(wèn)

vim /lib/systemd/system/docker.service

修改以 ExecStart 開頭的行

ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

修改后如下:


8.2 刷新配置槐脏,重啟服務(wù)

systemctl daemon-reload
systemctl restart docker
docker start registry

8.3 在工程pom.xml增加配置

<!--docker的maven插件,官網(wǎng):https://github.com/spotify/docker-maven-plugin-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution></executions>
<configuration>
<imageName>ego/${project.artifactId}:${project.version}</imageName>
<dockerHost>http://192.168.10.101:2375</dockerHost>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar", "-
Dspring.profiles.active=dev","/${project.build.finalName}.jar"]
</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

雙擊Maven-->Lifecycle-->package :


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撇寞,一起剝皮案震驚了整個(gè)濱河市顿天,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔑担,老刑警劉巖牌废,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異啤握,居然都是意外死亡鸟缕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門排抬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)懂从,“玉大人,你說(shuō)我怎么就攤上這事蹲蒲》Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵届搁,是天一觀的道長(zhǎng)缘薛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卡睦,這世上最難降的妖魔是什么宴胧? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮么翰,結(jié)果婚禮上牺汤,老公的妹妹穿的比我還像新娘辽旋。我一直安慰自己浩嫌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布补胚。 她就那樣靜靜地躺著码耐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溶其。 梳的紋絲不亂的頭發(fā)上骚腥,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音瓶逃,去河邊找鬼束铭。 笑死廓块,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的契沫。 我是一名探鬼主播带猴,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼懈万!你這毒婦竟也來(lái)了拴清?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤会通,失蹤者是張志新(化名)和其女友劉穎口予,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕侈,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沪停,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驾凶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牙甫。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖调违,靈堂內(nèi)的尸體忽然破棺而出窟哺,到底是詐尸還是另有隱情,我是刑警寧澤技肩,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布且轨,位于F島的核電站,受9級(jí)特大地震影響虚婿,放射性物質(zhì)發(fā)生泄漏旋奢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一然痊、第九天 我趴在偏房一處隱蔽的房頂上張望至朗。 院中可真熱鬧,春花似錦剧浸、人聲如沸锹引。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫌变。三九已至,卻和暖如春躬它,著一層夾襖步出監(jiān)牢的瞬間腾啥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倘待,地道東北人疮跑。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凸舵,于是被迫代替她去往敵國(guó)和親祸挪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 目錄 [TOC] 1. 簡(jiǎn)介 Docker是GO語(yǔ)言實(shí)現(xiàn)的開源項(xiàng)目贞间,基于Linux容器技術(shù)贿条,主要目標(biāo)是一次封裝,到...
    水煮魚又失敗了閱讀 269評(píng)論 0 2
  • Docker 學(xué)習(xí)目標(biāo): 掌握Docker基礎(chǔ)知識(shí)增热,能夠理解Docker鏡像與容器的概念 完成Docker安裝與啟...
    執(zhí)筆夢(mèng)一場(chǎng)閱讀 3,222評(píng)論 2 10
  • Docker 掌握Docker基礎(chǔ)知識(shí)整以,理解Docker鏡像與容器的概念 完成Docker安裝與啟動(dòng) 掌握Dock...
    32a08e1b7af0閱讀 986評(píng)論 0 18
  • 深入淺出Docker學(xué)習(xí)筆記 Docker引擎 Docker引擎:用來(lái)運(yùn)行和管理容器的核心文件模塊化(基于開放容器...
    yuq329閱讀 819評(píng)論 0 4
  • devops:運(yùn)維人員會(huì)在項(xiàng)目開發(fā)期間就介入到開發(fā)過(guò)程中,了解開發(fā)人員使用的系統(tǒng)架構(gòu)和技術(shù)路線峻仇,從而制定適當(dāng)?shù)倪\(yùn)維...
    一笑奈何_abe4閱讀 253評(píng)論 0 0