Docker基礎命令詳解——鏡像及容器操做

Docker基礎命令詳解——鏡像及容器操做

前言

​ 上篇文章介紹了有關Docker的基礎與Linux下docker的安裝,本文主要講解安裝docker後的基礎使用方法以及命令的介紹,主要是docker鏡像操做及容器操做命令。php

​ 固然,docker的相關命令很是多,可使用docker help命令查看對應目錄以及相關提示命令。linux

Docker鏡像操做命令

[root@docker ~]# which docker
/usr/bin/docker

一、鏡像搜索:docker search

命令描述:從Docker Hub中搜索而且顯示你所須要的鏡像nginx

命令格式:docker search [options] termdocker

Options:
  -f, --filter filter   Filter output based on conditions provided 
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

 -s: -s 100 #表示收藏數大於100的鏡像

實例操做演示:shell

[root@docker ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        12968               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1772                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   764                                     [OK]
...//省略部份內容

[root@docker ~]# docker search -s 100 nginx
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                     Official build of Nginx.                        12968               [OK]                
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker con…   1772                                    [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable of…   764                                     [OK]
linuxserver/nginx         An Nginx container, brought to you by LinuxS…   104

簡要說明:centos

  • NAME:鏡像名稱
  • DESCRIPTION:該鏡像的描述信息
  • STARS:星級,越高則說明使用者,喜歡的人越多
  • OFFICIAL:是否爲官方發佈
  • AUTOMATED:自動建立

該命令做爲檢索命令,下面咱們須要獲取你檢索後選擇的每一個鏡像bash

二、鏡像獲取:docker pull

命令描述:從鏡像倉庫中拉取(形象的說法嘛)或者更新指定鏡像服務器

命令格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]tcp

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
  -q, --quiet                   Suppress verbose output

OPTIONS說明:ide

  • -a :拉取全部 tagged 鏡像
  • --disable-content-trust :忽略鏡像的校驗,默認開啓

實例演示:拉取nginx鏡像爲例

[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete 
74cda408e262: Pull complete 
ffadbd415ab7: Pull complete 
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:lates

這樣咱們就拉取了一個nginx鏡像,那麼咱們怎麼查看呢?

三、鏡像信息查看:docker images

命令描述:列出本地鏡像

命令格式:docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS說明:
-a :列出本地全部的鏡像(含中間映像層,默認狀況下,過濾掉中間映像層);
--digests :顯示鏡像的摘要信息;
-f :顯示知足條件的鏡像;
--format :指定返回值的模板文件;
--no-trunc :顯示完整的鏡像信息;
-q :只顯示鏡像ID。

實例演示:

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        6 days ago          127MB
#等價於下面的命令
[root@docker ~]# docker image ls 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        6 days ago          127MB

簡要說明:

  • REPOSITORY:倉庫名稱
  • TAG:標籤
  • IMAGE ID:鏡像id
  • CREATE:建立狀態(按照時間)
  • SIZE:文件大小

PS:補充使用docker inspect IMAGE ID能夠查看鏡像的詳細信息。

下面看看這個TAG的做用

四、鏡像標籤操做:docker tag

命令描述:標記本地鏡像,將其納入某一倉庫

命令格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

實例演示:

[root@docker ~]# docker tag nginx:latest nginx:lokott
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        6 days ago          127MB
nginx               lokott              ed21b7a8aee9        6 days ago          127MB

假設咱們建立的時候發現有錯誤,或者在不須要的時候怎麼刪除鏡像呢?繼續來看哈!

五、刪除鏡像:docker rmi

命令描述:刪除本地一個或多個鏡像

命令格式:docker rmi [OPTIONS] IMAGE [IMAGE...]

Options:
  -f, --force      Force removal of the image
      --no-prune   Do not delete untagged parents

實例演示:

[root@docker ~]# docker rmi nginx:lokott 
Untagged: nginx:lokott
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        6 days ago          127MB

[root@docker ~]# docker rmi nginx:latest 
Untagged: nginx:latest
Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45

刪除打標籤的鏡像其實本質就是一個脫去標籤的操做,與刪除原鏡像文件是不同的。

儘可能不要使用刪除ID號的方式刪除鏡像,而且注意儘可能刪除依賴該鏡像的全部容器後再刪除這個鏡像。

那麼咱們須要考慮咱們拉取了鏡像以後怎麼存出鏡像呢?這就須要使用下面的命令來實現了。

六、存出鏡像:docker save

​ 所謂存出,咱們設想這樣的場景應用:當須要將一臺機器上的鏡像遷移到另外一臺機器上的時候,須要將鏡像保存成本地文件,這個過程就叫作存出鏡像。

​ 你能夠簡單理解爲將鏡像打成壓縮包方便使用

命令描述:將指定鏡像保存成 tar 歸檔文件

命令格式:docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS 說明:
-o :輸出到的文件。

實例演示:

[root@docker ~]# docker save -o /opt/nginx nginx:latest

[root@docker ~]# ll /opt/
總用量 127560
drwx--x--x. 4 root root        28 4月   6 09:45 containerd
-rw-------. 1 root root 130618880 4月   6 14:04 nginx
drwxr-xr-x. 2 root root         6 10月 31 2018 rh

那麼有存出,就一定有對應的載入操做,咱們將存出的文件從本地複製一份到其餘機器上是,咱們須要使用這個鏡像,能夠經過下面的命令實現載入鏡像

七、載入鏡像:docker load

命令描述:

命令格式:docker load [OPTIONS]

Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output

實例演示:

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
#一:
[root@docker ~]# docker load < /opt/nginx 
c3a984abe8a8: Loading layer  72.48MB/72.48MB
99134ec7f247: Loading layer  58.11MB/58.11MB
d37eecb5b769: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        6 days ago          127MB
#二:從tar存檔文件中讀取,而不是從STDIN中讀取
[root@docker ~]# docker load --input /opt/nginx #或者使用-i代替--input也是同樣的
c3a984abe8a8: Loading layer  72.48MB/72.48MB
99134ec7f247: Loading layer  58.11MB/58.11MB
d37eecb5b769: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest

八、上傳鏡像:docker login (不作細說以及演示)

命令描述:將本身本地的鏡像製做好後上傳到倉庫中

命令格式:docker login

結合docker push NAME[:TAG]使用

Docker容器操做命令

關於Docker容器的操做筆者換一種風格來介紹,可是仍是會經過實例來方便你們理解。

首先,容器簡單而言,是基於鏡像的一個運行實例,是獨立運行的一個或一組應用以及其所必需的運行環境,包括文件系統、系統類庫、shell環境等。鏡像是隻讀模板,而容器會給這個只讀模板一個額外的可寫層。

接下來就容器來說述具體的操做命令。

一、容器建立與啓動

​ 容器建立就是將鏡像加載到容器的過程,由於是docker是輕量級的應用工具,用戶能夠隨時進行建立或者刪除。新建的容器默認處於中止狀態,不容許任何程序,須要在其中發起一個進程來啓動容器,這個進程就是這個容器的惟一進程,所以在該進程結束的時候,容器也會徹底中止。中止的容器能夠從新啓動而且保留原來的修改。

容器的建立

容器建立命令:docker create

命令格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

經常使用的options:

  • -i:讓容器的輸入保持打開
  • -t:讓docker分配一個僞終端

實例演示:

[root@docker ~]# docker create -it nginx:latest /bin/bash
a1a2e8468189b146b0215971cf76947987d8fc3f42c58e77371e8d48afb030d1
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a1a2e8468189        nginx:latest        "/bin/bash"         7 seconds ago       Created                                 gallant_feynman

相關說明:

CONTAINER ID:容器ID號

IMAGE:使用的鏡像

COMMAND :

CREATED:顯示操做時間

STATUS:顯示狀態,created表示已建立

PORTS:端口 信息和使用的鏈接類型(tcp/udp)

NAMES:自動分配容器的名稱

容器的啓動

命令:docker start

命令格式:docker start [OPTIONS] CONTAINER [CONTAINER...]

實例演示:

[root@docker ~]# docker start a1a2e8468189
a1a2e8468189
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a1a2e8468189        nginx:latest        "/bin/bash"         10 minutes ago      Up 2 seconds        80/tcp              gallant_feynman

啓動後,發現端口信息出來了,而且顯示是up狀態,表示容器已是啓動狀態了。

下面看另外一種啓動容器的方式:

[root@docker ~]# docker run centos /usr/bin/bash -c ls /
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS               NAMES
4835176a7d8e        centos              "/usr/bin/bash -c ls…"   About a minute ago   Exited (0) About a minute ago                       affectionate_keldysh
a1a2e8468189        nginx:latest        "/bin/bash"              28 minutes ago       Up 17 minutes                   80/tcp              gallant_feynman

-c參數表示的是須要執行的命令,這種方式適用於一次執行,Exited (0) 表示正常正確退出,及終止運行。

docker run的命令執行流程爲:先從本地查找鏡像(本地沒有image不表示容器不依賴image),若是沒有會從公共倉庫中下載;再經過鏡像建立而且啓動一個容器;分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;從宿主機配置的網橋接口中橋接一個虛擬接口到容器中;分配一個地址池中的IP地址給容器;執行用戶指定的應用程序;執行以後容器被終止(後臺運行除外)。

後臺運行:run 後面加參數-d便可。

二、容器運行與終止

想要在運行中的容器停下來,使用docker stop 命令

命令格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]

實例演示:

[root@docker ~]# docker stop a1a2e8468189
a1a2e8468189
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
4835176a7d8e        centos              "/usr/bin/bash -c ls…"   9 minutes ago       Exited (0) 9 minutes ago                       affectionate_keldysh
a1a2e8468189        nginx:latest        "/bin/bash"              36 minutes ago      Exited (0) 3 seconds ago                       gallant_feynman

三、容器的進入

想要進入容器進行相應操做時可使用docker exec命令進入運行着的容器。

命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

[root@docker ~]# docker ps -a #檢查容器是不是運行狀態(up)
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4835176a7d8e        centos              "/usr/bin/bash -c ls…"   12 minutes ago      Exited (0) 12 minutes ago                       affectionate_keldysh
a1a2e8468189        nginx:latest        "/bin/bash"              38 minutes ago      Up 4 seconds                80/tcp              gallant_feynman

[root@docker ~]# docker exec -it a1a2e8468189 /bin/bash #進入僞終端
root@a1a2e8468189:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

root@a1a2e8468189:/# exit #使用exit退出僞終端
exit
[root@docker ~]#

四、容器的導出和導入

相似鏡像,用戶也能夠將容器從一臺機器遷移到另外一臺機器。在遷移過程當中,首先須要將已經建立好的容器導出爲文件,使用docker export實現,不管這個容器是處於運行狀態仍是中止狀態都可以導出。導出以後可將導出文件傳輸到其餘機器,經過對應的導入命令實現遷移過程。

容器導出命令:docker export

命令格式:docker export [OPTIONS] CONTAINER

實例演示:一個運行狀態一箇中止狀態,都演示

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4835176a7d8e        centos              "/usr/bin/bash -c ls…"   21 minutes ago      Exited (0) 21 minutes ago                       affectionate_keldysh
a1a2e8468189        nginx:latest        "/bin/bash"              48 minutes ago      Up 9 minutes                80/tcp              gallant_feynman

運行中的容器導出:

[root@docker ~]# docker export a1a2e8468189 > nginx_contain
[root@docker ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  nginx  nginx_contain  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[root@docker ~]# ll
總用量 253448
-rw-------. 1 root root      1954 4月   6 08:49 anaconda-ks.cfg
-rw-r--r--. 1 root root      2002 4月   6 08:50 initial-setup-ks.cfg
-rw-------. 1 root root 130618880 4月   6 14:04 nginx #鏡像存出的文件
-rw-r--r--. 1 root root 128899072 4月   6 16:04 nginx_contain #容器導出文件 兩者權限不一樣

終止的容器導出:

[root@docker ~]# docker export 4835176a7d8e > centos_contain
[root@docker ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  nginx_contain  模板  圖片  下載  桌面
centos_contain   nginx                 公共           視頻  文檔  音樂

導出的文件從本地拷貝到遠程服務器,以後使用docker import命令導入,成爲鏡像

容器導入命令:docker import

命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

實例演示:

[root@docker ~]# docker import centos_contain centos_new:54
sha256:f32b5354c81de72a71af50468d09803aa9e62e08741e3cd3e84c10c9a74e2204
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_new          54                  f32b5354c81d        10 seconds ago      0B
nginx               latest              ed21b7a8aee9        6 days ago          127MB
centos              latest              470671670cac        2 months ago        237MB

或者使用cat 文件名 | docker import - 鏡像名稱:tag 執行命令也能夠的

五、容器的刪除

容器的刪除:docker rm

命令格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]

實例演示:

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4835176a7d8e        centos              "/usr/bin/bash -c ls…"   31 minutes ago      Exited (0) 31 minutes ago                       affectionate_keldysh
a1a2e8468189        nginx:latest        "/bin/bash"              58 minutes ago      Up 19 minutes               80/tcp              gallant_feynman

刪除已終止的容器:

[root@docker ~]# docker rm 4835176a7d8e
4835176a7d8e
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a1a2e8468189        nginx:latest        "/bin/bash"         59 minutes ago      Up 20 minutes       80/tcp              gallant_feynman

刪除成功了!

刪除還在運行中的容器:

[root@docker ~]# docker rm a1a2e8468189 
Error response from daemon: You cannot remove a running container a1a2e8468189b146b0215971cf76947987d8fc3f42c58e77371e8d48afb030d1. Stop the container before attempting removal or force remove

發現Error了,不能這樣刪除運行狀態中的容器,提示你的操做是嘗試刪除容器前中止容器的運行或者強制刪除

推薦前者,後者只須要以下操做,但儘可能不要隨意使用哈!

[root@docker ~]# docker rm a1a2e8468189 -f
a1a2e8468189
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

友情提示:docker默認的存儲目錄在/var/lib/docker目錄下,docker的鏡像、容器、日誌等內容所有都存儲在此,固然也能夠單獨使用大容量的分區來存儲這些內容,而且通常選擇創建在LVM邏輯卷,從而方便後續擴容操做。

總結

​ 本文講述的是docker基礎命令(鏡像和容器)的操做,經過實實在在的實際案例方便理解。對於docker的介紹與安裝能夠查閱筆者的前一篇文章。

​ 感謝閱讀!

相關文章
相關標籤/搜索