Docker系列學習(二)——查看,啟動,退出,保存鏡像的方法


  docker是我最近工程開發上急需使用的一個開發工具,但是由於本人“深入沉浸”windows系統,並且對於Linux系統不太熟悉,所以學習docker很多困難,因此用這個博客來記錄一下很簡單的docker的常用操作。本文是以Linux系統為基礎,windows系統對於docker的安裝太繁瑣了,而且有windows版本的限制,強烈推薦使用Linux系統。本文參考了很多博主的經驗分享,如果大家要看原文可以到本文底部查看原網站。有眾多的docker命令行可以參看官方文檔

1、進入Docker

  安裝docker的方式可以參看我上一篇博文

  一般來說Linux安裝好docker之后,就可以直接使用docker這個命令了,如果沒有啟動docker(守護進程)會出現以下命令報錯:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

  可以使用以下代碼進入:

service docker start

2 、關閉Docker服務

  其實一般說的關閉docker其實就是關閉docker的守護進程,一般來說可以不用管這個(我現在水平還不到探討這個的水平)

service docker stop

3、Docker查看現有鏡像

  查看現有鏡像:

docker images

   其實可以看到返回了現有鏡像的列表,下面來解讀以下返回的內容:

  • REPOSITORY:“鏡像所屬的倉庫名”,在倉庫下會有很多版本的鏡像,也就是一個倉庫會包含多個鏡像,而這里顯示表示的是不同鏡像屬於那些倉庫
  • TAG:“鏡像的標簽名”,在倉庫中,不同的鏡像是以標簽的形式來區分的。一個REPOSITORY倉庫名+TAG標簽名,就構成了一個完整的鏡像名,如:centos:7.02、ubuntu:14.04、debian:latest這個鏡像名就會對應一個鏡像的ID。我們之前在運行鏡像時,通常只是指定了centos,並沒有指定后面的TAG標簽名,在這種情況下,docker會默認使用“latest”標簽所對應的鏡像。
  • IMAGE ID:“鏡像的唯一ID”,常常可以使用這個來打開指定的鏡像,因為TAG是可以重復的,但是ID是唯一的
  • CREATED:“鏡像建立的時間”。
  • SIZE:“鏡像建立的大小”。

4、Docker刪除現有鏡像

  刪除鏡像有兩種方法,一般是通過ID刪除和通過TAG刪除,剛才有提到TAG是可以重復的,對於同一個鏡像可以有多個標簽,所以如果采用指定標簽的方法來刪除鏡像,只會刪除你指定的REPOSITORY倉庫名+TAG標簽名的那個鏡像。

docker rmi hello-world:latest

  上面的命令就是刪除hello-world這個倉庫里的標簽為latest的鏡像。

  不過要注意到這樣刪除是不能刪除正在被容器使用的鏡像,例如有以下報錯:

  這個時候可以使用 docker rmi -f hello-world:latest的命令強制刪除,不過不推薦這樣的方式,正確方法是:

  • 先刪除引用這個鏡像的容器(刪除容器和查看容器的方法下面會講到)
  • 再刪除這個鏡像

5、Docker啟動鏡像

  對於Docker來說,image是靜態的,類似於操作系統快照,而container則是動態的,是image的運行實例。因此啟動鏡像就需要創建容器。

  有一個image名稱為ubuntu,那么比如現在我們啟動這個image的container並且進入到這個container的bash命令行中:

docker run -t -i ubuntu /bin/bash

  命令行的理解如下:

  • docker run:啟動container(這種方式是基於鏡像的啟動,會創建一個新的容器)

  • ubuntu:你想要啟動的image

  • -t:進入終端

  • -i:獲得一個交互式的連接,通過獲取container的輸入

  • /bin/bash:在container中啟動一個bash shell

  上圖就是成功查創建了一個容器,並進入到了,容器的ID是2fa8d7535635,這個時候容器就已經在運行了。

  如果要退出容器就直接在命令行輸入  exit,就可以退出了。

6、Docker查看現有容器

  查看正在運行的容器

docker ps

  

 

  可以看到我們之前運行的容器已經顯示出來了(這個是在新窗口執行的命令行,原來的那個窗口沒有exit容器),如果exit容器之后,用這個命令行就看不到。如果想要查看所有的容器,可以使用下面的命令行。

