1. 程式人生 > >docker-容器常用操作

docker-容器常用操作

檢視容器日誌:
docker logs -f <容器名orID>

檢視正在執行的容器:
docker ps
docker ps -a為檢視所有的容器,包括已經停止的。
docker ps -a -q  檢視容器的ID

刪除所有容器:
docker rm $(docker ps -a -q)
刪除單個容器docker rm <容器名orID>

停止、啟動、殺死一個容器:
docker stop <容器名orID>
docker start <容器名orID>
docker kill <容器名orID>

執行一個新容器,同時為它命名、埠對映、資料夾對映。以ubuntu映象為例:
docker run --name myubuntu -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v     /var/redmine/mysql:/var/lib/mysql  ubuntu


匯出容器:
如果要匯出本地某個容器,可以使用 docker export 命令。
$ sudo docker export 7691a814370e > ubuntu.tar
匯入容器快照:
可以使用 docker import 從容器快照檔案中再匯入為映象,例如
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
此外,也可以通過指定 URL 或者某個目錄來匯入,例如
$sudo docker import http://example.com/exampleimage.tgz example/imagerepo
*注:使用者既可以使用 docker load 來匯入映象儲存檔案到本地映象庫,也可以使用 docker import 來匯入一個容器快照到本地映象庫。這兩者的區別在於容器快照檔案將丟棄所有的歷史記錄和元資料資訊(即僅儲存容器當時的快照狀態),而映象儲存檔案將儲存完整記錄,體積也要大。此外,從容器快照檔案匯入時可以重新指定標籤等元資料資訊。


容器互聯:
使用 --link 引數可以讓容器之間安全的進行互動。
下面先建立一個新的資料庫容器。
$ sudo docker run -d --name db training/postgres
刪除之前建立的 web 容器

$ docker rm -f web
然後建立一個新的 web 容器,並將它連線到 db 容器

$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
此時,db 容器和 web 容器建立互聯關係。

--link 引數的格式為 --link name:alias,其中 name 是要連結的容器的名稱,alias 是這個連線的別名。


使用 docker ps 來檢視容器的連線:
$ docker ps
CONTAINER ID  IMAGE                     COMMAND               CREATED             STATUS             PORTS                    NAMES
349169744e49  training/postgres:latest  su postgres -c '/usr  About a minute ago  Up About a minute  5432/tcp                 db, web/db
aed84ee21bde  training/webapp:latest    python app.py         16 hours ago        Up 2 minutes       0.0.0.0:49154->5000/tcp  web
可以看到自定義命名的容器,db 和 web,db 容器的 names 列有 db 也有 web/db。這表示 web 容器連結到 db 容器,web 容器將被允許訪問 db 容器的資訊。

Docker 在兩個互聯的容器之間建立了一個安全隧道,而且不用對映它們的埠到宿主主機上。在啟動 db 容器的時候並沒有使用 -p 和 -P 標記,從而避免了暴露資料庫埠到外部網路上。
Docker 通過 2 種方式為容器公開連線資訊:
環境變數
更新 /etc/hosts 檔案
使用 env 命令來檢視 web 容器的環境變數
$ sudo docker run --rm --name web2 --link db:db training/webapp env
. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5000_TCP=tcp://172.17.0.5:5432
DB_PORT_5000_TCP_PROTO=tcp
DB_PORT_5000_TCP_PORT=5432
DB_PORT_5000_TCP_ADDR=172.17.0.5
. . .
其中 DB_ 開頭的環境變數是供 web 容器連線 db 容器使用,字首採用大寫的連線別名。

除了環境變數,Docker 還新增 host 資訊到父容器的 /etc/hosts 的檔案。下面是父容器 web 的 hosts 檔案
$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash
[email protected]:/opt/webapp# cat /etc/hosts
172.17.0.7  aed84ee21bde
. . .
172.17.0.5  db
這裡有 2 個 hosts,第一個是 web 容器,web 容器用 id 作為他的主機名,第二個是 db 容器的 ip 和主機名。 可以在 web 容器中安裝 ping 命令來測試跟db容器的連通。

[email protected]:/opt/webapp# apt-get install -yqq inetutils-ping
[email protected]:/opt/webapp# ping db
PING db (172.17.0.5): 48 data bytes
56 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.267 ms
56 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.250 ms
56 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.256 ms
用 ping 來測試db容器,它會解析成 172.17.0.5。