docker

docker能干嘛

虛擬機(jī)技術(shù)缺點(diǎn)

  1. 資源占用十分多
  2. 冗余步驟多
  3. 啟動(dòng)很慢

容器化技術(shù)

容器化技術(shù)不是模擬的一個(gè)完整的操作系統(tǒng)

比較docker和虛擬機(jī)技術(shù)的不同

  • 傳統(tǒng)虛擬機(jī)匣椰,虛擬出一套硬件,運(yùn)行一個(gè)完整的操作系統(tǒng)渐溶,然后在這個(gè)系統(tǒng)上安裝和運(yùn)行軟件
  • 容器內(nèi)的應(yīng)用直接運(yùn)行在宿主機(jī)的內(nèi)部毕泌,容器是沒(méi)有自己的內(nèi)核的,也沒(méi)有虛擬我們的硬件碳柱,所以就輕便了
  • 每個(gè)容器間是互相隔離的藤滥,每個(gè)容器內(nèi)都有一個(gè)屬于自己的文件系統(tǒng)梗搅,互不影響

應(yīng)用更快速的交付和部署

傳統(tǒng):一堆幫助文檔蠢络,安裝程序

docker:打包鏡像發(fā)布測(cè)試衰猛,一鍵運(yùn)行

更便捷的升級(jí)和擴(kuò)縮容

使用了docker之后,我們部署應(yīng)用就和搭積木一樣

項(xiàng)目打包為一個(gè)鏡像刹孔,擴(kuò)展 服務(wù)器A啡省,服務(wù)器B

更簡(jiǎn)單的系統(tǒng)運(yùn)維

在容器化之后,我們的開(kāi)發(fā)髓霞,測(cè)試環(huán)境都是高度一致的

更高效的計(jì)算資源利用

docker是內(nèi)核級(jí)別的虛擬化卦睹,可以在一個(gè)物理機(jī)上可以運(yùn)行很多的容器實(shí)例,服務(wù)器的性能可以被壓榨到極致

docker安裝

docker基本組成

image.png

鏡像(image)

docker鏡像就好比是一個(gè)模板方库,可以通過(guò)這個(gè)模板來(lái)創(chuàng)建容器服務(wù)结序,通過(guò)這個(gè)鏡像可以創(chuàng)建多個(gè)容器(最終服務(wù)運(yùn)行或者項(xiàng)目運(yùn)行就是在容器中的)

容器(container)

docker利用容器技術(shù),獨(dú)立運(yùn)行一個(gè)或者一個(gè)組應(yīng)用纵潦,通過(guò)鏡像來(lái)創(chuàng)建的

啟動(dòng)笼痹,停止,刪除酪穿,基本命令

目前就可以把這個(gè)容器理解為就是一個(gè)簡(jiǎn)易的linux系統(tǒng)

倉(cāng)庫(kù)(repository)

倉(cāng)庫(kù)就是存放鏡像的地方

倉(cāng)庫(kù)分為共有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)

Docker Hub(默認(rèn)是國(guó)外的)

阿里云。晴裹。都有容器服務(wù)器(配置鏡像加速)

安裝docker

環(huán)境查看

# 系統(tǒng)內(nèi)核是3.10 以上的
uname -r
# 系統(tǒng)版本
cat /etc/os-release
# 是centos7

安裝

參考幫助文檔

# 1. 卸載舊的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 2. 需要的安裝包
sudo yum install -y yum-utils

# 3. 設(shè)置鏡像的倉(cāng)庫(kù)
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo  # 默認(rèn)是國(guó)外的

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推薦使用阿里云的被济,十分快
    
# 更新yum軟件包索引
yum makecache fast

# 4. 安裝docker  docker-ce 社區(qū)版 ee 企業(yè)版
yum install docker-ce docker-ce-cli containerd.io

# 5. 啟動(dòng)docker
systemctl start docker

# 6. 使用 docker vesion查看
# 7. hello-world 
docker run hello-world
# 8. 查看一下下載的這個(gè)hello-world
docker images

了解:卸載docker

# 1. 卸載依賴
yum remove docker-ce docker-ce-cli containerd.io

# 2. 刪除資源
rm -rf /var/lib/docker

# /var/lib/docker    docker的默認(rèn)工作路徑

阿里云鏡像加速

  1. 登錄阿里云找到鏡像服務(wù)

  2. 找到鏡像加速器

  3. 配置使用

image.png

回顧helloworld流程

image.png

底層原理

docker是怎么工作的?

docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng)涧团,docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上只磷,通過(guò)socket從客戶端訪問(wèn)经磅!DockerServer接收到Docker-Client的指令,就會(huì)執(zhí)行這個(gè)命令钮追!

image.png

docker為什么比VM快

  1. docker有著比虛擬機(jī)更少的抽象層
  2. docker利用的是宿主機(jī)的內(nèi)核预厌,vm需要的是Guest OS

所以說(shuō),新建一個(gè)容器的時(shí)候元媚,docker不需要像虛擬機(jī)一樣重新加載一個(gè)操作系統(tǒng)內(nèi)核轧叽,避免引導(dǎo)。虛擬機(jī)是加載Guest OS刊棕,分鐘級(jí)別的炭晒,而docker是利用宿主機(jī)的操作系統(tǒng),省略了這個(gè)復(fù)雜的過(guò)程甥角,秒級(jí)


image.png

docker的常用命令

幫助命令

docker  version           # 顯示docker的版本信息
docker  info              # 顯示docker的系統(tǒng)信息网严,包括鏡像和容器的數(shù)量
docker 命令 --help         # 幫助命令

幫助文檔的地址:https://docs.docker.com/engine/reference/commandline/

鏡像命令

docker images 查看所有本地的主機(jī)上的鏡像

docker images

# 解釋
REPOSITORY      鏡像的倉(cāng)庫(kù)源
TAG             鏡像的標(biāo)簽
IMAGE ID        鏡像的id
CREATED         鏡像的創(chuàng)建時(shí)間
SIZE            鏡像的大小

# 可選項(xiàng)
-a,  --all     # 列出所有鏡像
-q,  --quiet   # 只顯示鏡像的id

docker search 搜索鏡像

docker search mysql

# 可選項(xiàng),通過(guò)收藏來(lái)過(guò)濾
--filter=STARS=3000   # 搜索出來(lái)的鏡像就是STARS大于3000的

docker search mysql --filter=STARS=3000

docker pull 下載鏡像

# 下載鏡像  docker pull 鏡像名[:tag]
[root@muyi /]# docker pull mysql
Using default tag:latest  # 如果不寫tag 默認(rèn)就是latest
latest:Pulling from library/mysql
5b54d594fba7:Pull complete  # 分層下載 docker image的核心 聯(lián)合文件系統(tǒng)
...
Digest:xxxx  # 簽名
...
docker.io/library/mysql:latest # 真實(shí)地址

# 等價(jià)于它
docker pull mysql
docker pull dokcer.io/library/mysql:latest

# 指定版本下載
docker pull mysql:5.7

docker rmi 刪除鏡像

# docker rmi -f 鏡像id   # 刪除指定的鏡像
# docker rmi -f 鏡像id 鏡像id 鏡像id # 刪除多個(gè)鏡像
# docker rmi -f $(dokcer images -aq) # 刪除全部的鏡像

容器命令

說(shuō)明:我們有了鏡像才可以創(chuàng)建容器嗤无,下載一個(gè)centos來(lái)測(cè)試學(xué)習(xí)

docker pull centos

新建容器并啟動(dòng)

docker run [可選參數(shù)]  image

# 參數(shù)說(shuō)明
--name="Name"    容器名字   用來(lái)區(qū)分容器
-d               后臺(tái)方式運(yùn)行
-it              使用交互方式運(yùn)行震束,進(jìn)入容器查看內(nèi)容
-p               指定容器的端口   -p 8080:8080
    -P  ip:主機(jī)端口:容器端口
    -p  主機(jī)端口:容器端口 (常用)
    -p  容器端口
    容器端口
-P  隨機(jī)指定端口

# 測(cè)試,啟動(dòng)并進(jìn)入容器
docker run -it centos /bin/bash
ls  # 查看容器內(nèi)的centos当犯,基礎(chǔ)版本垢村,很多命令都是不完善的
exit # 從容器中退回主機(jī)

列出所有的運(yùn)行的容器

# docker ps 命令
# 列出當(dāng)前正在運(yùn)行的容器
-a  # 列出當(dāng)前正在運(yùn)行的容器+帶出歷史運(yùn)行過(guò)的容器
-n=? # 顯示最近創(chuàng)建的容器
-q  # 之顯示容器的編號(hào)

docker ps
docker ps -a

退出容器

exit    # 直接容器停止并推出
Ctrl + P +Q # 容器不停止退出

刪除容器

docker rm 容器id   # 刪除指定的容器,不能刪除正在運(yùn)行的容器灶壶,如果要強(qiáng)制刪除  rm -f
docker rm -f $(docker ps -aq) # 刪除所有的容器
docker ps -a -q|xargs docker rm # 刪除所有的容器

