天天看點

Docker常用指令詳解docker指令詳解

docker指令詳解

此次操作都是在ubuntu17.01下進行,docker版本是17.10.0-ce,docker-compose是1.17.1.

docker 存在的意義

· 使用dokcer加速本地開發和建構,開發人員可以建構、運作并分享Docker容器,容器可以在開發環境中建構,然後輕松地送出到測試環境中,并最終進入生産環境

· 能夠讓獨立服務或應用程式在不同環境中,得到相同的運作結果。

· 用docker 建立隔離環境進行測試

· docker 可以讓開發者先在本機上建構一個複雜的程式測試,而不是一開始就在生産環境進行測試

docker概念

· Docker 的常用文檔:https://docs.docker.com/

· Docker 鏡像: 使用者基于鏡像來運作自己的容器,可以把鏡像當做容器的『源代碼』,鏡像體積很小,易于分享、存儲和更新

· Registry: Docker 用 Registry 儲存使用者建構的鏡像,Registry 分為公共和私有兩種:

o Docker 公司營運的公共 Registry 叫做 Docker Hub,我們可以在上面新增賬號,分享并儲存自己的鏡像。

o 可以在 Docker Hub 儲存自己的私有鏡像或者架設自己私有的 Registry

· Docker 容器: 把應用程式或服務打包放進去,容器是基于鏡像啟動的,容器中可以運作一個或多個程序。

o 鏡像是 Docker 生命周期中的建構或打包階段

o 容器則是啟動或執行階段

docker的使用指令

1 docker 指令介紹

docker --help

管理指令:

  container   管理容器

  image       管理鏡像

  network     管理網絡

指令:

  attach      介入到一個正在運作的容器

  build       根據 Dockerfile 建構一個鏡像

  commit      根據容器的更改建立一個新的鏡像

  cp          在本地檔案系統與容器中複制 檔案/檔案夾

  create      建立一個新容器

  exec        在容器中執行一條指令

  images      列出鏡像

  kill        殺死一個或多個正在運作的容器    

  logs        取得容器的日志

  pause       暫停一個或多個容器的所有程序

  ps          列出所有容器

  pull        拉取一個鏡像或倉庫到 registry

  push        推送一個鏡像或倉庫到 registry

  rename      重命名一個容器

  restart     重新啟動一個或多個容器

  rm          删除一個或多個容器

  rmi         删除一個或多個鏡像

  run         在一個新的容器中執行一條指令

  search      在 Docker Hub 中搜尋鏡像

  start       啟動一個或多個已經停止運作的容器

  stats       顯示一個容器的實時資源占用

  stop        停止一個或多個正在運作的容器

  tag         為鏡像建立一個新的标簽

  top         顯示一個容器内的所有程序

  unpause     恢複一個或多個容器内所有被暫停的程序

2. 更詳細的功能參數配置

參數 解釋
--api-enable-cors=false

開放遠端API調用的 CORS 頭資訊。這個接口開關對想進行二次開

發的上層應用提供了支援.

-b, --bridge=""

挂載已經存在的網橋裝置到 Docker 容器裡。注意,使用 none

可以停用容器裡的網絡.

--bip="" 使用 CIDR 位址來設定網絡橋的 IP。注意,此參數和 -b 不能一起使用.
-D, --debug=false 開啟Debug模式。例如:docker -d -D
-d, --daemon=false 開啟Daemon模式.
--dns=[] 強制容器使用DNS伺服器.例如: docker -d --dns 8.8.8.8
--dns-search=[]

強制容器使用指定的DNS搜尋域名.例如: docker -d --dns-search

example.com

-e, --exec-driver="native" 強制容器使用指定的運作時驅動.例如:docker -d -e lxc
-G, --group="docker"

在背景運作模式下,賦予指定的Group到相應的unix socket上。

注意,當此參數 --group 賦予空字元串時,将去除組資訊。

-g, --graph="/var/lib/docker" 配置Docker運作時根目錄
-H, --host=[]

在背景模式下指定socket綁定,可以綁定一個或多個

 tcp://host:port, unix:///path/to/socket, fd://* 或

 fd://socketfd。例如:$ docker -H tcp://0.0.0.0:2375 ps

