【太閣課堂】Docker常用命令合集,收藏不虧!
一、docker概論
Docker 是一個(gè)開源的應(yīng)用容器引擎,基于 Go 語言 并遵從 Apache2.0 協(xié)議開源。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux ?機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版),我們用社區(qū)版就可以了
二、Docker的應(yīng)用場景
Web 應(yīng)用的自動(dòng)化打包和發(fā)布。
自動(dòng)化測試和持續(xù)集成、發(fā)布。
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)用。
從頭編譯或者擴(kuò)展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺(tái)來搭建自己的 PaaS 環(huán)境。
2.1 Docker 的優(yōu)點(diǎn)
Docker 是一個(gè)用于開發(fā),交付和運(yùn)行應(yīng)用程序的開放平臺(tái)。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助 Docker,您可以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產(chǎn)環(huán)境中運(yùn)行代碼之間的延遲。
(1)快速,一致地交付您的應(yīng)用程序
Docker 允許開發(fā)人員使用您提供的應(yīng)用程序或服務(wù)的本地容器在標(biāo)準(zhǔn)化環(huán)境中工作,從而簡化了開發(fā)的生命周期。
容器非常適合持續(xù)集成和持續(xù)交付(CI / CD)工作流程,請(qǐng)考慮以下示例方案:
您的開發(fā)人員在本地編寫代碼,并使用 Docker 容器與同事共享他們的工作。
他們使用 Docker 將其應(yīng)用程序推送到測試環(huán)境中,并執(zhí)行自動(dòng)或手動(dòng)測試。
當(dāng)開發(fā)人員發(fā)現(xiàn)錯(cuò)誤時(shí),他們可以在開發(fā)環(huán)境中對(duì)其進(jìn)行修復(fù),然后將其重新部署到測試環(huán)境中,以進(jìn)行測試和驗(yàn)證。
測試完成后,將修補(bǔ)程序推送給生產(chǎn)環(huán)境,就像將更新的鏡像推送到生產(chǎn)環(huán)境一樣簡單。
(2)響應(yīng)式部署和擴(kuò)展
Docker 是基于容器的平臺(tái),允許高度可移植的工作負(fù)載。Docker 容器可以在開發(fā)人員的本機(jī)上,數(shù)據(jù)中心的物理或虛擬機(jī)上,云服務(wù)上或混合環(huán)境中運(yùn)行。
Docker 的可移植性和輕量級(jí)的特性,還可以使您輕松地完成動(dòng)態(tài)管理的工作負(fù)擔(dān),并根據(jù)業(yè)務(wù)需求指示,實(shí)時(shí)擴(kuò)展或拆除應(yīng)用程序和服務(wù)。
(3)在同一硬件上運(yùn)行更多工作負(fù)載
Docker 輕巧快速。它為基于虛擬機(jī)管理程序的虛擬機(jī)提供了可行、經(jīng)濟(jì)、高效的替代方案,因此您可以利用更多的計(jì)算能力來實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。Docker 非常適合于高密度環(huán)境以及中小型部署,而您可以用更少的資源做更多的事情。
三、 Docker 架構(gòu)
Docker 包括三個(gè)基本概念:
鏡像(Image):Docker 鏡像(Image),就相當(dāng)于是一個(gè) root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統(tǒng)的 root 文件系統(tǒng)。
容器(Container):鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
倉庫(Repository):倉庫可看成一個(gè)代碼控制中心,用來保存鏡像。
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器。
Docker 容器通過 Docker 鏡像來創(chuàng)建。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶?duì)象與類。
Docker 面向?qū)ο?/p>
容器 對(duì)象
鏡像 類

