docker使用基礎總結

docker使用筆記node

authorization:胡湘林python

email: a714585725@qq.comgit

一、安裝dockergithub

CentOS6web

對於 CentOS6,可使用 EPEL 庫安裝 Docker,命令以下docker

yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
yum install docker-io


CentOS7數據庫

CentOS7 系統 CentOS-Extras 庫中已帶 Docker,能夠直接安裝:ubuntu


yum install dockercentos

安裝以後啓動 Docker 服務,並讓它隨系統啓動自動加載。bash


service docker start
chkconfig docker on

二、獲取鏡像

可使用 docker pull 命令來從倉庫獲取所須要的鏡像。


下面的例子將從 Docker Hub 倉庫下載一個 Ubuntu 12.04 操做系統的鏡像。

$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

下載過程當中,會輸出獲取鏡像的每一層信息。

該命令實際上至關於 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即從註冊服務器 registry.hub.docker.com 中的 ubuntu 倉庫來下載標記爲 12.04 的鏡像。

有時候官方倉庫註冊服務器下載較慢,能夠從其餘倉庫下載。 從其它倉庫下載時須要指定完整的倉庫註冊服務器地址。例如

$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
Pulling dl.dockerpool.com:5000/ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

完成後,便可隨時使用該鏡像了,例如建立一個容器,讓其中運行 bash 應用。


三、列出鏡像列表

使用 docker p_w_picpaths 顯示本地已有的鏡像。

$ sudo docker p_w_picpaths
REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
ubuntu           12.04    74fe38d11401  4 weeks ago  209.6 MB
ubuntu           precise  74fe38d11401  4 weeks ago  209.6 MB
ubuntu           14.04    99ec81b80c55  4 weeks ago  266 MB
ubuntu           latest   99ec81b80c55  4 weeks ago  266 MB
ubuntu           trusty   99ec81b80c55  4 weeks ago  266 MB
...

在列出信息中,能夠看到幾個字段信息

來自於哪一個倉庫,好比 ubuntu

鏡像的標記,好比 14.04

它的 ID 號(惟一)

建立時間

鏡像大小

其中鏡像的 ID 惟一標識了鏡像,注意到 ubuntu:14.04 和 ubuntu:trusty 具備相同的鏡像 ID,說明它們其實是同一鏡像。

TAG 信息用來標記來自同一個倉庫的不一樣鏡像。例如 ubuntu 倉庫中有多個鏡像,經過 TAG 信息來區分發行版本,例如 10.0四、12.0四、12.十、13.0四、14.04 等。


四、啓動容器

docker run -t -i centos:latest /bin/bash

若是不指定具體的標記,則默認使用 latest 標記信息。

五、容器基本使用

容器生命週期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操做運維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [p_w_picpaths|rmi|tag|build|history|save|import]
其餘命令 — docker [info|version]

容器生命週期管理