或者 $ export DOCKER_HOST="tcp://0.0.0.0:2375" $ docker ps

--icc=true 啟用内聯容器的通信.
--ip="0.0.0.0" 容器綁定IP時使用的預設IP位址.
--ip-forward=true 啟動容器的 net.ipv4.ip_forward.
--iptables=true 啟動Docker容器自定義的iptable規則.
--mtu=0

設定容器網絡的MTU值,如果沒有這個參數,選用預設 route MTU,

如果沒有預設route,就設定成常量值 1500.

-p, --pidfile="/var/run/docker.pid" 背景程序PID檔案路徑.
-r, --restart=true 重新開機之前運作中的容器.
-s, --storage-driver=""

強制容器運作時使用指定的存儲驅動,例如,指定使用devicemapper,

可以這樣:docker -d -s devicemapper

--selinux-enabled=false 啟用selinux支援
--storage-opt=[] 配置存儲驅動的參數
--tls=false 啟動TLS認證開關
--tlscacert="/Users/dxiao/.docker/ca.pem" 通過CA認證過的的certificate檔案路徑
--tlscert="/Users/dxiao/.docker/cert.pem" TLS的certificate檔案路徑
--tlskey="/Users/dxiao/.docker/key.pem" TLS的key檔案路徑
--tlsverify=false 使用TLS并做背景程序與用戶端通訊的驗證
-v, --version=false 顯示版本資訊

*注意:其中帶有[] 的啟動參數可以指定多次,例如

docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash

docker基本

· 檢視系統核心

·  uname -r

· 啟動docker 境像

· systemctl start docker

· 3.檢視docker版本

· docker verison

· 4.顯示docker系統的資訊

· docker info

操作docker鏡像

1.檢索image

docker search image-name

2.下載下傳image

docker pull image-name

3.列出鏡像清單

docker images

4.删除一個或者多個鏡像

docker rmi image-name

5.顯示一個鏡像的曆史

docker history image-name  

6.通過容器建立鏡像

*從已經建立的容器中更新鏡像,并且送出這個鏡像 *使用 Dockerfile 指令來建立一個新的鏡像 下面通過已存在的容器建立一個新的鏡像。

docker commit -m="First Image" -a="keke" 7a15f99695c0 keke/unbantu:17.10.0

上面指令參數說明:

* -m 送出的描述資訊

* -a 指定鏡像作者

* 7a15f99695c0 記住這個是容器id,不是鏡像id

* keke/unbantu:17.10.0 建立的目标鏡像名

1. 在Docker 注冊賬戶,釋出的鏡像都在這個頁面裡展示

2. 将上面做的鏡像unbantu,起個新的名字unbantu-test

docker tag keke/unbantu:17.10.0 keke/unbantu-test:lastest

1. 登入docker

docker login

4.上傳unbantu鏡像

docker push keke/unbantu-test:lastest

啟動容器

docker容器可以了解為在沙盒中運作的程序。這個沙盒包含了該程序運作所必須的資源,包括檔案系統、系統類庫、shell 環境等等。但這個沙盒預設是不會運作任何程式的。你需要在沙盒中運作一個程序來啟動某一個容器。這個程序是該容器的唯一程序,是以當該程序結束的時候,容器也會完全的停止。

1.在容器中安裝新的程式

docker run image-name apt-get install -y -name

2.在容器中運作"echo"指令,輸出"hello word"

docker run image-name echo "hello word"

3.互動式進入容器中

docker run -i -t image_name /bin/bash  

注意:在執行apt-get 指令的時候,要帶上-y參數。如果不指定-y參數的話,apt-get指令會進入互動模式,需要使用者輸入指令來進行确認,但在docker環境中是無法響應這種互動的。apt-get 指令執行完畢之後,容器就會停止,但對容器的改動不會丢失.

檢視容器

1.列出目前所有正在運作的container

docker ps

2.列出所有的container

docker ps -a  

3.列出最近一次啟動的container

docker ps -l  

