Docker part.1

reference

Docker 一日初中階學習工作坊 共筆內容

about install

sudo usermod -G docker -a $USER
curl -sSL https://get.docker.com/ | sh
gnome-session-quit --logout --no-prompt

quick usage

docker ps
docker run -d ubuntu:14.04 /bin/bash
docker start ${name}

映像檔(Image)

唯讀的模版, 可用來建立container

容器(Container)

可以看做是一個簡易版的 Linux 環境
映像檔是唯讀的,容器在啟動的時候建立一層可寫層作為最上層。

倉庫(Repository)

Docker 倉庫的概念跟 Git 類似
當使用者建立了自己的映像檔之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一台機器上使用這個映像檔時候,只需要從倉庫上 pull 下來就可以了。
每個倉庫中包含了多個映像檔,每個映像檔有不同的 標籤(tag)

倉庫註冊伺服器(Registry)可以理解為 GitHub 這樣的託管服務
倉庫註冊伺服器上往往存放著多個倉庫

Image

取得 Image

sudo docker pull registry.hub.docker.com/ubuntu:12.04

從註冊服務器 registry.hub.docker.com 中的 ubuntu 倉庫來下載標記為 12.04 的映像檔

sudo docker run -t -i ubuntu:12.04 /bin/bash
root@fe7fc4bd8fc9:/#

建立一個容器 執行bash

列出 Image

docker images
  • REPOSITORY
    來自哪個 repository EX:docker.io/httpd
  • TAG
    tag(ry) EX:14.04 or latest
  • IMAGE ID
    image的唯一ID
  • CREATED
  • VIRTUAL SIZE

搜尋 Image

docker search lamp

建立 Image

Container

新建並啟動

sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

輸出一個 “Hello World”,之後終止容器

sudo docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#

-t 選項讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上
-i 則讓容器的標準輸入保持打開。

當利用 docker run 來建立容器時,Docker 在後臺執行的標準操作包括:

  • 檢查本地是否存在指定的映像檔,不存在就從公有倉庫下載
  • 利用映像檔建立並啟動一個容器
  • 分配一個檔案系統,並在唯讀的映像檔層外面掛載一層可讀寫層
  • 從宿主主機設定的網路橋界面中橋接一個虛擬埠到容器中去
  • 從位址池中設定一個 ip 位址給容器
  • 執行使用者指定的應用程式
  • 執行完畢後容器被終止

啟動已終止容器

docker start

以 Daemonized 形式執行

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

-d 在後台執行

docker ps

-a 可以看到終止狀態的container
察看容器訊息

docker logs ${container ID | names}
hello world
hello world
hello world

察看容器輸出內容

進入容器

建立container

docker run -idt ubuntu

-p 49001:80 把80port對應到49001(?)
察看PID

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}'

進入容器

sudo nsenter --mount --uts --ipc --net --pid --target 10981

Note : 10981 is PID.
if you have nsenter: failed to execute /bin/zsh: No such file or directory
try on sudo env SHELL="/bin/bash" nsenter --target 26899 --mount --uts --ipc --net --pid

刪除 container

docker rm ${container id}

-f 刪除執行中的容器

疑難排解

no-space-left-on-device-even-after-removing-all-containers

Leave a Reply

Your email address will not be published. Required fields are marked *