Skip to main content

[Docker] Command Line, CLI

keywords: tutorial, cli#
docker version # 確認 docker client 可以和 server engine 溝通
docker info # 檢視和 docker engine 有關的設定檔
docker build -t docker101tutorial .

docker container#

docker container run --publish 80:80 --detach --name <name> nginx
docker container ls # list running containers
docker container ls -a # list all containers
docker container stop <container-ID | container-name> # stop certain container
docker container start
docker container logs <container-ID | container-name> # 顯示 container log 訊息
docker container top <container-ID | container-name> # 列出 container 內執行的程序
docker container inspect <container-ID | container-name> # 顯示 container 啟動時的設定資訊
docker container stats # 顯示 container 即時的效能狀態
docker container rm <container-ID | container-name> # 移除特定 container(須先 stop)
docker container rm -f <container-ID | container-name> # 移除特定 container(不用 stop)
docker container --help
# old way
docker container inspect # docker inspect
docker container stats # docker stats

run 和 start 的差別#

透過 docker container run 總是會產生一個新的 container;透過 docker container start 則可以啟動一個停止的 container。

指令說明#

docker container run#

alias: docker run#
啟動 container#
##
# 啟動 container
# -d 在 detached mode(背景)執行 container
# -p 80:80 將本機的 80 port 對到 container 的 80 port
##
# old way: docker run
docker container run --publish 80:80 nginx
# --detach: 在背景執行,回傳 container ID
docker container run --publish 80:80 --detach nginx
# --name: 為此 container 命名
docker container run --publish 80:80 --detach --name webhost nginx
docker container run --publish 80:80 --name webhost -d nginx:1.11 nginx -T
# 啟動 mongo database
docker container run --name mongo -d mongo
docker container run -d -p 3306:3306 --name db -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql
  1. Docker engine 會先在本地尋找叫做 nginx 的 image。
  2. 如果在本地的 image caches 中找不到,則從預設的 docker hub 中尋找該 image。
  3. 如果沒有指定版本,預設就是拉最新版本的 images 到 image caches 中。
  4. 一旦取得了 image 並準備就緒,將根據 image 啟動一個新的 container。
  5. Docker 將會自訂網路,並在 Docker engine 中給他一個虛擬網路內的特定虛擬 IP 位址。
  6. 指令中的 publish 是用來開放本機的 80 port 讓本機可以連結到 container 的 80 port,傳輸資料到正在執行的 container 裡面。
  • 每當啟動一個新的 container 時,便會取得一個新的獨特 ID。
  • Docker 不會製作 image 的副本,它實際上只是在 image 停止的地方上,開始了一層新的變更。
在 container 內執行指令(-it)#
# 以互動形式來產生 container
# -t: pseudo-tty,模擬一個終端機,就類似 SSH 所做的一樣
# -i: interactive, keep session open to receive terminal input
# -it: 會在 container 中提供一個終端機讓你使用(Bash Shell)
docker container run -it --name <container-name> <image-name> <program>
docker container run -it --name proxy nginx bash
docker container run -it --name ubuntu ubuntu
# 重新啟動該 container
docker container start -ai
# 在現有已啟動的 container 中執行額外的程序或指令
docker container exec -it <container-name> <program>
docker container exec -it mysql bash
指定連接埠(-p)#
# 打開連接埠
# -p (--publish) HOST:CONTAINER
docker container run -p <host-port>:<container:port>
docker container run -p 80:80 --name webhost -d nginx

docker container ls#

# list running containers
# old way: docker ps
docker container ls
docker container ls -a

docker container inspect#

# 用來檢視 container 啟動時的設定檔
docker container inspect <container-name>
# --format,使用 "GO 模板" 來格式化輸出的結果
docker container inspect webhost --format '{{ .NetworkSettings.IPAddress}}'

docker image#

docker image ls # 列出所有下載過的 image
Last updated on