Docker (二) : 基本操作Image&Container

LUFOR129
7 min readSep 11, 2021

Docker 基本操作 (Image)

簡單講解一下Docker的概念,最重要的是兩個地方: Image,Container。如果熟悉物件導向,可以把Image想像成Class而Container就是Image產生的Object。關係如下圖。

開啟docker後(如果你是windows需要先打開Docker Desktop),進入cmd

  • docker images 查看目前系統裡所擁有的image
  • docker rmi <image id> 刪除image

查看image可以看到image的名稱(Repository)、image id、大小….等資訊。

該如何建立新的image呢? 可以看到第一個圖,有四種路徑建立新的image

  1. image pull 從遠端倉庫拉取,可以是公用(Docker HUB)或是私有(公司內私人HUB)
  2. Dockerfile Build 寫dockerfile文件,自定義屬於你的image
  3. tar load load本地tar檔,建立image。 (tar檔為其他人image保存起來的檔案)
  4. container commit 將container轉換成一個新的image

下面大概講解一下:

Image Pull

可以從網路上的公有倉庫或是私有倉庫拉取,世界最大的Docker HUB 在Docker HUB 進入後可以看栩栩多多的images向你招手。舉一個範例,假如我們想要建立一個網頁,那可以來拉apache server

  • docker pull <imageName>:<tag>
    舉例,apache
  • docker pull httpd:2.4

之後便能看到一個新的名為httpd的images

Dockerfile Build

之後詳細拉出來講解

Tar Load

在一些資安做的比較紮實的公司,可能無法連結到外網的Docker Hub。Image可以保存為tar檔,方便他人在本地端load。

  • docker save -o <tarName.tar> <ImageName> 保存Image成tar檔
  • docker load -i <tarName.tar> 將tar檔變成一個新的Image

Container Commit

之後跟著container章節一起講

建立Container

把Image比喻做Class則Container就是Object,Container就是實際Docker上的貨櫃,裝載一個一個的Application。

承接昨天的文章,我們已經建立好了一個appache image。我們看看如何docker 有哪些重要指令:

  • docker ps -a 查看目前所有container (不論有無運行)
  • docker rm -fv <Container Id> 刪除container,-f是強制刪除正在運行的container (不然一般要先停止container),-v 是刪除這個container的volume
  • docker inspect <Container Id> 查看Container詳細資訊
  • docker logs <Container Id> 查看Container執行log
  • docker start <Container Id> 啟動Container
  • docker stop <Container Id> 停止Container
  • docker restart <Container Id> 重新啟動Container
  • docker run <OPTIONS> <ImageName>:<tag> 建立新的Container

建立新的container有很多重要的參數,可以參考這這裡,我在下面寫一些重要的參數

  • -d 背景執行
  • -it 可以用terminal交互
  • -w <Inside_dir> 指定工作目錄
  • -v <Outside_dir>:<Inside_dir> 指定volume位置
  • -p <Outside_port>:<Inside_port> 指定開放port
  • --name <Name> 指令Container名稱 (不指定就是Container隨便給)

舉個例子,開啟上一篇的apache服務,port外部8080映射內部80,將container取名為Web_APP
docker run -d -it -p 8080:80 --name Web_APP httpd:2.4

打開你的瀏覽器,輸入http://localhost:8080,可以發現電腦的8080 port正運行默認的Apache !!! It works !!! 太神奇啦,我們電腦沒有安裝任何Web Server居然也能運行 !!!

Docker 基本操作 (Container)

可以把Container當作是一個獨立運行的簡化系統,所以也可以進去裡面進行操作。

  • docker exec -it <Container ID> bash 進入運行中的Container

當然也有一些重要參數

  • -u root 用root身分進入

進入container後默認會在Container的workdir內。你可以改裡面的檔案,不過默認是沒有vim、nano的,透過一下指令安裝:

apt-get install
apt-get install vim

以剛剛的apache container,網頁會在/usr/local/apache2/htdocs/index.html,進入修改成<h1>Hello IT BAN</h1>,ctrl+F5重新整理http://localhost:8080

當然實際上不用這麼麻煩要進入裡面修改程式,之後文章教你怎麼內外部檔案映射。

將container輸出成image

我們可以將修改好的container輸出成image,讓其他人使用,imageName必須全部小寫。

  • docker commit <Container ID> <imageName>

如上圖,下一次別人使用你的image後就會發現內容被修改過了。

文章同步於IT鐵人賽 Lufor

--

--