啟動(dòng)和停止容器的操作

docker start   容器id  # 啟動(dòng)容器
docker restart 容器id  # 重啟容器
docker stop 容器id     # 停止當(dāng)前正在運(yùn)行的容器
docker kill 容器id     # 強(qiáng)制停止當(dāng)前容器

常用其他命令

后臺(tái)啟動(dòng)容器

# 命令 docker run -d 鏡像名
docker run -d centos
# 問(wèn)題docker ps 發(fā)現(xiàn)centos停止了
# 常見(jiàn)的坑:docker 容器使用后臺(tái)運(yùn)行肝断,就必須要有一個(gè)前臺(tái)進(jìn)程,docker發(fā)現(xiàn)沒(méi)有應(yīng)用驰凛,就會(huì)自動(dòng)停止
# nginx 容器啟動(dòng)后胸懈,發(fā)現(xiàn)自己沒(méi)有提供服務(wù),就會(huì)立刻停止恰响,就是沒(méi)有程序了

查看日志

# docker logs -f -t --tail 條數(shù) 容器id
# 顯示日志
-tf      # 顯示日志
--tail number # 要顯示日志條數(shù)
docker logs -tf --tail 10 dce7b86171bf

查看容器中進(jìn)程信息

# 命令 docker top 容器id
docker top dce7b86171bf

查看鏡像的元數(shù)據(jù)

# docker inspect 容器id
docker inspect dce7b86171bf

進(jìn)入當(dāng)前正在運(yùn)行的容器

# 我們通常都是使用后臺(tái)方式運(yùn)行的 需要進(jìn)入容器趣钱,修改一些配置
# 命令
# docker exec -it 容器id bashShell
docker exec -it dce7b86171bf /bin/bash

# 方式2
# docker attach 容器id
docker attach dce7b86171bf

# docker exec  # 進(jìn)入容器后開(kāi)啟一個(gè)新的終端,可以在里面操作(常用)
# docker attach # 進(jìn)入容器正在執(zhí)行的終端胚宦,不會(huì)啟動(dòng)新的進(jìn)程

從容器內(nèi)拷貝文件到宿主機(jī)上

# docker cp 容器id:容器內(nèi)路徑  目的地主機(jī)路徑
docker cp dce7b86171bf:/home/test.html /home
# 拷貝是一個(gè)手動(dòng)過(guò)程首有,我們以后會(huì)使用數(shù)據(jù)卷的技術(shù)來(lái)實(shí)現(xiàn)
# docker cp 容器id:容器內(nèi)路徑  目的地主機(jī)路徑
docker cp dce7b86171bf:/home/test.html /home
# 拷貝是一個(gè)手動(dòng)過(guò)程,我們以后會(huì)使用數(shù)據(jù)卷的技術(shù)來(lái)實(shí)現(xiàn)

commit鏡像

docker commit 提交一個(gè)容器成為一個(gè)新的副本

# 命令和git原理類似
docker commit -m="提交的描述信息" -a="作者" 容器id 目的鏡像名:[TAG]

容器數(shù)據(jù)卷

什么是容器數(shù)據(jù)卷

docker就是將應(yīng)用和環(huán)境打包成一個(gè)鏡像枢劝。

如果數(shù)據(jù)都在容器中井联,那么我們的容器刪除,數(shù)據(jù)就會(huì)丟失您旁! 需求:數(shù)據(jù)可以持久化

比如以mysql為例烙常,如果mysql容器刪了,等于就是刪庫(kù)跑路了鹤盒,需求:mysql數(shù)據(jù)可以存儲(chǔ)在本地

容器之間可以有一個(gè)數(shù)據(jù)共享的技術(shù)蚕脏!docker容器中產(chǎn)生的數(shù)據(jù)侦副,同步到本地

這就是卷技術(shù),就是目錄的掛載驼鞭,將我們?nèi)萜鲀?nèi)的目錄秦驯,掛載在Linux上面

總結(jié):容器的持久化和同步操作!容器間也是可以數(shù)據(jù)共享的

使用數(shù)據(jù)卷

方式一:直接使用命令來(lái)掛載 -v

docker run -it -v 宿主機(jī)目錄:容器內(nèi)目錄

# 測(cè)試
docker run -it -v /home/ceshi:/home centos /bin/bash
# 啟動(dòng)起來(lái)時(shí)候我們可以通過(guò) docker inspect 容器id
# 假如我們將容器刪除挣棕,發(fā)現(xiàn)译隘,我們掛載都本地的數(shù)據(jù)卷依舊沒(méi)有丟失,這就實(shí)現(xiàn)了容器數(shù)據(jù)持久化功能

具名掛載和匿名掛載

# 匿名掛載
-v 容器內(nèi)路徑
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有的volume的情況
docker volume ls
# 這里發(fā)現(xiàn)穴张,這種就是匿名掛載细燎,我們?cè)?v 只寫了容器內(nèi)的路徑,沒(méi)有寫容器外的路徑

# 具名掛載
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls

# 通過(guò)-v 卷名:容器內(nèi)路徑
# 查看一下這個(gè)卷
docker volume inspect juming-nginx

所有的docker容器內(nèi)的卷皂甘,沒(méi)有指定目錄的情況下都是在/var/lib/docker/volumes/xxx/_data
我們通過(guò)具名掛載可以方便的找到我們的一個(gè)卷玻驻,大多數(shù)情況在使用的具名掛載

# 如何確定是具名掛載還是匿名掛載,還是指定路徑掛載
-v  容器內(nèi)路徑     # 匿名掛載
-v  卷名:容器內(nèi)路徑 # 具名掛載
-v  /宿主機(jī)路徑:容器內(nèi)路徑 # 指定路徑掛載

擴(kuò)展:
通過(guò) -v 容器內(nèi)路徑  ro  rw  改變讀寫權(quán)限
ro   readonle   # 只讀
rw   readwrite   # 可讀可寫
# 一旦這個(gè)設(shè)置了容器權(quán)限偿枕,容器對(duì)我們掛載出來(lái)的內(nèi)容就有限定了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro  nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw  nginx

# ro 只要看到ro就說(shuō)明這個(gè)路徑只能通過(guò)宿主機(jī)來(lái)操作璧瞬,容器內(nèi)部是無(wú)法操作的
# 默認(rèn)是rw
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渐夸,隨后出現(xiàn)的幾起案子嗤锉,更是在濱河造成了極大的恐慌,老刑警劉巖墓塌,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟忱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苫幢,警方通過(guò)查閱死者的電腦和手機(jī)访诱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)韩肝,“玉大人触菜,你說(shuō)我怎么就攤上這事“Ь” “怎么了涡相?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剩蟀。 經(jīng)常有香客問(wèn)我催蝗,道長(zhǎng),這世上最難降的妖魔是什么育特? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任生逸,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘槽袄。我一直安慰自己,他們只是感情好锋谐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布遍尺。 她就那樣靜靜地躺著,像睡著了一般涮拗。 火紅的嫁衣襯著肌膚如雪乾戏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天三热,我揣著相機(jī)與錄音鼓择,去河邊找鬼。 笑死就漾,一個(gè)胖子當(dāng)著我的面吹牛呐能,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抑堡,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼摆出,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了首妖?” 一聲冷哼從身側(cè)響起偎漫,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎有缆,沒(méi)想到半個(gè)月后象踊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棚壁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年杯矩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌曙。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菊碟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出在刺,到底是詐尸還是另有隱情逆害,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布蚣驼,位于F島的核電站魄幕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颖杏。R本人自食惡果不足惜纯陨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翼抠,春花似錦咙轩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至量愧,卻和暖如春钾菊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偎肃。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工煞烫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人累颂。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓滞详,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親喘落。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茵宪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 本章內(nèi)容 ◆ Docker簡(jiǎn)介◆ Docker 鏡像與制作◆ Docker 數(shù)據(jù)管理◆ Docker 網(wǎng)絡(luò)◆ Do...
    Liang_JC閱讀 777評(píng)論 0 0
  • 01【熟悉】docker簡(jiǎn)介 1,什么是docker Docker是一個(gè)開(kāi)源項(xiàng)目瘦棋,誕生于2013年初稀火,最初是d...
    北辰_6666閱讀 334評(píng)論 0 0
  • Docker是基于容器的應(yīng)用開(kāi)發(fā),部署和運(yùn)行平臺(tái) 高性能:相比傳統(tǒng)虛擬機(jī)赌朋,不需要hepervisor的額外負(fù)載凰狞,而...
    wangdy12閱讀 1,657評(píng)論 0 0
  • 概述 是什么 解決了運(yùn)行環(huán)境和配置問(wèn)題軟件容器赡若,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)。 一次封裝团甲,到處運(yùn)...
    none_title閱讀 641評(píng)論 0 0
  • 深入淺出Docker學(xué)習(xí)筆記 Docker引擎 Docker引擎:用來(lái)運(yùn)行和管理容器的核心文件模塊化(基于開(kāi)放容器...
    yuq329閱讀 819評(píng)論 0 4