docker ps -a    #查看無論運行還是沒有運行的容器

   可以看到就算退出容器之后依然有可以查看到對應的容器信息。

  • CONTAINER ID(container id ) :顧名思義 ,容器ID的意思,可以通過這id找到唯一的對應容器
  • IMAGE (image):該容器所使用的鏡像
  • COMMAND (command):啟動容器時運行的命令
  • CREATED (created):容器的創建時間,顯示格式為”**時間之前創建“
  • STATUS (status):容器現在的狀態,狀態有7種:created(已創建)|restarting(重啟中)|running(運行中)|removing(遷移中)|paused(暫停)|exited(停止)|dead
  • PORTS (ports): 容器的端口信息和使用的連接類型(tcp\udp)
  • NAMES (names): 鏡像自動為容器創建的名字,也唯一代表一個容器

7、Docker刪除現有容器

  剛才提到了在刪除鏡像以前,需要先刪除引用着的容器,我們可以使用以下的命令行來進行。我們先看下有哪些容器存在。

  然后使用docker rm dockerID的方法刪除。

docker rm 3043893130d5

 

  可以看到已經剛才存在的容器已經沒有了,當然還有更多高級的刪除容器的方法,可以參考(https://www.cnblogs.com/wholj/p/10396516.html)

8、Docker 修改鏡像以及保存鏡像

  對於鏡像來說,每次進入鏡像(容器)並且操作鏡像里的內容之后,如果直接使用exit退出容器,是不會保存你的操作的(也就是說重新加載dockerrun -t -i xxxx /bush鏡像之后,一切內容都會重新來)。如果我們想要保存我們的操作該怎么辦呢?下面我們啟動之前創辦的ubuntu的系統,並在ubuntu系統里安裝vim編譯器,並保存。

  啟動ubuntu系統,如果沒有指定:TAG,會啟動TAG為latest的鏡像

docker run -it ubuntu /bin/bash

   可以看到這個容器里面並沒有vim編譯器

  接下來我們在這個容器安裝vim編譯器(具體細節參看我之前的博文Linux中安裝vim編譯器),具體就是兩行命令行。安裝完成之后命令行鍵入vim之后可以看到

   好了這個系統已經被更改了,接下來是把這個系統(容器)打包成鏡像保存(換句話說就是沒有辦法更改原來的鏡像的,但是可以保存修改后的容器為另一個鏡像的方法來保存),主要的命令是

docker commit 75eb300dd5b2 ubuntu:2.0

  上面這個命令就是docker commit 容器ID ubuntu:2.0(這里這個鏡像新的TAG)。

      可以看到出現這個界面就說明已經保存成功了(主要到這個命令行以一定要在新的窗口中執行,不是在容器中執行這個儲存命令行)

  最后我們可以看看我們剛剛新創建的鏡像。

   可以看到我們的ubuntu:2.0鏡像已經創建好了。如果我們進入ubuntu:2.0可以發現vim已經被安裝好了。

 9、Docker鏡像及容器的保存位置

    我們已經學會修改以及保存鏡像,那我們會問那些下載到本地的鏡像在哪里呢?我是一個對空間要求極高的人,在可以的情況下我希望知道所有的東西都放在哪里,因此無論安裝什么包我都希望知道它的具體路徑並設置好(特別是這種需要頻繁下載東西的軟件)。我們可以通過一下命令來查看。

sudo docker info

 

   着張圖片顯示出來docker的信息,其中我們需要注意到的是:Docker Root Dir: /var/lib/docker,這就是docker鏡像的存儲路徑(鏡像的名字是不會顯式的寫在文件夾上的,具體的對應關系可以參看這篇博文)。

  接下來是我們需要知道該如何更改這個路徑,比如把這些鏡像放到另一個分區里面。

  1、把/var/lib/docker這個文件夾下的所有內容移動到另一個文件夾下,比如我這里移動到/data/docker這個文件里。

  2、修改配置文件,更改docker中鏡像和容器的默認儲存位置。(注意,剛安裝docker的需要新建這個文件)

sudo vim /etc/docker/daemon.json

  3、將文件中'data-root',改為‘data-root’:'/home/data/docker'

  4、重啟docker服務

 

 

 

參考網址:

https://www.cnblogs.com/520yang/articles/8744454.html

https://blog.csdn.net/woshimeihuo/article/details/90209779

https://blog.csdn.net/acmman/article/details/84449092

https://www.cnblogs.com/quanxiaoha/p/10542278.html

https://www.cnblogs.com/linjiqin/p/8608975.html

https://www.cnblogs.com/luengmingbiao/p/14742396.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM