原文:Docker基礎(chǔ)知識(shí)梳理 - 9ong
架構(gòu)
概念
Docker 是一個(gè)開源的應(yīng)用容器引擎
-
docker客戶端
docker客戶端是用戶與docker服務(wù)交互的窗口温艇,也就是我們通常操作各種docker命令的終端捍歪。
-
docker服務(wù)
docker daemon的守護(hù)進(jìn)程
docker deamon監(jiān)聽著客戶端的請(qǐng)求,并且管理著docker的鏡像、容器炼吴、網(wǎng)絡(luò)味滞、磁盤(圖中只列出了鏡像與容器)等對(duì)象
-
倉庫
類似于代碼倉庫github,但這個(gè)是docker鏡像的倉庫
-
鏡像
docker鏡像是一個(gè)只讀模板疙挺,可以用來創(chuàng)建docker容器扛邑。鏡像是一種輕量級(jí)的、可執(zhí)行的獨(dú)立軟件包衔统,用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件鹿榜。
鏡像是一層套一層。
-
容器
鏡像的一份運(yùn)行實(shí)例
-
容器數(shù)據(jù)卷
容器內(nèi)的數(shù)據(jù)需要持久化到宿主機(jī)上是很有必要的锦爵,這就需要用到數(shù)據(jù)卷
容器數(shù)據(jù)卷的設(shè)計(jì)目的就是做數(shù)據(jù)的持久化和容器間的數(shù)據(jù)共享舱殿,數(shù)據(jù)卷完全獨(dú)立于容器的生命周期,也就是說就算容器關(guān)閉或者刪除险掀,數(shù)據(jù)也不會(huì)丟失沪袭。簡(jiǎn)單點(diǎn)說就將宿主機(jī)的目錄掛在到容器,應(yīng)用在容器內(nèi)的數(shù)據(jù)可以同步到宿主機(jī)磁盤上樟氢,這樣容器內(nèi)產(chǎn)生的數(shù)據(jù)就可以持久化了冈绊。關(guān)于容器卷的命令我們后面會(huì)有操作實(shí)例!
安裝
常用命令
本地鏡像命令
-
docker images
查看本地主機(jī)上所有的鏡像埠啃。
還可以通過docker images nginx指定某個(gè)具體的鏡像查看對(duì)應(yīng)信息死宣。
注意:鏡像名是會(huì)重復(fù)的,只有image id才是唯一的標(biāo)識(shí)碴开。
-
docker rmi
刪除本地的鏡像
-
docker tag
標(biāo)記本地鏡像毅该,將其歸入某一倉庫。
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] docker tag ubuntu:15.10 runoob/ubuntu:v3
-
docker history
docker history runoob/ubuntu:v3
-
docker build
命令用于使用 Dockerfile 創(chuàng)建鏡像潦牛。
docker build [OPTIONS] PATH | URL | -
options詳見:Docker build 命令 | 高手教程
-
docker save
將指定鏡像保存成 tar 歸檔文件眶掌。
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
-
docker import
從歸檔文件中創(chuàng)建鏡像。
docker import my_ubuntu_v3.tar runoob/ubuntu:v4
鏡像倉庫
-
docker login
登陸到Docker Hub
docker login -u 用戶名 -p 密碼
登出Docker Hub
docker logout
-
docker search
根據(jù)鏡像名稱搜索遠(yuǎn)程倉庫中的鏡像
-
docker pull
搜索到某個(gè)鏡像之后就可以從遠(yuǎn)程拉取鏡像啦巴碗,類似git中的pull命令朴爬,對(duì)應(yīng)的還有個(gè)docker push的命令。
-
docker push
將本地的鏡像上傳到鏡像倉庫橡淆,要先登陸到鏡像倉庫召噩。
docker push myapache:v1
容器生命周期命令
-
docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 可以基于某個(gè)鏡像運(yùn)行一個(gè)容器母赵,如果本地有指定的鏡像則使用本地鏡像,如果沒有則從遠(yuǎn)程拉取對(duì)應(yīng)的鏡像然后啟動(dòng)蚣常。
使用鏡像 nginx:latest市咽,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 80 端口映射到主機(jī)的 80 端口,主機(jī)的目錄 /data 映射到容器的 /data。
```
docker run -p 80:80 -v /data:/data -d nginx:latest
```
使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令抵蚊。
```
docker run -it nginx:latest /bin/bash
```
```
-d:啟動(dòng)容器施绎,并且后臺(tái)運(yùn)行(docker容器后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程贞绳,容器運(yùn)行的命令如果不是一直掛起的命令谷醉,容器啟動(dòng)后就會(huì)自動(dòng)退出);啟動(dòng)后沒有進(jìn)入到容器內(nèi)部冈闭,還是在宿主機(jī)俱尼。
-i:以交互模式運(yùn)行容器,通常與-t同時(shí)使用萎攒;
-t:為容器重新分配一個(gè)偽輸入終端遇八,通常與-i同時(shí)使用(容器啟動(dòng)后進(jìn)入到容器內(nèi)部的命令窗口);
-P:隨機(jī)端口映射耍休,容器內(nèi)部端口隨機(jī)映射到主機(jī)的高端口刃永;
-p:指定端口映射,格式為:主機(jī)(宿主)端口:容器端口羊精;
-v:建立宿主機(jī)與容器目錄的同步斯够;注意的是這里的同步是雙向的。
--name="myTomcat": 為容器指定一個(gè)名稱(如果不指定喧锦,則有個(gè)隨機(jī)的名字)读规;
```
更多options詳見[Docker run 命令 | 高手教程](http://study.p2hp.com/docker/docker-run-command.html)
-
docker create
創(chuàng)建一個(gè)新的容器但不啟動(dòng)它
-
退出容器
進(jìn)入到容器后可以通過exit命令退出容器,也可以通過ctrl+P+Q快捷鍵退出容器燃少,這兩種方式的不同之處是exit會(huì)退出并且關(guān)閉容器束亏,而ctrl+P+Q快捷鍵只是單純的退出,容器還在運(yùn)行阵具,并且還能再次進(jìn)入碍遍。
-
docker start
啟動(dòng)一個(gè)或多個(gè)已經(jīng)被停止的容器
-
docker stop
停止一個(gè)運(yùn)行中的容器
-
docker restart
重啟容器
-
docker pause
暫停容器中所有的進(jìn)程。
-
docker unpause
恢復(fù)容器中所有的進(jìn)程怔昨。
-
docker exec
在運(yùn)行的容器中執(zhí)行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS說明:
-d :分離模式: 在后臺(tái)運(yùn)行
-i :即使沒有附加也保持STDIN 打開
-t :分配一個(gè)偽終端
在容器mynginx中以交互模式執(zhí)行容器內(nèi)/root/runoob.sh腳本
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
在容器mynginx中開啟一個(gè)交互模式的終端
runoob@runoob:~$ docker exec -i -t mynginx /bin/bash root@b1a0703e41e7:/#
-
docker rm
刪除一個(gè)或多少容器
-
docker kill
殺掉一個(gè)運(yùn)行中的容器
容器操作
-
docker ps
列出容器雀久,沒有加options宿稀,默認(rèn)展示正在運(yùn)行的容器趁舀。
options:
-a :顯示所有的容器,包括未運(yùn)行的祝沸。 -f :根據(jù)條件過濾顯示的內(nèi)容矮烹。 --format :指定返回值的模板文件越庇。 -l :顯示最近創(chuàng)建的容器。 -n :列出最近創(chuàng)建的n個(gè)容器奉狈。 --no-trunc :不截?cái)噍敵觥? -q :靜默模式卤唉,只顯示容器編號(hào)。 -s :顯示總的文件大小仁期。
-
docker top
查看容器中運(yùn)行的進(jìn)程信息桑驱,支持 ps 命令參數(shù)
-
docker attach
連接到正在運(yùn)行中的容器。attach是可以帶上--sig-proxy=false來確保CTRL-D或CTRL-C不會(huì)關(guān)閉容器跛蛋。
-
docker inspect
獲取容器/鏡像的元數(shù)據(jù)熬的,關(guān)于容器/鏡像配置信息。
-
docker events
從服務(wù)器獲取實(shí)時(shí)事件
顯示docker 2019年11月2日后的所有事件:
docker events --since="1572624000"
-
docker logs
獲取容器的日志
-f : 跟蹤日志輸出 --since :顯示某個(gè)開始時(shí)間的所有日志 -t : 顯示時(shí)間戳 --tail :僅列出最新N條容器日志
```
sudo docker logs -f jm-php7-2-php-fpm
```
-
docker port
列出指定的容器的端口映射赊级,或者查找將PRIVATE_PORT NAT到面向公眾的端口押框。
容器其他命令
-
docker commit :從容器創(chuàng)建一個(gè)新的鏡像。
-a :提交的鏡像作者理逊; -c :使用Dockerfile指令來創(chuàng)建鏡像橡伞; -m :提交時(shí)的說明文字; -p :在commit時(shí)晋被,將容器暫停兑徘。
將容器 jm-php-7-2-php-fpm 保存為新的鏡像 php72web并打上tag為v1,添加提交人信息和說明信息墨微。
docker commit -a "tsingchan" -m "new php7.2 webserver" jm-php-7-2-php-fpm php72web:v1
-
docker cp
用于容器與主機(jī)之間的數(shù)據(jù)拷貝道媚。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
options:
-L :保持源目標(biāo)中的鏈接
注意:docker cp支持直接復(fù)制目錄;
注意:docker cp支持重命名翘县;
將主機(jī)/www/runoob目錄拷貝到容器jm-php-7-2-php-fpm的/www目錄下最域。 docker cp /www/runoob jm-php-7-2-php-fpm:/www/ 將主機(jī)/www/runoob目錄拷貝到容器jm-php-7-2-php-fpm中,目錄重命名為www锈麸。 docker cp /www/runoob jm-php-7-2-php-fpm:/www 將容器jm-php-7-2-php-fpm的/www目錄拷貝到主機(jī)的/tmp目錄中镀脂。 docker cp jm-php-7-2-php-fpm:/www /tmp/
-
docker diff
檢查容器里文件結(jié)構(gòu)的更改
sudo docker diff jm-php7-2-php-fpm C /run A /run/php-fpm.pid C /etc C /etc/php C /etc/php/7.2 C /etc/php/7.2/fpm C /etc/php/7.2/fpm/conf.d A /etc/php/7.2/fpm/conf.d/99-overrides.ini
其他命令
- docker info : 顯示 Docker 系統(tǒng)信息,包括鏡像和容器數(shù)忘伞。
- docker version :顯示 Docker 版本信息
Dockerfile
我們可以從遠(yuǎn)程pull一個(gè)鏡像薄翅,那遠(yuǎn)程的鏡像是怎么來的呢?
如果我們想自己創(chuàng)建一個(gè)鏡像又該怎么做呢氓奈?
這就涉及到Dockerfile了翘魄,Dockerfile是一個(gè)包含用戶能夠構(gòu)建鏡像的所有命令的文本文檔,它有自己的語法以及命令舀奶,docker能夠從dockerfile中讀取指令自動(dòng)的構(gòu)建鏡像暑竟。
我們要想編寫自己的Dockerfiler并構(gòu)建鏡像,那對(duì)Dockerfile的語法和命令的了解就是必須的育勺。
Dockerfile 是一個(gè)用來構(gòu)建鏡像的文本文件但荤,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明罗岖。
注意:Dockerfile 的指令每執(zhí)行一次都會(huì)在 docker 上新建一層。所以過多無意義的層腹躁,會(huì)造成鏡像膨脹過大
更多關(guān)于dockerfile指令詳解:Dockerfile基礎(chǔ)知識(shí)梳理-9ong
docker-compose
Docker-compose基礎(chǔ)知識(shí)梳理-9ong
Docker Machine
Docker Machine 是一種可以讓您在虛擬主機(jī)上安裝 Docker 的工具桑包,并可以使用 docker-machine 命令來管理主機(jī)。
Docker Machine 也可以集中管理所有的 docker 主機(jī)纺非,比如快速的給 100 臺(tái)服務(wù)器安裝上 docker哑了。
Swarm
Docker Swarm 是 Docker 的集群管理工具。它將 Docker 主機(jī)池轉(zhuǎn)變?yōu)閱蝹€(gè)虛擬 Docker 主機(jī)烧颖。 Docker Swarm 提供了標(biāo)準(zhǔn)的 Docker API垒手,所有任何已經(jīng)與 Docker 守護(hù)程序通信的工具都可以使用 Swarm 輕松地?cái)U(kuò)展到多個(gè)主機(jī)。