1. 程式人生 > 其它 >Docker 常用操作

Docker 常用操作

.Docker的基本操作

1.映象操作

1.1.映象名稱

首先來看下映象的名稱組成:

  • 鏡名稱一般分兩部分組成:[repository]:[tag]。
  • 在沒有指定tag時,預設是latest,代表最新版本的映象

如圖:

這裡的mysql就是repository,5.7就是tag,合一起就是映象名稱,代表5.7版本的MySQL映象。

1.2.映象命令

常見的映象操作命令如圖:

1.3.案例1-拉取、檢視映象

需求:從DockerHub中拉取一個nginx映象並檢視

1)首先去映象倉庫搜尋nginx映象,比如DockerHub:

2)根據檢視到的映象名稱,拉取自己需要的映象,通過命令:docker pull nginx
3)通過命令:docker images 檢視拉取到的映象

案例2-儲存、匯入映象

需求:利用docker save將nginx映象匯出磁碟,然後再通過load載入回來

1)利用docker xx --help命令檢視docker save和docker load的語法
例如,檢視save命令用法,可以輸入命令::

docker save --help

命令格式:

docker save -o [儲存的目標檔名稱] [映象名稱]

2)使用docker save匯出映象到磁碟

執行命令:

docker save -o nginx.zip nginx:latest


3)使用docker load載入映象

先刪除本地的nginx映象:

docker rmi nginx:latest

然後執行命令,載入本地檔案:

docker load -i nginx.tar

2.容器操作

2.1.容器相關命令


容器保護三個狀態:

  • 執行:程序正常執行

  • 暫停:程序暫停,CPU不再執行,並不釋放記憶體

  • 停止:程序終止,回收程序佔用的記憶體、CPU等資源
    其中:

  • docker run:建立並執行一個容器,處於執行狀態

  • docker pause:讓一個執行的容器暫停

  • docker unpause:讓一個容器從暫停狀態恢復執行

  • docker stop:停止一個執行的容器

  • docker start:讓一個停止的容器再次執行

  • docker rm:刪除一個容器

2.2.案例-建立並執行一個容器

建立並執行nginx容器的命令:
``
docker run --name containerName -p 8989:80 -d nginx

命令解讀:

- docker run :建立並執行一個容器
- --name : 給容器起一個名字,比如叫做mn
- -p :將宿主機埠與容器埠對映,冒號左側是宿主機埠,右側是容器埠
- -d:後臺執行容器
- nginx:映象名稱,例如nginx

這裡的`-p`引數,是將容器埠對映到宿主機埠。

預設情況下,容器是隔離環境,我們直接訪問宿主機的80埠,肯定訪問不到容器中的nginx。

現在,將容器的80與宿主機的80關聯起來,當我們訪問宿主機的8989埠時,就會被對映到容器的80,這樣就能訪問到nginx了:
![](https://img2022.cnblogs.com/blog/2789097/202204/2789097-20220414145307154-2032100821.png)
### 2.3.案例-進入容器,修改檔案
1)進入容器。進入我們剛剛建立的nginx容器的命令為:

```sh
docker exec -it nginxdemo bash

命令解讀:

  • docker exec :進入容器內部,執行一個命令

  • -it : 給當前進入的容器建立一個標準輸入、輸出終端,允許我們與容器互動

  • nginxdemo :要進入的容器的名稱

  • bash:進入容器後執行的命令,bash是一個linux終端互動命令

    2)進入nginx的HTML所在目錄 /usr/share/nginx/html

容器內部會模擬一個獨立的Linux檔案系統,看起來如同一個linux伺服器一樣:
3)修改index.html的內容

容器內沒有vi命令,無法直接修改,我們用下面的命令來修改:

sed -i -e 's#Welcome to nginx#哈哈哈哈哈哈哈哈哈哈哈哈哈#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

docker run命令的常見引數有哪些?

  • --name:指定容器名稱
  • -p:指定埠對映
  • -d:讓容器後臺執行

檢視容器日誌的命令:

  • docker logs
  • 新增 -f 引數可以持續檢視日誌

檢視容器狀態:

  • docker ps
  • docker ps -a 檢視所有容器,包括已經停止的

2.3.資料卷(容器資料管理)

在之前的nginx案例中,修改nginx的html頁面時,需要進入nginx內部。並且因為沒有編輯器,修改檔案也很麻煩。

這就是因為容器與資料(容器內檔案)耦合帶來的後果。
uploading-image-774277.png

要解決這個問題,必須將資料與容器解耦,這就要用到資料捲了。

2.3.1.什麼是資料卷

資料卷(volume)是一個虛擬目錄,指向宿主機檔案系統中的某個目錄。

一旦完成資料卷掛載,對容器的一切操作都會作用在資料卷對應的宿主機目錄了。
這樣,我們操作宿主機的/var/lib/docker/volumes/html目錄,就等於操作容器內的/usr/share/nginx/html目錄了

2.3.2.資料集操作命令

資料卷操作的基本語法如下:

docker volume [COMMAND]

docker volume命令是資料卷操作,根據命令後跟隨的command來確定下一步的操作:

  • create 建立一個volume
  • inspect 顯示一個或多個volume的資訊
  • ls 列出所有的volume
  • prune 刪除未使用的volume
  • rm 刪除一個或多個指定的volume

2.3.3.建立和檢視資料卷

需求:建立一個數據卷,並檢視資料卷在宿主機的目錄位置

① 建立資料卷

docker volume create html

② 檢視所有資料卷

docker volume ls

③ 檢視資料卷詳細資訊卷

docker volume inspect html


可以看到,我們建立的html這個資料卷關聯的宿主機目錄為/var/lib/docker/volumes/html/_data目錄。
小結

資料卷的作用:

  • 將容器與資料分離,解耦合,方便操作容器內資料,保證資料安全

資料卷操作:

  • docker volume create:建立資料卷
  • docker volume ls:檢視所有資料卷
  • docker volume inspect:檢視資料卷詳細資訊,包括關聯的宿主機目錄位置
  • docker volume rm:刪除指定資料卷
  • docker volume prune:刪除所有未使用的資料卷

2.3.4.掛載資料卷

我們在建立容器時,可以通過 -v 引數來掛載一個數據捲到某個容器內目錄,命令格式如下:

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

這裡的-v就是掛載資料卷的命令:

  • -v html:/root/htm :把html資料卷掛載到容器內的/root/html這個目錄中

2.3.5.案例-給nginx掛載資料卷

需求:建立一個nginx容器,修改容器內的html目錄內的index.html內容

分析:上個案例中,我們進入nginx容器內部,已經知道nginx的html目錄所在位置/usr/share/nginx/html ,我們需要把這個目錄掛載到html這個資料捲上,方便操作其中的內容。

提示:執行容器時使用 -v 引數掛載資料卷

步驟:

① 建立容器並掛載資料捲到容器內的HTML目錄

docker run --name nginxdemo2 -v html:/usr/share/nginx/html -p 8080:80 -d nginx


結果

② 進入html資料卷所在位置,並修改HTML內容

# 檢視html資料卷的位置
docker volume inspect html
# 進入該目錄
cd /var/lib/docker/volumes/html/_data
# 修改檔案
vi index.html

修改後如圖: