Docker 最經常使用的鏡像命令和容器命令

  本文列出了 Docker 使用過程當中最經常使用的鏡像命令和容器命令,以及教你們如何操做容器數據卷,實現容器數據的備份。熟練練習這些命令之後,再來一些簡單的應用部署練習,你們就能夠學習 Docker 的鏡像構建、備份恢復遷移、鏡像倉庫、網絡、集羣等等更多的內容。docker

  

鏡像相關命令

  

  官方文檔:https://docs.docker.com/reference/shell

  

查看鏡像

  

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
  • REPOSITORY:鏡像在倉庫中的名稱,本文中之後都簡稱鏡像名稱
  • TAG:鏡像標籤
  • IMAGE ID:鏡像 ID
  • CREATED:鏡像的建立日期(不是獲取該鏡像的日期)
  • SIZE:鏡像大小

  這些鏡像都是存儲在 Docker 宿主機的 /var/lib/docker 目錄下。centos

  

搜索鏡像

  

  若是你須要從網絡中查找須要的鏡像,能夠經過如下命令搜索。安全

docker search 鏡像名稱

  • NAME:鏡像名稱
  • DESCRIPTION:鏡像描述
  • STARS:用戶評價,反映一個鏡像的受歡迎程度
  • OFFICIAL:是否爲官方構建
  • AUTOMATED:自動構建,表示該鏡像由 Docker Hub 自動構建流程建立的。

  

拉取鏡像

  

  拉取鏡像就是從中央倉庫下載鏡像到本地。bash

docker pull 鏡像名稱

  

  假如我要拉取 centos 鏡像到本地,若是不聲明 tag 鏡像標籤信息則默認拉取 latest 版本,也能夠經過:https://hub.docker.com/ 搜索該鏡像,查看支持的 tag 信息。網絡

  

  經過查看 tag 信息,若是咱們要下載 centos7 的鏡像。學習

docker pull centos:7

  

刪除鏡像

  

  按鏡像 ID 刪除鏡像。url

# 刪除單個鏡像
docker rmi 鏡像ID
# 刪除多個鏡像
docker rmi 鏡像ID 鏡像ID 鏡像ID

  

  docker images -q 能夠查詢到全部鏡像的 ID,經過組合命令能夠實現刪除全部鏡像的操做。centos7

docker rmi `docker images -q`

注意:若是經過某個鏡像建立了容器,則該鏡像沒法刪除。.net

解決辦法:先刪除鏡像中的容器,再刪除該鏡像。

  

容器相關命令

  

查看容器

  

  查看正在運行的容器。

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE        COMMAND        CREATED        STATUS        PORTS        NAMES
  • CONTAINER ID:容器 ID
  • IMAGE:所屬鏡像
  • COMMAND
  • CREATED:建立時間
  • STATUS:容器狀態
  • PORTS:端口
  • NAMES:容器名稱

  

  查看中止的容器。

docker ps -f status=exited

  

  查看全部容器(包括運行和中止)。

docker ps -a

  

  查看最後一次運行的容器。

docker ps -l

  

建立與啓動容器

  

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -i:表示運行容器;
  • -t:表示容器啓動後會進入其命令行。加入這兩個參數後,容器建立就能登陸進去。即分配一個僞終端;
  • --name:爲建立的容器命名;
  • -v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可使用多個 -v 作多個目錄或文件映射。注意:最好作目錄映射,在宿主機上作修改,而後共享到容器上;
  • -d:在 run 後面加上 -d 參數,則會建立一個守護式容器在後臺運行(這樣建立容器後不會自動登陸容器,若是隻加 -i -t 兩個參數,建立容器後就會自動進容器裏);
  • -p:表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可使用多個 -p 作多個端口映射。
  • -P:隨機使用宿主機的可用端口與容器內暴露的端口映射。

  

建立並進入容器

  

  下面這行命令的意思就是經過鏡像 AA 建立一個容器 BB,運行容器並進入容器的 /bin/bash

docker run -it --name 容器名稱 鏡像名稱:標籤 /bin/bash

注意:Docker 容器運行必須有一個前臺進程, 若是沒有前臺進程執行,容器認爲是空閒狀態,就會自動退出。

  

退出當前容器

exit

  

守護式方式建立容器

  

docker run -di --name 容器名稱 鏡像名稱:標籤

  

登陸守護式容器方式

docker exec -it 容器名稱|容器ID /bin/bash

  

中止與啓動容器

  

# 中止容器
docker stop 容器名稱|容器ID
# 啓動容器
docker start 容器名稱|容器ID

  

文件拷貝

  

  若是咱們須要將文件拷貝到容器內可使用 cp 命令。

docker cp 須要拷貝的文件或目錄 容器名稱:容器目錄

  也能夠將文件從容器內拷貝出來。

docker cp 容器名稱:容器目錄 須要拷貝的文件或目錄

  

目錄掛載(容器數據卷操做)

  

  咱們能夠在建立容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣咱們就能夠經過修改宿主機某個目錄的文件從而去影響容器,並且這個操做是雙向綁定的,也就是說容器內的操做也會影響到宿主機,實現備份功能。

  可是容器被刪除的時候,宿主機的內容並不會被刪除,由於底層是經過拷貝實現的。若是多個容器掛載同一個目錄,其中一個容器被刪除,其餘容器的內容也不會受到影響,同理,底層是拷貝實現的。

  可是容器被刪除的時候,宿主機的內容並不會被刪除。若是多個容器掛載同一個目錄,其中一個容器被刪除,其餘容器的內容也不會受到影響。

  容器與宿主機之間的數據卷屬於引用的關係,數據卷是從外界掛載到容器內部中的,因此能夠脫離容器的生命週期而獨立存在,正是因爲數據卷的生命週期並不等同於容器的生命週期,在容器退出或者刪除之後,數據卷仍然不會受到影響,數據卷的生命週期會一直持續到沒有容器使用它爲止。

  建立容器添加 -v 參數,格式爲宿主機目錄:容器目錄,例如:

docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目錄掛載
docker run -di -v /宿主機目錄:/容器目錄 -v /宿主機目錄2:/容器目錄2 鏡像名

目錄掛載操做可能會出現權限不足的提示。這是由於 CentOS7 中的安全模塊 SELinux 把權限禁掉了,在 docker run 時經過 --privileged=true 給該容器加權限來解決掛載的目錄沒有權限的問題。

  

匿名掛載

  

  匿名掛載只須要寫容器目錄便可,容器外對應的目錄會在 /var/lib/docker/volume 中生成。

# 匿名掛載
docker run -di -v /usr/local/data --name centos7-02 centos:7
# 查看 volume 數據卷信息
docker volume ls

  

具名掛載

  

  具名掛載就是給數據捲起了個名字,容器外對應的目錄會在 /var/lib/docker/volume 中生成。

# 匿名掛載
docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7
# 查看 volume 數據卷信息
docker volume ls

  

指定目錄掛載

  

  一開始給你們講解的方式就屬於指定目錄掛載,這種方式的掛載不會在 /var/lib/docker/volume 目錄生成內容。

docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目錄掛載
docker run -di -v /宿主機目錄:/容器目錄 -v /宿主機目錄2:/容器目錄2 鏡像名

  

查看目錄掛載關係

  

  經過 docker volume inspect 數據卷名稱 能夠查看該數據卷對應宿主機的目錄地址。

[root@localhost ~]# docker volume inspect docker_centos_data
[
    {
        "CreatedAt": "2020-08-13T20:19:51+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/docker_centos_data/_data",
        "Name": "docker_centos_data",
        "Options": null,
        "Scope": "local"
    }
]

  

  經過 docker inspect 容器ID或名稱 ,在返回的 JSON 節點中找到 Mounts,能夠查看詳細的數據掛載信息。

  

只讀/讀寫

  

# 只讀。只能經過修改宿主機內容實現對容器的數據管理。
docker run -it -v /宿主機目錄:/容器目錄:ro 鏡像名
# 讀寫,默認。宿主機和容器能夠雙向操做數據。
docker run -it -v /宿主機目錄:/容器目錄:rw 鏡像名

  

volumes-from(繼承)

  

# 容器 centos7-01 指定目錄掛載
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 容器 centos7-04 和 centos7-05 至關於繼承 centos7-01 容器的掛載目錄
docker run -di --volumes-from centos7-01 --name centos7-04 centos:7
docker run -di --volumes-from centos7-01 --name centos7-05 centos:7

  

查看容器 IP 地址

  

  咱們能夠經過如下命令查看容器的元信息。

docker inspect 容器名稱|容器ID

  也能夠直接執行下面的命令直接輸出 IP 地址。

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱|容器ID

  

刪除容器

  

# 刪除指定容器
docker rm 容器名稱|容器ID
# 刪除多個容器
docker rm 容器名稱|容器ID 容器名稱|容器ID

經常使用命令的練習就到這裏,下文咱們來一些簡單的應用部署練習,增強 Docker 命令的使用。

本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議

你們能夠經過 分類 查看更多關於 Docker 的文章。

  

🤗 您的點贊轉發是對我最大的支持。

📢 掃碼關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~

相關文章
相關標籤/搜索