# 在容器中運行"echo"命令,輸出"hello word"
$docker run p_w_picpath_name echo "hello word"
# 交互式進入容器中
$docker run -i -t p_w_picpath_name /bin/bash
# 在容器中安裝新的程序
$docker run p_w_picpath_name yum install -y app_name
#使容器在守護態運行
docker run -d -i -t  p_w_picpath_name /bin/bash
#使容器在運行時綁定特定端口
容器中能夠運行一些網絡應用,要讓外部也能夠訪問這些應用,能夠經過 -P 或 -p 參數來指定端口映射。
當使用 -P 標記時,Docker 會隨機映射一個 49000~49900 的端口到內部容器開放的網絡端口。
docker run -d -P training/webapp python app.py
docker ps -l
CONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                    NAMES
bc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  nostalgic_morse
-p(小寫的)則能夠指定要映射的端口,而且,在一個指定端口上只能夠綁定一個容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
映射全部接口地址
使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,能夠執行
docker run -d -p 5000:5000 training/webapp python app.py
此時默認會綁定本地全部接口上的全部地址。
映射到指定地址的指定端口
可使用 ip:hostPort:containerPort 格式指定映射使用一個特定地址,好比 localhost 地址 127.0.0.1
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
映射到指定地址的任意端口
使用 ip::containerPort 綁定 localhost 的任意端口到容器的 5000 端口,本地主機會自動分配一個端口。
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
還可使用 udp 標記來指定 udp 端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
使用 docker port 來查看當前映射的端口配置,也能夠查看到綁定的地址
docker port nostalgic_morse 5000
127.0.0.1:49155.
注意:
容器有本身的內部網絡和 ip 地址(使用 docker inspect 能夠獲取全部的變量,Docker 還能夠有一個可變的網絡配置。)
-p 標記能夠屢次使用來綁定多個端口
例如
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
#啓動/重啓容器和關閉容器
啓動一個關閉的容器:docker start CONTAINER_ID
重啓一個容器:docker restart CONTAINER_ID
關閉一個容器:docker stop CONTAINER_ID或者docker kill CONTAINER_ID強制關閉一個容器
刪除一個容器:docker rm -f CONTAINER_ID
刪除全部容器:docker rm `docker ps -a -q`
暫停/恢復一個容器的全部進程:docker pause/unpause

容器操做運維

#查看容器運行狀態
docker ps -a #查看全部容器的狀態
docker ps -a -q #列出全部容器列表
docker inspect CONTAINER_ID #檢查鏡像或者容器的參數,默認返回 JSON 格式。
docker top CONTAINER_ID #查詢某個容器的進程運行狀況
docker attach CONTAINER_ID #接入某個正在運行的docker容器中進行操做(重點:退出的時候不能使用ctrl+d或者exit方式,這將會致使容器中止運行,退出時應使用ctrl+p,而後再使用ctrl+q)
docker events --since=20151118 #查看直到指定日期容器的實時系統事件
docker logs CONTAINER_ID #批量打印出容器中進程的運行日誌
docker wait CONTAINER_ID #阻塞一個容器,直到該容器中止(PS:目前不知道咋用)
docker export CONTAINER_ID > /directory/container.tar #(保存當前某個容器的狀態信息),導入可以使用cat /directory/container.tar |docker import - CONTAINER_NAME:tag
docker save IMAGE_NAME >/directory/p_w_picpath_name.tar #(將某個鏡像導出),導入可以使用docker load < /directory/p_w_picpath_name.tar
這兩個之間的區別以下:
導出後再導入(exported-imported)的鏡像會丟失全部的歷史,而保存後再加載(saveed-loaded)的鏡像沒有丟失歷史的層(layer)。這意味着使用導出後再導入的方式,你將沒法回滾到以前的層(layer),同時,使用保存後再加載的方式持久化整個鏡像,就能夠作到層回滾(能夠執行docker tag <LAYER ID> <IMAGE NAME>來回滾以前的層)。
docker port CONTAINER_ID #列出某個容器和宿主機之間的端口映射關係

容器rootfs命令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ sudo docker ps
ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
$ docker commit c3f279d17e0a  SvenDowideit/testp_w_picpath:version3
f5283438590d
$ docker p_w_picpaths | head
REPOSITORY                        TAG                 ID                  CREATED             VIRTUAL SIZE
SvenDowideit/testp_w_picpath            version3            f5283438590d        16 seconds ago      335.7 MB
使用說明:
這個命令的用處在於把有修改的container提交成新的Image,而後導出此Imange分發給其餘場景中調試使用。Docker官方的建議是,當你在調試完Image的問題後,應該寫一個新的Dockerfile文件來維護此Image。commit命令僅是一個臨時建立Image的輔助命令。
docker cp CONTAINER:PATH HOSTPATH
使用說明:
使用cp能夠把容器內的文件複製到Host主機上。這個命令在開發者開發應用的場景下,會須要把運行程序產生的結果複製出來的需求,在這個狀況下就可使用這個cp命令。
docker diff CONTAINER
例子:
$ sudo docker diff 7bb0e258aefe
C /dev
A /dev/kmsg
C /etc
A /etc/mtab
A /go
A /go/src
A /go/src/github.com
A /go/src/github.com/dotcloud
....
使用說明:
diff會列出3種容器內文件狀態變化(A - Add, D - Delete, C - Change )的列表清單。構建Image的過程當中須要的調試指令。

