docker命令詳解

docker命令詳解html

這次操做都是在unbantu17.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 分爲公共和私有兩種:
    • Docker 公司運營的公共 Registry 叫作 Docker Hub,咱們能夠在上面註冊帳號,分享並保存本身的鏡像。
    • 能夠在 Docker Hub 保存本身的私有鏡像或者架設本身私有的 Registry
  • Docker 容器: 把應用程序或服務打包放進去,容器是基於鏡像啓動的,容器中能夠運行一個或多個進程。
    • 鏡像是 Docker 生命週期中的構建或打包階段
    • 容器則是啓動或執行階段

docker的使用命令

1 docker 命令介紹linux

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.更詳細的功能參數配置git

參數 解釋
--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 顯示版本信息

*注意:其中帶有[] 的啓動參數能夠指定屢次,例如github

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

複製代碼

docker基本

  1. 查看系統內核
uname -r
複製代碼
  1. 啓動docker 境像
systemctl start docker 
複製代碼

3.查看docker版本docker

docker verison
複製代碼

4.顯示docker系統的信息shell

docker info
複製代碼

操做docker鏡像

1.檢索imageubuntu

docker search image-name
複製代碼

2.下載imagesegmentfault

docker pull image-name
複製代碼

3.列出鏡像列表windows

docker images 
複製代碼

4.刪除一個或者多個鏡像api

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
複製代碼

注意:使用這個命令能夠掛載正在後臺運行的容器,在開發應用的過程當中運用這個命令能夠隨時觀察容器內進程的運行情況.

保存和加載鏡像

當須要把一臺機器上的鏡像遷移到另外一臺機器的時候,須要保存鏡像與加載鏡像。

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

以爲此文章不錯能夠去github給我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

其它資源

相關文章
相關標籤/搜索