[微服務] Docker基礎(3) - 開始用Docker吧

複習Docker image

在開始前我們先複習一次image與container的關西

image其實就是file snapshot搭配Startup command,而這snapshot就由image提供方設計(目前這階段我們應該是還不需要考慮這些),Startup command則是告訴容器啟動時要使用那些command

可以看到上圖當容器啟動後,Docker會依照image切出與分配FS並且在Running process時執行你的Starup command

創建第一個Container

docker run

  • docker run指令是由create和start組成
    • docker create <image-id/image-name>
    • docker start <image-id/image-name>
  • 基本輸入格式
    • docker run <image-id/image-name>

就可以看到自己第一個容器搂

hello-world

執行下方指令

docker run hello-world

就可以看到hello-world歡迎你進入docker世界

如果要將run拆解成create和start可以嘗試這樣輸入

docker create hello-world
你的顯示器會顯示此image的id,將你的id複製
docker start -a 上一行的image id

也會有一樣的效果

  • -a 在這裡代表的告訴docker start指令要attach後面這個image id

busybox

busybox可以讓使用者練習對容器下終端機指令

  • docker run busybox command-line
docker run busybox echo hi

docker ps

docker ps指令是讓使用者查看目前電腦上運行的docker容器有哪些
我們嘗試用busybox來做ps的示範,因為busybox在執行我們的終端機指令後就會自動關閉,所以我們這次給他一個需要持續執行的指令,以ping google.com來示範

docker run busybox ping google.com
開啟新的終端機輸入
docker ps

就可以看到我們剛剛的busybox container

docker log

可以讓你看到此容器產生的全部log

docker log <container-id>

docker stop / docker kill

  • docker stop會軟性的關閉你的container容器,但是超過一定秒數後會執行docker kill強制關閉
  • docker kill就是強制關掉你的容器
docker stop <container-id>
docker kill <container-id>

docker system prune

docker system prune指令會清掉機器上沒有再跑的container,節省空間

讓我們做點複雜的練習吧

接下來的練習我們會使用redis資料庫並且透過exec指令和redis作互動

下載redis image並且啟動她

docker run -d redis
終端機會回傳此container的container id記得複製下來

docker exec

接下來我們使用docker exec和剛剛的容器做互動

docker exec -it 容器id redis-cli

接下來就可以直接使用redis搂

其中的-i和t參數分別代表

  • -i 是為了讓我們的temrinal對應到docker stdin
  • -t 讓他是以整齊的格式輸出

我們當然也可以直接使用sh進入os再呼叫redis-cli

docker exec -it cotainer-id sh
redis-cli

也可以直接使用docker run在container結束後就直接進入os終端介面

docker run -it redis sh

總結

這篇文章主要是介紹一些基本的docker指令,只要會這些指令就可以開始你的docker之旅

留言

這個網誌中的熱門文章

Java Lambda Map篇

(InterviewBit) System Design - Design Cache System

設計模式 - 享元模式 (Structural Patterns - Flyweight Design Pattern)