鏡像倉庫

docker [login|pull|push|search]
首先須要一個存放共享鏡像的地方,在企業環境可使用私有的鏡像倉庫,但爲了方便起見,咱們直接使用Docker的公共倉庫。首先須要在Docker Hub註冊一個用戶,而後使用 docker login 命令登錄到倉庫服務器。
docker login
Username: xxxxxx
Password:
Email: xxxxxx@******.com
Login Succeeded
而後咱們須要將本地修改過的容器使用 docker commit 命令生成一個本地的鏡像。注意,因爲以後須要將鏡像提交至Docker Hub,這裏鏡像的名字必須以本身的Docker Hub用戶名做爲前綴,不然在後面的 push 時候會遇到 403 「Access Denied: Not allowed to create Repo at given location」 錯誤。例如名爲 linfan/employees。
docker commit node-app linfan/employees
a4281aa8baf9aee1173509b30b26b17fd1bb2de62d4d90fa31b86779dd15109b
docker p_w_picpaths
REPOSITORY  TAG  IMAGE ID  CREATED  VIRTUAL SIZE
linfan/employees  latest  a4281aa8baf9  14 seconds ago  696.2 MB
最後,使用 docker push 命令將這個準備好的鏡像提交到Docker Hub倉庫中。
docker push linfan/employees
The push refers to a repository [linfan/employees] (len: 1)
Sending p_w_picpath list
...
Pushing tag for rev [5577d6743652] on {https://cdn-registry-1.docker.io/v1/repositories/linfan/employees/tags/latest}
提交完成後,在其餘節點就可使用 docker pull 命令獲取到這個鏡像了。
注意:嚴格來講,將數據庫服務容器經過Docker Link暴露給應用服務容器的方法並不符合分佈式應用的12條準則,由於經過Docker Link鏈接的兩個容器必須運行在同一個物理主機上,數據與應用不能在集羣中分別獨立的部署或橫向擴展。
search
使用方法:
docker search TERM
使用說明:
經過關鍵字搜索分享的Image。

本地鏡像管理

docker p_w_picpaths #列出全部的鏡像
docker rmi p_w_picpath [p_w_picpath...] #刪除鏡像 
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
使用說明:
組合使用用戶名,Image名字,標籤名來組織管理Image。
docker  build -t edwardsbean/centos6-jdk1.7  .
Dockerfile用來建立一個自定義的p_w_picpath,包含了用戶指定的軟件依賴等。當前目錄下包含Dockerfile,使用命令build來建立新的p_w_picpath,並命名爲edwardsbean/centos6-jdk1.7:
(Dockerfile書寫比較重要,須要重點學習)
docker history p_w_picpath #列出某個鏡像以前作過的操做
docker save IMAGE_NAME >/directory/p_w_picpath_name.tar #(將某個鏡像導出),導入可以使用docker load < /directory/p_w_picpath_name.tar
docker export CONTAINER_ID > /directory/container.tar #(保存當前某個容器的狀態信息),導入可以使用cat /directory/container.tar |docker import - CONTAINER_NAME:tag

其餘命令

docker [info|version]
docker info #結合docker vesion一塊兒,能夠隨時使用這個命令把本地的配置信息提供出來,方便Docker的開發者快速定位問題。
docker version #顯示Docker的版本號,API版本號,Git commit, Docker客戶端和後臺進程的Go版本號。
相關文章
相關標籤/搜索