零自阱、本文綱要
- 一、認(rèn)識(shí)Docker
- 二米酬、Docker架構(gòu)
- 三沛豌、安裝Docker
- 四、啟用Docker
- 五赃额、Docker的基本命令
- 六加派、Docker數(shù)據(jù)卷
- 七、Docker命令小結(jié)(僅看命令可跳到此處)
tips:Ctrl + F快速定位到所需內(nèi)容閱讀吧跳芳。
一芍锦、認(rèn)識(shí)Docker
1、Docker解決依賴兼容問(wèn)題
① 將應(yīng)用的Libs(函數(shù)庫(kù))飞盆、Deps(依賴)娄琉、配置與應(yīng)用一起打包次乓;
② 將每個(gè)應(yīng)用放到一個(gè)隔離容器去運(yùn)行,避免互相干擾孽水。2票腰、Docker解決操作系統(tǒng)環(huán)境差異問(wèn)題
① Docker將用戶程序與所需要調(diào)用的系統(tǒng)(比如Ubuntu)函數(shù)庫(kù)一起打包;
② Docker運(yùn)行到不同操作系統(tǒng)時(shí)女气,直接基于打包的函數(shù)庫(kù)杏慰,借助于操作系統(tǒng)的Linux內(nèi)核來(lái)運(yùn)行。3炼鞠、Docker的優(yōu)勢(shì)
① 可以將程序及其依賴缘滥、運(yùn)行環(huán)境一起打包為一個(gè)鏡像,可以遷移到任意Linux操作系統(tǒng)谒主;
② 運(yùn)行時(shí)利用沙箱機(jī)制形成隔離容器完域,各個(gè)應(yīng)用互不干擾;
③ 啟動(dòng)瘩将、移除都可以通過(guò)一行命令完成,方便快捷凹耙。4姿现、Docker和虛擬機(jī)的區(qū)別
① Docker是一個(gè)系統(tǒng)進(jìn)程;虛擬機(jī)是在操作系統(tǒng)中的操作系統(tǒng)肖抱;
② Docker體積小备典、啟動(dòng)速度快、性能好意述;虛擬機(jī)體積大提佣、啟動(dòng)速度慢、性能一般荤崇。
二拌屏、Docker架構(gòu)
鏡像(Image)和容器(Container)是我們較為關(guān)注的概念。
- 1术荤、客戶端(Client)
Docker 客戶端通過(guò)命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護(hù)進(jìn)程通信倚喂。
2、鏡像(Image)
Docker將應(yīng)用程序及其所需的依賴瓣戚、函數(shù)庫(kù)端圈、環(huán)境、配置等文件打包在一起子库,稱為鏡像舱权。3、容器(Container)
鏡像中的應(yīng)用程序運(yùn)行后形成的進(jìn)程就是容器仑嗅,只是Docker會(huì)給容器進(jìn)程做隔離宴倍,對(duì)外不可見(jiàn)张症。4、主機(jī)(Host)
一個(gè)物理或者虛擬的機(jī)器用于執(zhí)行 Docker 守護(hù)進(jìn)程和容器啊楚。5吠冤、倉(cāng)庫(kù)(Registry)
倉(cāng)庫(kù)用來(lái)保存鏡像,可以理解為代碼控制中的代碼倉(cāng)庫(kù)恭理。
Docker Hub(https://hub.docker.com) 是一個(gè)官方的Docker鏡像的托管平臺(tái)拯辙,提供了龐大的鏡像集合供使用。
國(guó)內(nèi)也有類似于DockerHub 的公開(kāi)服務(wù)颜价,比如 網(wǎng)易云鏡像服務(wù)涯保、阿里云鏡像庫(kù)等。
三周伦、安裝Docker
Install Docker Engine on CentOS | Docker Documentation
- 1夕春、系統(tǒng)要求
此處官方要求CentOS必須是7/8版本。
To install Docker Engine, you need a maintained version of CentOS 7 or 8. Archived versions aren’t supported or tested. - 2专挪、卸載老版本
如果安裝過(guò)老版本的Docker及志,先卸載,再安裝新版本寨腔。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 3速侈、安裝Docker
① 安裝yum工具,此處需保持虛擬機(jī)聯(lián)網(wǎng)
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
② 更新本地鏡像源
此處我們?cè)O(shè)置阿里云為本地鏡像源迫卢,以保障基礎(chǔ)下載速度倚搬。
# 設(shè)置docker鏡像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
③安裝Docker
docker-ce為社區(qū)免費(fèi)版本,ee版本為企業(yè)版乾蛤。
yum install -y docker-ce
至此每界,我們就已經(jīng)完成Docker的基礎(chǔ)安裝了。
四家卖、啟用Docker
- 1眨层、啟動(dòng)Docker
① 關(guān)閉防火墻/開(kāi)放對(duì)應(yīng)端口
Docker應(yīng)用會(huì)用到諸多端口,實(shí)際生產(chǎn)環(huán)境中推薦按需開(kāi)啟上荡。此處我們直接關(guān)閉防火墻谐岁。
# 關(guān)閉
systemctl stop firewalld
# 禁止開(kāi)機(jī)啟動(dòng)防火墻
systemctl disable firewalld
# 查看防火墻狀態(tài)
systemctl status firewalld
② 命令啟動(dòng)Docker
systemctl start docker # 啟動(dòng)docker服務(wù)
systemctl stop docker # 停止docker服務(wù)
systemctl restart docker # 重啟docker服務(wù)
③ 查看Docker版本
docker -v
- 2、配置鏡像加速
此處我們配置阿里云的容器鏡像服務(wù) (aliyun.com)榛臼。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1ifz7405.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
五伊佃、Docker的基本命令
1、鏡像操作
① 鏡像
在Docker中沛善,鏡像名稱為:NAME[:TAG|@DIGEST]航揉。其中NAME部分是必須的,也就是鏡像名稱金刁。[:TAG|@DIGEST]標(biāo)簽或者摘要部分是可選的帅涂,如:nginx:1.20议薪。
② 鏡像命令
具體可以查閱官方文檔:docker image | Docker Documentation
- 1.1 拉取、查看鏡像
① 去鏡像倉(cāng)庫(kù)搜索鏡像
此處我們可以訪問(wèn)Docker Hub媳友,然后搜索自己所需的鏡像斯议,選擇Official Image官方鏡像即可。
② 鏡像拉取
直接pull等同于pull latest版本醇锚,也就是最新版本哼御。
docker pull nginx
docker pull nginx:latest
當(dāng)然也可以根據(jù)自己實(shí)際需求,選擇對(duì)應(yīng)的版本焊唬。
③ 查看鏡像
docker images
- 1.2 保存恋昼、刪除、導(dǎo)入鏡像
① 保存鏡像
命令:docker save [OPTIONS] IMAGE [IMAGE...]
赶促,可見(jiàn)[OPTIONS]和[IMAGE...]是可選的液肌。
[OPTIONS] -o,--output Write to a file, instead of STDOUT表示向外輸出文件鸥滨。
# 表示向外輸出nginx:latest鏡像的nginx.tar文件
docker save -o nginx.tar nginx:latest
② 刪除鏡像
命令:docker image rm [OPTIONS] IMAGE [IMAGE...]
或者docker rmi [OPTIONS] IMAGE [IMAGE...]
此處蒋纬,我們可以看到Docker為了增加命令可讀性也下了一定的功夫喜德。
docker rmi nginx:latest
③ 導(dǎo)入鏡像
命令:docker image load [OPTIONS]
-i虎锚,--input Read from tar archive file, instead of STDIN表示從文件讀取泼舱。
docker load -i nginx.tar
2宪睹、容器操作
- docker run:創(chuàng)建并運(yùn)行一個(gè)容器佛寿,處于運(yùn)行狀態(tài)
- docker pause:讓一個(gè)運(yùn)行的容器暫停
- docker unpause:讓一個(gè)容器從暫停狀態(tài)恢復(fù)運(yùn)行
- docker stop:停止一個(gè)運(yùn)行的容器
- docker start:讓一個(gè)停止的容器再次運(yùn)行
- docker rm:刪除一個(gè)容器
- 2.1 創(chuàng)建并運(yùn)行一個(gè)容器
我們可以在Docker Hub中查詢到如何創(chuàng)建運(yùn)行一個(gè)容器的相關(guān)命令熙兔,官方給我們提供了幾種使用場(chǎng)景的命令囱稽。此處我們以Nginx為例容客。
① 創(chuàng)建并運(yùn)行Nginx容器
官方命令:$ docker run --name some-nginx -d -p 8080:80 some-content-nginx秕铛,其中some-nginx是給image鏡像的命名(唯一即可),some-content-nginx是我們本機(jī)對(duì)應(yīng)的nginx鏡像缩挑。
我們稍加改動(dòng)但两,就可以運(yùn)行自己的Nginx容器了。如下:
docker run --name mn -d -p 80:80 nginx:latest
-d :Run container in background and print container ID 后臺(tái)運(yùn)行供置;
-p :Publish a container's port(s) to the host 將容器端口映射到宿主機(jī)端口谨湘。
此時(shí)我們就可以通過(guò) http://192.168.253.168:80/ 訪問(wèn)到我們的Nginx。
查看日志:
docker logs
查看容器狀態(tài):
docker ps
docker ps -a 查看所有容器芥丧,包括已經(jīng)停止的(不包含已移除的)紧阔。
② 創(chuàng)建并運(yùn)行Redis容器
官方命令:$ docker run --name some-redis -d redis redis-server --save 60 1 --loglevel warning,我們稍加修改续担,添加-p指令將Redis容器端口映射到主機(jī)端口擅耽。
$ docker run --name mr -p 6379:6379 -d redis:latest redis-server --save 60 1 --loglevel warning
這樣,我們就可以通過(guò)Redis客戶端連接訪問(wèn)Redis容器物遇。
六乖仇、Docker數(shù)據(jù)卷
- 1憾儒、認(rèn)識(shí)數(shù)據(jù)卷
數(shù)據(jù)卷(volume)是一個(gè)虛擬目錄,指向宿主機(jī)文件系統(tǒng)中的某個(gè)目錄乃沙。
一旦完成數(shù)據(jù)卷掛載起趾,對(duì)容器的一切操作都會(huì)作用在數(shù)據(jù)卷對(duì)應(yīng)的宿主機(jī)目錄。同樣我們操作宿主機(jī)的目錄警儒,就等于操作容器內(nèi)的目錄训裆。
2、數(shù)據(jù)卷操作命令
| Command | Description |
| docker volume create | create 創(chuàng)建一個(gè)volume
| docker volume inspect | inspect 顯示一個(gè)或多個(gè)volume的信息
| docker volume ls | ls 列出所有的volume
| docker volume prune | prune 刪除未使用的volume
| docker volume rm | rm 刪除一個(gè)或多個(gè)指定的volume2.1 創(chuàng)建和查看數(shù)據(jù)卷
① 創(chuàng)建數(shù)據(jù)卷
命令:docker volume create [OPTIONS] [VOLUME]
docker volume create html
② 查看所有數(shù)據(jù)卷
命令:docker volume ls [OPTIONS]
docker volume ls
③ 查看數(shù)據(jù)卷詳細(xì)信息
命令:docker volume inspect [OPTIONS] VOLUME [VOLUME...]
docker volume inspect html
輸出信息如下:
[
{
"CreatedAt": "2020-04-19T11:00:21Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "myvolume",
"Options": {},
"Scope": "local"
}
]
可以看到冷蚂,我們創(chuàng)建的html這個(gè)數(shù)據(jù)卷關(guān)聯(lián)的宿主機(jī)目錄為/var/lib/docker/volumes/html/_data
目錄缭保。
- 2.2 掛載數(shù)據(jù)卷
① 帶數(shù)據(jù)卷模式掛載
指令:-v, --volume=[host-src:]container-dest[:<options>]: Bind mount a volume.
,如下我們就是把html數(shù)據(jù)卷掛載到Nginx容器內(nèi)的/usr/share/nginx/html目錄中蝙茶。
docker run \
--name mn \
-v html:/usr/share/nginx/html \
-p 80:80 \
-d \
nginx:latest
這樣我們修改/var/lib/docker/volumes/html/_data
目錄中的文件艺骂,容器中對(duì)應(yīng)的文件也會(huì)產(chǎn)生變化。
② 直接掛載
- -v [宿主機(jī)目錄](méi):[容器內(nèi)目錄](méi)
- -v [宿主機(jī)文件]:[容器內(nèi)文件]
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
七隆夯、Docker命令小結(jié)(僅看命令可跳到此處)
① docker相關(guān)
啟動(dòng)docker服務(wù)systemctl start docker
停止docker服務(wù)systemctl stop docker
重啟docker服務(wù)systemctl restart docker
查看docker版本docker -v
② 鏡像相關(guān)
鏡像拉惹 :docker pull nginx
,docker pull nginx:latest
查看鏡像:docker images
保存鏡像:docker save -o nginx.tar nginx:latest
刪除鏡像:docker rmi nginx:latest
導(dǎo)入鏡像:docker load -i nginx.tar
③ 容器相關(guān)
創(chuàng)建并運(yùn)行容器:docker run --name mn -d -p 80:80 nginx:latest
讓運(yùn)行容器暫停:docker pause mn
讓容器從暫停狀態(tài)恢復(fù)運(yùn)行:docker unpause mn
停止運(yùn)行的容器:docker stop mn
讓停止的容器再次運(yùn)行:docker start mn
刪除一個(gè)容器:docker rm mn
查看日志:docker logs
查看容器狀態(tài):docker ps
,docker ps -a
④ 數(shù)據(jù)卷相關(guān)
創(chuàng)建數(shù)據(jù)卷:docker volume create html
查看所有數(shù)據(jù)卷:docker volume ls
查看數(shù)據(jù)卷詳細(xì)信息:docker volume inspect html
掛載數(shù)據(jù)卷:-v html:/usr/share/nginx/html
,-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
八、結(jié)尾
以上即為Docker基礎(chǔ)的內(nèi)容蹄衷,感謝閱讀忧额。