Docker 基本操作 (Image)
簡單講解一下Docker的概念,最重要的是兩個地方: Image,Container。如果熟悉物件導向,可以把Image想像成Class而Container就是Image產生的Object。關係如下圖。
開啟docker後(如果你是windows需要先打開Docker Desktop),進入cmd
docker images
查看目前系統裡所擁有的imagedocker rmi <image id>
刪除image
查看image可以看到image的名稱(Repository)、image id、大小….等資訊。
該如何建立新的image呢? 可以看到第一個圖,有四種路徑建立新的image
- image pull 從遠端倉庫拉取,可以是公用(Docker HUB)或是私有(公司內私人HUB)
- Dockerfile Build 寫dockerfile文件,自定義屬於你的image
- tar load load本地tar檔,建立image。 (tar檔為其他人image保存起來的檔案)
- container commit 將container轉換成一個新的image
下面大概講解一下:
Image Pull
可以從網路上的公有倉庫或是私有倉庫拉取,世界最大的Docker HUB 在Docker HUB 進入後可以看栩栩多多的images向你招手。舉一個範例,假如我們想要建立一個網頁,那可以來拉apache server。
docker pull <imageName>:<tag>
舉例,apachedocker 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的volumedocker inspect <Container Id>
查看Container詳細資訊docker logs <Container Id>
查看Container執行logdocker start <Container Id>
啟動Containerdocker stop <Container Id>
停止Containerdocker restart <Container Id>
重新啟動Containerdocker 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_APPdocker 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