Docker 最常用的鏡像命令和容器命令詳解
本文列出了 Docker 使用過程中最常用的鏡像命令和容器命令,以及教大家如何操作容器數(shù)據(jù)卷,實(shí)現(xiàn)容器數(shù)據(jù)的備份。熟練練習(xí)這些命令以后,再來一些簡單的應(yīng)用部署練習(xí),大家就可以學(xué)習(xí) Docker 的鏡像構(gòu)建、備份恢復(fù)遷移、鏡像倉庫、網(wǎng)絡(luò)、集群等等更多的內(nèi)容。
鏡像相關(guān)命令
官方文檔:https://docs.docker.com/reference/
查看鏡像
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 7 months ago 13.3kB
REPOSITORY
:鏡像在倉庫中的名稱,本文中以后都簡稱鏡像名稱TAG
:鏡像標(biāo)簽IMAGE ID
:鏡像 IDCREATED
:鏡像的創(chuàng)建日期(不是獲取該鏡像的日期)SIZE
:鏡像大小
這些鏡像都是存儲在 Docker 宿主機(jī)的 /var/lib/docker
目錄下。
搜索鏡像
如果你需要從網(wǎng)絡(luò)中查找需要的鏡像,可以通過以下命令搜索。
docker search 鏡像名稱
NAME
:鏡像名稱DESCRIPTION
:鏡像描述STARS
:用戶評價(jià),反映一個(gè)鏡像的受歡迎程度OFFICIAL
:是否為官方構(gòu)建AUTOMATED
:自動構(gòu)建,表示該鏡像由 Docker Hub 自動構(gòu)建流程創(chuàng)建的。
拉取鏡像
拉取鏡像就是從中央倉庫下載鏡像到本地。
docker pull 鏡像名稱
假如我要拉取 centos 鏡像到本地,如果不聲明 tag 鏡像標(biāo)簽信息則默認(rèn)拉取 latest 版本,也可以通過:https://hub.docker.com/ 搜索該鏡像,查看支持的 tag 信息。
通過查看 tag 信息,如果我們要下載 centos7 的鏡像。
docker pull centos:7
刪除鏡像
按鏡像 ID 刪除鏡像。
# 刪除單個(gè)鏡像 docker rmi 鏡像ID # 刪除多個(gè)鏡像 docker rmi 鏡像ID 鏡像ID 鏡像ID
docker images -q
可以查詢到所有鏡像的 ID,通過組合命令可以實(shí)現(xiàn)刪除所有鏡像的操作。
docker rmi `docker images -q`
注意:如果通過某個(gè)鏡像創(chuàng)建了容器,則該鏡像無法刪除。
解決辦法:先刪除鏡像中的容器,再刪除該鏡像。
容器相關(guān)命令
查看容器
查看正在運(yùn)行的容器。
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID
:容器 IDIMAGE
:所屬鏡像COMMAND
:CREATED
:創(chuàng)建時(shí)間STATUS
:容器狀態(tài)PORTS
:端口NAMES
:容器名稱
查看停止的容器。
docker ps -f status=exited
查看所有容器(包括運(yùn)行和停止)。
docker ps -a
查看最后一次運(yùn)行的容器。
docker ps -l
創(chuàng)建與啟動容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-i
:表示運(yùn)行容器;-t
:表示容器啟動后會進(jìn)入其命令行。加入這兩個(gè)參數(shù)后,容器創(chuàng)建就能登錄進(jìn)去。即分配一個(gè)偽終端;--name
:為創(chuàng)建的容器命名;-v
:表示目錄映射關(guān)系(前者是宿主機(jī)目錄,后者是映射到宿主機(jī)上的目錄),可以使用多個(gè) -v 做多個(gè)目錄或文件映射。注意:最好做目錄映射,在宿主機(jī)上做修改,然后共享到容器上;-d
:在 run 后面加上 -d 參數(shù),則會創(chuàng)建一個(gè)守護(hù)式容器在后臺運(yùn)行(這樣創(chuàng)建容器后不會自動登錄容器,如果只加 -i -t 兩個(gè)參數(shù),創(chuàng)建容器后就會自動進(jìn)容器里);-p
:表示端口映射,前者是宿主機(jī)端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€(gè) -p 做多個(gè)端口映射。-P
:隨機(jī)使用宿主機(jī)的可用端口與容器內(nèi)暴露的端口映射。
創(chuàng)建并進(jìn)入容器
下面這行命令的意思就是通過鏡像 AA 創(chuàng)建一個(gè)容器 BB,運(yùn)行容器并進(jìn)入容器的 /bin/bash
。
docker run -it --name 容器名稱 鏡像名稱:標(biāo)簽 /bin/bash
注意:Docker 容器運(yùn)行必須有一個(gè)前臺進(jìn)程, 如果沒有前臺進(jìn)程執(zhí)行,容器認(rèn)為是空閑狀態(tài),就會自動退出。
退出當(dāng)前容器
exit
守護(hù)式方式創(chuàng)建容器
docker run -di --name 容器名稱 鏡像名稱:標(biāo)簽
登錄守護(hù)式容器方式
docker exec -it 容器名稱|容器ID /bin/bash
停止與啟動容器
# 停止容器 docker stop 容器名稱|容器ID # 啟動容器 docker start 容器名稱|容器ID
文件拷貝
如果我們需要將文件拷貝到容器內(nèi)可以使用 cp 命令。
docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
也可以將文件從容器內(nèi)拷貝出來。
docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
目錄掛載(容器數(shù)據(jù)卷操作)
我們可以在創(chuàng)建容器的時(shí)候,將宿主機(jī)的目錄與容器內(nèi)的目錄進(jìn)行映射,這樣我們就可以通過修改宿主機(jī)某個(gè)目錄的文件從而去影響容器,而且這個(gè)操作是雙向綁定的,也就是說容器內(nèi)的操作也會影響到宿主機(jī),實(shí)現(xiàn)備份功能。
但是容器被刪除的時(shí)候,宿主機(jī)的內(nèi)容并不會被刪除,因?yàn)榈讓邮峭ㄟ^拷貝實(shí)現(xiàn)的。如果多個(gè)容器掛載同一個(gè)目錄,其中一個(gè)容器被刪除,其他容器的內(nèi)容也不會受到影響,同理,底層是拷貝實(shí)現(xiàn)的。
但是容器被刪除的時(shí)候,宿主機(jī)的內(nèi)容并不會被刪除。如果多個(gè)容器掛載同一個(gè)目錄,其中一個(gè)容器被刪除,其他容器的內(nèi)容也不會受到影響。
容器與宿主機(jī)之間的數(shù)據(jù)卷屬于引用的關(guān)系,數(shù)據(jù)卷是從外界掛載到容器內(nèi)部中的,所以可以脫離容器的生命周期而獨(dú)立存在,正是由于數(shù)據(jù)卷的生命周期并不等同于容器的生命周期,在容器退出或者刪除以后,數(shù)據(jù)卷仍然不會受到影響,數(shù)據(jù)卷的生命周期會一直持續(xù)到?jīng)]有容器使用它為止。
創(chuàng)建容器添加 -v
參數(shù),格式為宿主機(jī)目錄:容器目錄
,例如:
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7 # 多目錄掛載 docker run -di -v /宿主機(jī)目錄:/容器目錄 -v /宿主機(jī)目錄2:/容器目錄2 鏡像名
目錄掛載操作可能會出現(xiàn)權(quán)限不足的提示。這是因?yàn)?CentOS7 中的安全模塊 SELinux 把權(quán)限禁掉了,在 docker run 時(shí)通過 --privileged=true
給該容器加權(quán)限來解決掛載的目錄沒有權(quán)限的問題。
匿名掛載
匿名掛載只需要寫容器目錄即可,容器外對應(yīng)的目錄會在 /var/lib/docker/volume
中生成。
# 匿名掛載 docker run -di -v /usr/local/data --name centos7-02 centos:7 # 查看 volume 數(shù)據(jù)卷信息 docker volume ls
具名掛載
具名掛載就是給數(shù)據(jù)卷起了個(gè)名字,容器外對應(yīng)的目錄會在 /var/lib/docker/volume
中生成。
# 匿名掛載 docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7 # 查看 volume 數(shù)據(jù)卷信息 docker volume ls
指定目錄掛載
一開始給大家講解的方式就屬于指定目錄掛載,這種方式的掛載不會在 /var/lib/docker/volume
目錄生成內(nèi)容。
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7 # 多目錄掛載 docker run -di -v /宿主機(jī)目錄:/容器目錄 -v /宿主機(jī)目錄2:/容器目錄2 鏡像名
查看目錄掛載關(guān)系
通過 docker volume inspect 數(shù)據(jù)卷名稱
可以查看該數(shù)據(jù)卷對應(yīng)宿主機(jī)的目錄地址。
[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 節(jié)點(diǎn)中找到 Mounts
,可以查看詳細(xì)的數(shù)據(jù)掛載信息。
只讀/讀寫
# 只讀。只能通過修改宿主機(jī)內(nèi)容實(shí)現(xiàn)對容器的數(shù)據(jù)管理。 docker run -it -v /宿主機(jī)目錄:/容器目錄:ro 鏡像名 # 讀寫,默認(rèn)。宿主機(jī)和容器可以雙向操作數(shù)據(jù)。 docker run -it -v /宿主機(jī)目錄:/容器目錄: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 相當(dāng)于繼承 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
也可以直接執(zhí)行下面的命令直接輸出 IP 地址。
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱|容器ID
刪除容器
# 刪除指定容器 docker rm 容器名稱|容器ID # 刪除多個(gè)容器 docker rm 容器名稱|容器ID 容器名稱|容器ID
之前給大家介紹過Docker run 命令的使用方法詳解,感興趣的朋友可以參考下!
到此這篇關(guān)于Docker 最常用的鏡像命令和容器命令詳解的文章就介紹到這了,更多相關(guān)Docker鏡像命令和容器命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署springboot項(xiàng)目到騰訊云的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署springboot項(xiàng)目到騰訊云的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04docker部署項(xiàng)目/var/lib/docker/overlay2目錄滿了該如何清理
Docker中的/var/lib/docker/overlay2目錄是用于存儲Docker容器的數(shù)據(jù)層和鏡像層的,使用Docker一段時(shí)間后這個(gè)目錄可能會變得非常大,這篇文章主要給大家介紹了關(guān)于docker部署項(xiàng)目/var/lib/docker/overlay2目錄滿了該如何清理的相關(guān)資料,需要的朋友可以參考下2024-04-04dockerfile的使用及使用dockerfile部署springboot項(xiàng)目的過程
Dockerfile是用來構(gòu)建Docker鏡像的文本文件,是由一條條構(gòu)建鏡像所需的指令和參數(shù)構(gòu)成的腳本,這篇文章主要介紹了dockerfile的使用,使用dockerfile部署springboot項(xiàng)目,需要的朋友可以參考下2023-04-04Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法
這篇文章主要介紹了Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01docker中容器運(yùn)行時(shí)如何將目錄和宿主機(jī)進(jìn)行掛載
對于一個(gè)已經(jīng)運(yùn)行的容器,如果后續(xù)需要新掛載一個(gè)目錄怎么辦?下面這篇文章主要給大家介紹了關(guān)于docker中容器運(yùn)行時(shí)如何將目錄和宿主機(jī)進(jìn)行掛載的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05docker啟動mysql并映射數(shù)據(jù)目錄(含備份腳本)
本文主要介紹了docker啟動mysql并映射數(shù)據(jù)目錄(含備份腳本),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01在docker容器中使用非root用戶執(zhí)行腳本操作
這篇文章主要介紹了在docker容器中使用非root用戶執(zhí)行腳本操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Linux Docker安裝wordpress的方法詳解教程
這篇文章主要介紹了Linux Docker安裝wordpress的方法詳解教程的相關(guān)資料,需要的朋友可以參考下2016-10-10Docker安裝mysql教程以及解決mysqld: Can‘t read dir&nbs
本文詳細(xì)介紹了如何通過Docker來安裝和配置MySQL數(shù)據(jù)庫,包括拉取MySQL鏡像、啟動MySQL容器、配置MySQL、解決常見錯(cuò)誤等步驟,提供了詳盡的命令和參數(shù)說明,幫助用戶順利完成MySQL的安裝和配置,文中還提到了如何處理MySQL容器啟動時(shí)遇到的“無法讀取目錄”2024-10-10