容器管理實驗

一. 實驗目的:

  1. 熟悉容器的基本工作原理;
  2. 掌握容器操作的常用命令;

二. 實驗環境:

Ubuntu16.04+Docker

三. 實驗內容:

  1. 練習使用容器操作的常用命令;

四、 實驗練習:

(一)創建容器

創建容器命令格式:

Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

問題:

  1. 如何以ubuntu:14.04作爲基礎鏡像,創建一個容器test1?

2.請使用docker ps -l命令查看,test1的狀態?

(二)啓動容器

有兩種情況:

1.原來沒有這個容器,需要基於一個鏡像啓動新的容器;

      命令:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

2.宿主機本來有一個容器,但是容器處於一個非運行的狀態,需要把這個非運行狀態的容器啓動起來。

      命令:docker start container_ID

實際上docker run命令相當於docker create+start兩個命令

問題:

(1)如何以ubuntu:14.04作爲基礎鏡像,啓動一個容器test2?

請使用docker ps -l命令查看,test2的狀態?

(2)如何以ubuntu:14.04作爲基礎鏡像,啓動一個容器test3, 並安裝新的程序nginx?

  1. 可以使用編寫dockerfile文件,然後進行構建,再然後進行啓動
  2. 直接以Ubuntu:14.04爲基礎鏡像創建並啓動一個名爲test3的容器,再進行安裝nginx(apt-get update ,apt-get install nginx)

(3)如何以ubuntu:14.04作爲基礎鏡像,以交互方式啓動容器test4?

進入容器中,在/root目錄下新建一個文件1.txt,後點擊ctrl+p+q來退出但是不結束交互式容器。然後使用docker ps -l命令來查看test4的狀態?

(4)如何以ubuntu:14.04作爲基礎鏡像,啓動守護式容器test5,讓其在後臺一直輸出hello docker?如何查看容器的日誌,看看hello docker 是否正常輸出?

輸入命令docker run -d -p 120 --name test5 ubuntu:14.04 /bin/sh -c "while true;do echo hello docker;done"再使用docker logs test5查看

直接清屏了

注意:

這裏使用了while true那麼之後使用後會發生一些問題,下一節有問題解決方式,詳解。

這裏簡略說一下,這是後臺掛起式打印hellodocker ,那麼會使磁盤空間一直在使用直至磁盤滿,所以

要去學會關閉或者停止這個容器的運行,而且還要去清理日誌和容器,釋放空間。

(5)使用start命令來啓動剛剛創建的test1,並且用docker ps -l命令來查看容器狀態有什麼變化?

docker start test1

(三)查看本地容器信息

(1)可使用docker ps命令查看本地的容器。語法如下:

docker ps [OPTIONS]

OPTIONS說明:

-a :顯示所有的容器,包括未運行的。

-f :根據條件過濾顯示的內容。

-l :顯示最近創建的容器。

-n :列出最近創建的n個容器。

  1. 列出當前所有正在運行的container?
  2. 列出所有的container?
  3. 列出最近一次啓動的container? 
  4. 列出最近創建的5個容器信息?

(2)可使用docker inspect命令查看容器的所有信息,包含運行情況,存儲位置,配置參數和網絡配置等。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS說明:

-f :指定返回值的模板文件。

-s :顯示總的文件大小。

--type :爲指定類型返回JSON。

  • 如何查看容器test5中的詳細信息?

  • 如何查看容器test5的Ip地址?

(四)停止、殺死、重啓某個docker 容器

(1)請試着殺死,停止,重啓某個docker容器?

殺死容器: exit  停止容器:docker stop test2  重啓容器:docker restart test2

(2)如何強制停止一個容器?

(五)查看指定容器的日誌記錄

docker logs –f –t [--tail] 容器

-f:--follow=true/false,一直跟蹤日誌變化並且返回結果

-t:--timestamps=true/false,在返回結果上加上時間戳

--tail string 從日誌末尾顯示多少行日誌, 默認是all

--since string 顯示自某個timestamp之後的日誌,或相對時間,如42m(即42分鐘)

(1)請一直跟蹤容器test5的日誌變化,並且在返回結果上加上時間戳?

docker logs -ft test5

(2)查看容器test5最近30分鐘的日誌?

docker logs --since=30m test5

(3)查看容器test5的日誌最後10行,並且在返回結果上加上時間戳?

 docker logs -ft --since=2020 --tail=10 test5

(六)刪除容器

當刪除容器時,若正在運行,需要先停止刪除。

docker rm [OPTIONS] CONTAINER

OPTIONS說明:

-f :通過SIGKILL信號強制刪除一個運行中的容器

-l :移除容器間的網絡連接,而非容器本身

-v :刪除與容器關聯的卷

  1. 如何刪除所有容器?       docker rm $(docker ps –a -q)
  2. 如果有容器無法刪除,應該怎麼辦?  docker rm –f 容器ID或容器名
  3. 請查看是否所有容器都被刪除?        docker ps –a
  4. 以ubuntu:14.04作爲基礎鏡像,啓動一個容器test6, 並掛載數據卷/home, 刪除容器nginx01,並刪除容器掛載的數據卷

docker volume create myvolume

docker run -it --name test6 -v myvolume:/home ubuntu:14.04

(七)進入容器

進入容器有三種不同的方法:

1.docker attach可以attach到一個已經運行的容器的stdin,然後進行命令執行的動作。 請嘗試用docker attach進入一個已經運行的容器?

2.docker exec 也可以進入一個已經運行的容器,然後進行命令執行的動作。就像使用SSH登錄服務器一樣來操作容器。請嘗試用docker exec進入一個已經運行的容器?

3.使用nsenter工具進入

如何使用nsenter工具來進入容器呢?

一般來說,需要首先下載nsenter這個工具,它包含在util-linux軟件包版本。

(1)首先訪問該網址找到nsenter工具

https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/

(2)下載nsenter工具的源碼到我們的主機上

#wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-2.32.tar.gz

(3)解壓.tar.gz包

# tar -xzvf util-linux-2.32.tar.gz

(4)進入util-linux-2.32的目錄

# cd util-linux-2.32/

(5)輸入./configure --without-ncurses命令進行配置

(6)輸入命令make nsenter來編譯nsenter

(7)複製nsenter到/usr/local/bin路徑下

# cp nsenter /usr/local/bin

(8)運行一個容器,並且找到找到容器的進程PID號(.state.Pid)

docker run -itd --name test7 ubuntu:14.04

docker inspect test7

(9)通過得到的這個PID,就可以連接到這個容器:

nsenter --target  $PID  --mount --uts   --ipc   --net   --pid

(10)在容器中可以查看用戶和進程的相關信息

ps -ef

(八)導入容器和導出容器

(1)導出容器是指導出一個已經創建的容器到一個文件,不管此時這個容器是否處於運行狀態,可以使用docker export命令。請把test7容器導出到1.tar中。

(2)導入容器是指文件可以使用docker import命令導入到本地倉庫成爲鏡像。請把1.tar導入,並在在導入時候其打上標籤test8:latest

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章