四、 docker安裝
部署19版docker
4.1安裝依賴包
yum?-y?install?yum-utils?device-mapper-persistent-data?lvm2
//yum-utils?提供了yum-config-manager?
//device?mapper?存儲(chǔ)驅(qū)動(dòng)程序需要device-mapper-persistent-data和lvm2
//device mapper 是Linux2.6內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制。
//它為實(shí)現(xiàn)用于存儲(chǔ)資源管理的塊設(shè)備驅(qū)動(dòng)提供了一個(gè)而高度模塊化的內(nèi)核架構(gòu)
4.2 設(shè)置阿里云鏡像源
yum-config-manager?--add-repo?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.3安裝docker-ce
yum?-y?install?docker-ce
systemctl?start?docker.service
systemctl?enable?docker.service?
setenforce?0
vim?/etc/selinux/config
SELINUX=disabled
4.4 鏡像加速
進(jìn)入阿里云官網(wǎng)》》搜索鏡像加速》》選擇centos版的
sudo?mkdir?-p?/etc/docker
sudo?tee?/etc/docker/daemon.json?<<-'EOF'
{
??"registry-mirrors":?["https://1i3tpy0i.mirror.aliyuncs.com"]
}
EOF
sudo?systemctl?daemon-reload
sudo?systemctl?restart?docker
4.5 網(wǎng)絡(luò)優(yōu)化
vim?/etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl?-p
service?network?restart
systemctl?restart?docker
五、docker 鏡像使用
查看docker版本
docker?version
搜索Nginx鏡像(公有倉庫)
docker??search?nginx
下載Nginx鏡像
docker?pull??nginx
下載Redis官方最新鏡像,相當(dāng)于:docker pull redis:latest
docker?pull?redis
下載倉庫所有Redis鏡像
docker?pull?-a?redis
下載私人倉庫鏡像
后面會(huì)詳細(xì)介紹私有庫的建立
docker?pull?bitnami/redis
AUFS (聯(lián)合文件系統(tǒng)) 若干層下載
下載后存放在 /var/lib/docker
/var/lib/docker/image/overlay/repositories/json //下載文件信息
查看鏡像列表
docker?images??//查看下載鏡像信息
[root@localhost?opt]#?docker?images
REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
nginx???????????????latest??????????????7e4d58f0e5f3????????8?days?ago??????????133MB
??? REPOSITORY:表示鏡像的倉庫源
??? TAG:鏡像的標(biāo)簽
??? IMAGE ID:鏡像ID
??? CREATED:鏡像創(chuàng)建時(shí)間
??? SIZE:鏡像大小
//含中間映像層
docker?images?-a
//只顯示鏡像ID
docker?images?-q
//含中間映像層
docker?images?-qa?
//顯示鏡像摘要信息(DIGEST列)
docker?images?--digests
//顯示鏡像完整信息
docker?images?--no-trunc
獲取鏡像信息
docker?inspect?7e4d58f0e5f3?
添加新標(biāo)簽
docker?tag?nginx:latest??nginx:web
[root@localhost?opt]#?docker?tag?nginx:latest??nginx:web
[root@localhost?opt]#?docker?images
REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
nginx???????????????latest??????????????7e4d58f0e5f3????????8?days?ago??????????133MB
nginx???????????????web?????????????????7e4d58f0e5f3????????8?days?ago??????????133MB
//查看鏡像Nginx信息
[root@localhost?opt]#?docker?images?|?grep?nginx?
nginx???????????????latest??????????????7e4d58f0e5f3????????8?days?ago??????????133MB
nginx???????????????web?????????????????7e4d58f0e5f3????????8?days?ago??????????133MB
刪除鏡像
docker rmi ?nginx:web ??(如果只有一個(gè)別名,那么這個(gè)就是刪除docker。如果是多個(gè)標(biāo)簽,那么就是只是刪除一個(gè)標(biāo)簽)
刪除docker
docker rmi ?docker——id ?注:刪除docker如果有其他別名需要?jiǎng)h除只剩一個(gè),才能刪除docker
在刪除容器之前需要先停止容器
單個(gè)鏡像刪除,相當(dāng)于:docker rmi redis:latest
docker?rmi?redis
強(qiáng)制刪除(針對(duì)基于鏡像有運(yùn)行的容器進(jìn)程)
docker?rmi?-f?redis
多個(gè)鏡像刪除,不同鏡像間以空格間隔
docker?rmi?-f?redis?tomcat?nginx
批量刪除本地全部鏡像
docker?rmi?-f?$(docker?images?-q)
導(dǎo)出Nginx鏡像命名為Nginx存放在目錄opt下
docker?save?-o?文件名?鏡像id或者鏡像別名
[root@localhost?~]?docker?save?-o?/opt/nginx?7e4d58f0e5f3?
[root@localhost?opt]?docker?save?-o?nginx1?nginx:latest?
[root@localhost?~]cd?/opt
[root@localhost?opt]?ll
總用量?133636
drwx--x--x.?4?root?root????????28?9月??17?15:43?containerd
-rw-------.?1?root?root?136841216?9月??19?19:04?nginx
drwxr-xr-x.?2?root?root?????????6?10月?31?2018?rh
導(dǎo)入鏡像
docker load --input 導(dǎo)出文件名
docker load < 導(dǎo)出文件名
[root@localhost?opt]?docker?load?--input?nginx?
Loaded?image?ID:?sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
[root@localhost?opt]?docker?load?<?nginx
Loaded?image?ID:?sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
[root@localhost?opt]?docker?load?--input?nginx1
Loaded?image:?nginx:latest
六、docker容器的使用
容器創(chuàng)建
docker?create?-it?nginx:latest?/bin/bash
[root@localhost?opt]?docker?create?-it?nginx:latest?/bin/bash
59c4c2f2b6a00bceb196f1bbcfe02fc5a2e16edc66feb12310c9474bf939d833
-i: 交互式操作。
-t: 終端。
/bin/bash:放在鏡像名后的是命令,這里我們希望有個(gè)交互式 Shell,因此用的是 /bin/bash。
docker run :創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令
語法
docker?run?[OPTIONS]?IMAGE?[COMMAND]?[ARG...]
OPTIONS說明:
????-a stdin:?指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項(xiàng);
????-d:?后臺(tái)運(yùn)行容器,并返回容器ID;
????-i:?以交互模式運(yùn)行容器,通常與?-t 同時(shí)使用;
????-P:?隨機(jī)端口映射,容器內(nèi)部端口隨機(jī)映射到主機(jī)的端口
????-p:?指定端口映射,格式為:主機(jī)(宿主)端口:容器端口
????-t:?為容器重新分配一個(gè)偽輸入終端,通常與?-i 同時(shí)使用;
????--name="nginx-lb":?為容器指定一個(gè)名稱;
????--dns 8.8.8.8:?指定容器使用的DNS服務(wù)器,默認(rèn)和宿主一致;
????--dns-search example.com:?指定容器DNS搜索域名,默認(rèn)和宿主一致;
????-h?"mars":?指定容器的hostname;
????-e?username="ritchie":?設(shè)置環(huán)境變量;
????--env-file=[]:?從指定文件讀入環(huán)境變量;
????--cpuset="0-2"?or?--cpuset="0,1,2":?綁定容器到指定CPU運(yùn)行;
????-m :設(shè)置容器使用內(nèi)存最大值;
????--net="bridge":?指定容器的網(wǎng)絡(luò)連接類型,支持 bridge/host/none/container:?四種類型;
????--link=[]:?添加鏈接到另一個(gè)容器;
????--expose=[]:?開放一個(gè)端口或一組端口;
????--volume?,?-v:?綁定一個(gè)卷
實(shí)例
使用docker鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器命名為mynginx。
docker?run?--name?mynginx?-d?nginx:latest
使用鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器的80端口映射到主機(jī)隨機(jī)端口。
docker?run?-P?-d?nginx:latest
使用鏡像 nginx:latest,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 80?端口映射到主機(jī)的 80?端口,主機(jī)的目錄?/data 映射到容器的?/data。
docker?run?-p?80:80?-v?/data:/data?-d?nginx:latest
綁定容器的 8080?端口,并將其映射到本地主機(jī) 127.0.0.1 的 80?端口上。
$?docker?run?-p?127.0.0.1:80:8080/tcp?ubuntu?bash
使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令。
runoob@runoob:~$?docker?run?-it?nginx:latest?/bin/bash
查看容器
docker?ps?-a
[root@localhost?opt]?docker?ps?-a
CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES
59c4c2f2b6a0????????nginx:latest????????"/docker-entrypoint.…"???2?minutes?ago???????Created?????????????????????????????????pedantic_bose
//顯示最近創(chuàng)建容器
docker?ps?-l
//顯示最近創(chuàng)建的3個(gè)容器
docker?ps?-n?3
//不截?cái)噍敵?br>docker?ps?--no-trunc?
//獲取鏡像redis的元信息
docker?inspect?redis
//獲取正在運(yùn)行的容器redis的?IP
docker?inspect?--format='{{range?.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'?redis
//查看正在運(yùn)行的容器
docker?ps
//查看正在運(yùn)行的容器的ID
docker?ps?-q
//查看正在運(yùn)行+歷史運(yùn)行過的容器
docker?ps?-a
//顯示運(yùn)行容器總文件大小
docker?ps?-s
啟動(dòng)容器
docker?start?59c4c2f2b6a0
查看鏡像?up?狀態(tài)
[root@localhost?opt]?docker?start?59c4c2f2b6a0
59c4c2f2b6a0
[root@localhost?opt]?docker?ps?-a
CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES
59c4c2f2b6a0????????nginx:latest????????"/docker-entrypoint.…"???3?minutes?ago???????Up?9?seconds????????80/tcp??????????????pedantic_bose
停止容器
docker?stop?容器ID
重啟容器
docker?restart?容器ID
啟動(dòng)執(zhí)行命令查看系統(tǒng)根目錄
docker?pull?centos?7
docker?create?it?centos?7?/bin/bash
docker?start?8c6dd3246eb4??
docker?run?nginx?/usr/bin/bash?-c?ls?
執(zhí)行完成直接關(guān)閉,狀態(tài)是exited
持續(xù)在后臺(tái)執(zhí)行
容器進(jìn)入
[root@localhost?opt]?docker?exec?-it?8c6dd3246eb4?/bin/bash
docker?exec?:在運(yùn)行的容器中執(zhí)行命令
????-d?:分離模式:?在后臺(tái)運(yùn)行
????-i?:即使沒有附加也保持STDIN?打開
????-t?:分配一個(gè)偽終端
?docker?exec?-i?-t??mynginx?/bin/bash
docker?exec?-it?9df70f9a0714?/bin/bash
exit???退出
容器導(dǎo)出
?docker?export?8c6dd3246eb4?>?nginx_c
?
?8c6dd3246eb4:容器ID
?
?Nginx_c?:導(dǎo)出容器文件名?
?
容器導(dǎo)入(會(huì)生成鏡像,而不會(huì)創(chuàng)建容器)
cat?nginx_c?|?docker?import?-?nginx:web
?nginx_c:導(dǎo)出的容器文件名
?
?nginx:web:新的容器名
?
刪除容器(容器必須在停止?fàn)顟B(tài))
[root@localhost?opt]?docker?rm?8c6dd3246eb4?
Error?response?from?daemon:?You?cannot?remove?a?running?container?8c6dd3246eb42099dbf58e2730f348acc21b685a4f27c60185d9a427e1282f09.?Stop?the?container?before?attempting?removal?or?force?remove
[root@localhost?opt]?docker?stop?8c6dd3246eb4
8c6dd3246eb4
[root@localhost?opt]?docker?rm?8c6dd3246eb4
8c6dd3246eb4
批量刪除容器
方法一:docker ps -a | awk '{print?"docker?rm?$1"}'?|?bash
方法二:
[root@localhost?opt]docker?rm?-f?$(docker?ps?-aq)
395dab3d44df
2b52ff42681f
1627dc7213cd
960857ff1ba0
59c4c2f2b6a0
?
//強(qiáng)制殺死進(jìn)程容器(處于運(yùn)行狀態(tài)才能殺死進(jìn)程-docker?start?id)
docker?kill??id
刪除一個(gè)運(yùn)行中的容器
docker?rm?-f?redis
刪除多個(gè)容器
docker?rm?-f?$(docker?ps?-a?-q)
docker?ps?-a?-q?|?xargs?docker?rm
-l 移除容器間的網(wǎng)絡(luò)連接,連接名為 db
docker?rm?-l?db?
-v 刪除容器,并刪除容器掛載的數(shù)據(jù)卷
docker?rm?-v?redis
刪除none鏡像
vim?none.sh
docker?ps?-a?|?grep?"Exited"?|?awk?'{print?$1}'|xargs?docker?stop
docker?ps?-a?|?grep?"Exited"?|?awk?'{print?$1}'|xargs?docker?rm
docker?images|grep?none|awk?'{print?$3}'|xargs?docker?rmi
-f :通過 SIGKILL 信號(hào)強(qiáng)制刪除一個(gè)運(yùn)行中的容器。
-l :移除容器間的網(wǎng)絡(luò)連接,而非容器本身
-v :刪除與容器關(guān)聯(lián)的卷。
容器進(jìn)程
//top支持 ps 命令參數(shù),格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
//列出redis容器中運(yùn)行進(jìn)程
docker?top?redis(容器ID)
//查看所有運(yùn)行容器的進(jìn)程信息
for?i?in??`docker?ps?|grep?Up|awk?'{print?$1}'`;do?echo?\?&&docker?top?$i;?done
容器日志
//查看redis容器日志,默認(rèn)參數(shù)
docker?logs?rabbitmq
//查看redis容器日志,參數(shù):-f ?跟蹤日志輸出;-t ??顯示時(shí)間戳;--tail ?僅列出最新N條容器日志;
docker?logs?-f?-t?--tail=20?redis
//查看容器redis從2019年05月21日后的最新10條日志。
docker?logs?--since="2019-05-21"?--tail=10?redis
docker pause :暫停容器中所有的進(jìn)程
docker unpause :恢復(fù)容器中所有的進(jìn)程。
實(shí)例
暫停數(shù)據(jù)庫容器db01提供服務(wù)。
docker?pause?db01
恢復(fù)數(shù)據(jù)庫容器db01提供服務(wù)。
docker?unpause?db01
七、創(chuàng)建鏡像
基于已有的鏡像容器進(jìn)行創(chuàng)建鏡像
docker?create?-it?jasonlix/docker-cobbler?/bin/bash
docker?commit?-m?"new"?-a?"daoke"?c83aee844ae0?daoke:test
docker?images?|?grep?daoke
基于本地模板創(chuàng)建
將文件debian-7.0-x86-minimal.tar.gz拖至opt目錄中
[root@localhost?opt]?cat?debian-7.0-x86-minimal.tar.gz?|?docker?import?-?daoke:new
sha256:6683b936f5574560c919751a6622d4131bb7fb4d88f7a9614c55fb7f554ef2c0
[root@localhost?opt]?docker?images?|?grep?new
daoke???????????????????????new?????????????????6683b936f557????????13?seconds?ago??????215MB
?
基于dockerfile構(gòu)建鏡像
mkdir?apache
cd?apache
vim?Dockerfile
#基于的基礎(chǔ)鏡像
FROM?centos
#維護(hù)鏡像的用戶信息
MAINTAINER?The?project?<cloud-ops@centos.org>
#鏡像操作指令安裝Apache軟件
RUN?yum?-y?update
RUN?yum?-y?install?httpd
#開啟80端口
EXPOSE?80
#復(fù)制網(wǎng)站首頁文件
ADD?index.html?/var/www/html/index.html
#將執(zhí)行腳本復(fù)制到鏡像中
ADD?run.sh?/run.sh
RUN?chmod?755?/run.sh
#啟動(dòng)容器時(shí)執(zhí)行腳本
CMD?["/run.sh"]
vim?run.sh
#!/bin/bash
rm?-rf?/run/httpd/*
exec?/usr/sbin/apachectl?-D?FOREGROUND
echo?"web?test"?>?index.html
生產(chǎn)鏡像
docker?build?-t?httpd:centos1?.????(注意別忘了末尾有“.”)
新鏡像運(yùn)行容器
docker?run?-d?-p?1216:80?httpd:centos1?
docker?start?4fbc428fac3a??(開啟容器)
[root@localhost?apache]docker?ps?-a
CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????????????PORTS??????????????????NAMES
4fbc428fac3a????????httpd:centos1???????"/run.sh"????????????????8?seconds?ago???????Up?7?seconds????????????????0.0.0.0:1216->80/tcp???affectionate_lovelace
a4f43a12352e????????registry????????????"/entrypoint.sh?/etc…"???2?hours?ago?????????Exited?(2)?40?minutes?ago??????????????????????????goofy_bose
ba786a224305????????registry????????????"/entrypoint.sh?/bin…"???2?hours?ago?????????Exited?(127)?2?hours?ago???????????????????????????zen_hamilton
測試真機(jī)瀏覽器
http://192.168.75.200:1216/
八、docker的數(shù)據(jù)管理
(1)數(shù)據(jù)管理操作
方便查看容器內(nèi)產(chǎn)生的數(shù)據(jù)
多容器間實(shí)現(xiàn)數(shù)據(jù)共享
(2)兩種管理方式
數(shù)據(jù)卷:宿主機(jī)和容器之間共享
數(shù)據(jù)卷容器:容器與容器之間共享
數(shù)據(jù)卷:是一個(gè)提供容器使用的特殊目錄
(3)創(chuàng)建數(shù)據(jù)卷
docker?run?-d?-v?/data1?-v?/data2?--name?web?httpd:centos
掛載宿主機(jī)目錄作為數(shù)據(jù)卷(宿主機(jī)目錄與容器目錄同步)
docker?run?-d?-v?/var/www:/data1?--name?web-1?httpd:centos
web-1 是指容器名,httpd:centos 是鏡像,是指掛載一個(gè)目錄并且生成一個(gè)容器web-1鏡像為httpd 標(biāo)簽是centos
docker?pull?centos
//宿主機(jī)目錄/var/www掛載容器中的/data1
docker?run??-v?/var/www:/data1?--name?web1?-it?centos?/bin/bash
cd?/data1
touch?test123
//返回宿主機(jī)進(jìn)行查看
ls?/var/www
數(shù)據(jù)卷容器
//數(shù)據(jù)卷容器
docker?run?--name?web100?-v?/data1?-v?/data2?-it?centos?/bin/bash??##(加/bin/bash?就是可以直接進(jìn)入容器)
新容器掛載數(shù)據(jù)卷容器web100
docker?run?-it?-volumes-from?web100?--name?db1?centos?/bin/bash
注釋:容器web100?和容器db1 所掛載的目錄data1和data2 數(shù)據(jù)是同步運(yùn)行的。
端口映射
docker?run?-d?-p?httpd:centos
docker?run?-d?-p?49280:80?httpd:centos
docker?ps?-a
九、本地私有倉庫建立
docker?pull?registry
[root@localhost?/]#?docker?pull?registry
Using?default?tag:?latest
latest:?Pulling?from?library/registry
cbdbe7a5bc2a:?Pulling?fs?layer?
47112e65547d:?Pulling?fs?layer?
46bcb632e506:?Pulling?fs?layer?
c1cc712bcecd:?Pulling?fs?layer?
3db6272dcbfa:?Pulling?fs?layer?
latest:?Pulling?from?library/registry
cbdbe7a5bc2a:?Pulling?fs?layer?
47112e65547d:?Pulling?fs?layer?
46bcb632e506:?Pulling?fs?layer?
c1cc712bcecd:?Pulling?fs?layer?
3db6272dcbfa:?Pulling?fs?layer?
open?/var/lib/docker/tmp/GetImageBlob684407966:?no?space?left?on?device
---------------------------------------------------
vim?/etc/docker/daemon.json
{
??"insecure-registries":["192.168.75.200:5000"],??//添加
??"registry-mirrors":?["https://1i3tpy0i.mirror.aliyuncs.com"]
}
~?
systemctl?restart?docker.service??
docker?create?-it?registry?/bin/bash?#新建容器
docker?ps?-a
[root@localhost?docker]#?docker?ps?-a
CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS???????????????????????PORTS????????????????????NAMES
ba786a224305????????registry????????????"/entrypoint.sh?/bin…"???44?minutes?ago??????Exited?(127)?9?minutes?ago????????????????????????????zen_hamilton
docker?start?231d40e811cd???##開啟(不是up是正確的)
##宿主機(jī)的/data/registry自動(dòng)創(chuàng)建掛載容器中的/tmp/registry
docker?run?-d?-p?5000:5000?-v?/data/registry:/tmp/registry?registry
docker?pull?httpd
##更改標(biāo)記為192.168.75.200:5000/httpd??
docker?tag?httpd:latest?192.168.75.200:5000/httpd??(標(biāo)記IP地址與私有倉庫的地址和端口相一致)
docker?push?192.168.75.200:5000/httpd??##上傳鏡像
##獲取私有倉庫列表
curl?-XGET?http://192.168.75.200:500/v2/_catalog
docker?pull?192.168.75.200:500/httpd?##測試私有倉庫下載鏡像
端口映射
docker?run?-d?-P?httpd:centos???##隨機(jī)分配外部的映射端口
docker?run?-d?-p?43992:80?httpd:centos??##指定端口映射
docker?ps?-a???##查看
十、容器互聯(lián)
(1)端口映射進(jìn)行容器互聯(lián)
創(chuàng)建并運(yùn)行容器取名為web1,端口號(hào)自動(dòng)映射
docker?run?-itd?-P?--name?web1?ecntos?/bin/bash?
創(chuàng)建并運(yùn)行容器取名web2,連接到web1和其通信
docker?run?-itd?-P?--name?web2?--link?web1:web1?centos?/bin/bash
進(jìn)web2容器 ping web1
端口映射并不是唯一把 docker 連接到另一個(gè)容器的方法。
docker 有一個(gè)連接系統(tǒng)允許將多個(gè)容器連接在一起,共享連接信息。
docker 連接會(huì)創(chuàng)建一個(gè)父子關(guān)系,其中父容器可以看到子容器的信息。
(2)網(wǎng)絡(luò)設(shè)置進(jìn)行容器互聯(lián)
新建網(wǎng)絡(luò)
下面先創(chuàng)建一個(gè)新的 Docker 網(wǎng)絡(luò)。
$?docker?network?create?-d?bridge?test-net
參數(shù)說明:
-d:參數(shù)指定 Docker 網(wǎng)絡(luò)類型,有 bridge、overlay。
其中 overlay 網(wǎng)絡(luò)類型用于 Swarm mode,在本小節(jié)中你可以忽略它。
連接容器
運(yùn)行一個(gè)容器并連接到新建的?test-net?網(wǎng)絡(luò):
$?docker?run?-itd?--name?test1?--network?test-net?ubuntu?/bin/bash
打開新的終端,再運(yùn)行一個(gè)容器并加入到?test-net?網(wǎng)絡(luò):
$?docker?run?-itd?--name?test2?--network?test-net?ubuntu?/bin/bash
apt-get?update
apt?install?iputils-ping
下面通過 ping 來證明 test1 容器和 test2 容器建立了互聯(lián)關(guān)系。
如果 test1、test2 容器內(nèi)中無 ping 命令,則在容器內(nèi)執(zhí)行以下命令安裝 ping(即學(xué)即用:可以在一個(gè)容器里安裝好,提交容器到鏡像,在以新的鏡像重新運(yùn)行以上倆個(gè)容器)。


十一、總結(jié)
docker的容器技術(shù)可以在一臺(tái)主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。
鏡像、容器、倉庫是docker的三大核心概念。
dockerfile是一種被docker程序解釋的腳本,dockerfile由多條的指令組成,每條指令對(duì)應(yīng)Linux下面的一條命令。
管理docker容器中數(shù)據(jù)主要數(shù)據(jù)卷和數(shù)據(jù)卷容器方式。