4.儲存對容器的修改 當你對某一個容器做了修改之後(通過在容器中運作某一個指令),可以把對容器的修改儲存下來,這樣下次可以從儲存後的最新狀态運作該容器。

1.儲存對容器的修改; -a, --author="" Author; -m, --message="" Commit message

docker commit ID new-image-name

5.操作容器

1.删除所有容器

docker rm `docker ps -a -q`

2.删除單個容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container

docker rm Name/ID

3.停止、啟動、殺死一個容器

docker stop Name/ID  

docker start Name/ID  

docker kill Name/ID

4.從一個容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps

docker logs Name/ID  

5.列出一個容器裡面被改變的檔案或者目錄,list清單會顯示出三種事件,A 增加的,D 删除的,C 被改變的

docker diff Name/ID

6.顯示一個運作的容器裡面的程序資訊

docker top Name/ID  

7.從容器裡面拷貝檔案/目錄到本地一個路徑

docker cp Name:/container-path to-path  

docker cp ID:/container-path to-path

8.重新開機一個正在運作的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10

docker restart Name/ID

9.附加到一個運作的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process

docker attach ID #重新啟動并運作一個互動式會話shell

注意:attach指令允許你檢視或者影響一個運作的容器。你可以在同一時間attach同一個容器。你也可以從一個容器中脫離出來,是從CTRL-C.

儲存和加載鏡像

當需要把一台機器上的鏡像遷移到另一台機器的時候,需要儲存鏡像與加載鏡像。

1.儲存鏡像到一個tar包; -o, --output="" Write to an file

docker save image-name -o file-path

2.加載一個tar包格式的鏡像; -i, --input="" Read from a tar archive file

docker load -i file-path

3.從機器A拷貝到機器B

docker save image-name > /home/keke/main.tar

*使用scp将main.tar拷到機器A上:

docker load < /home/keke/main.tar

登入

1.登陸registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username

docker login

釋出docker鏡像

docker push new-image-name

建構鏡像(Dockerfile + docker build)

FROM ...

RUN ...

# 指定容器内的程式将會使用容器的指定端口

# 配合 docker run -p

EXPOSE ...

· RUN: 指定鏡像被建構時要運作的指令

· CMD: 指定容器被啟動時要運作的指令

· ENTRYPOINT: 同 CMD ,但不會被 docker run -t 覆寫

· WORKDIR: CMD/ENTRYPOINT 會在這個目錄下執行

· VOLUME

· ADD

· COPY

docker history images-name

1.從新鏡像啟動容器

docker run -d -p 4000:80 --name [name] #可以在 Dokcer 主控端上指定一個具體的端口映射到容器的80端口上

守護容器

docker run -d container-name #建立守護容器

docker top container-name #檢視容器内程序

docker exec container-name touch a.txt #在容器内部運作程序

docker stop container-name #停止容器

關于docker

覺得此文章不錯可以給我star! 如果還有遇到問題可以加我微信Sen0676備注下來自github,進go實戰群詳細交流!

參考資料

官方英文資源

· Docker官網:http://www.docker.com

· Docker windows入門:https://docs.docker.com/windows/

· Docker Linux 入門:https://docs.docker.com/linux/

· Docker mac 入門:https://docs.docker.com/mac/

· Docker 使用者指引:https://docs.docker.com/engine/userguide/

· Docker 官方部落格:http://blog.docker.com/

· Docker Hub: https://hub.docker.com/

· Docker開源: https://www.docker.com/open-source

中文資源

· Docker中文網站:http://www.docker.org.cn

· Docker中文文檔:http://www.dockerinfo.net/document

· Docker安裝手冊:http://www.docker.org.cn/book/install.html

· 一小時Docker教程 :https://blog.csphere.cn/archives/22

· Docker中文指南:http://www.widuu.com/chinese_docker/index.html

其它資源

· Docker 快速手冊!

· Docker 教程

· MySQL Docker 單一機器上如何配置自動備份

· https://segmentfault.com/t/docker

· https://github.com/docker/docker

· https://wiki.openstack.org/wiki/Docker

· https://wiki.archlinux.org/index.php/Docker

詳見:https://github.com/KeKe-Li/docker-directive#docker