Docker的入門命令

 

這裏寫圖片描述

Dokcer 經常使用命令工做原理java

  • Image Layer(鏡像層)node


鏡像能夠當作是由多個鏡像層疊加起來的一個文件系統,鏡像層也能夠簡單理解爲一個基本的鏡像,而每一個鏡像層之間經過指針的形式進行疊加。redis

鏡像層的主要組成部分包括鏡像層 ID、鏡像層指針 「指向父層」、元數據「 Layer Metadata,包含了 Docker 構建和運行的信息和父層的層次信息」。docker

只讀層和讀寫層「Top Layer」的組成部分基本一致,同時讀寫層能夠轉換成只讀層「 經過docker commit 操做實現」。shell

  • Image(鏡像,只讀層的集合)
     json

鏡像是一堆只讀層的統一視角,除了最底層沒有指向外,每一層都指向它的父層。統一文件系統( Union File System)技術可以將不一樣的層整合成一個文件系統,爲這些層提供了一個統一的視角,這樣就隱藏了多層的存在。在用戶的角度看來,只存在一個文件系統。鏡像每一層都是不可寫的,都是隻讀層ubuntu

                       Container(容器,一層讀寫層+多層只讀層)c#

容器和鏡像的區別在於容器的最上面一層是讀寫層「Top Layer」,在這裏並無區分容器是否在運行。bash

運行狀態的容器「Running Container」是由一個可讀寫的文件系統「靜態容器」+ 隔離的進程空間和其中的進程構成的。網絡

隔離的進程空間中的進程能夠對該讀寫層進行增刪改,運行狀態容器的進程操做都做用在該讀寫層上。每一個容器只能有一個進程隔離空間。

Docker 經常使用命令說明

標識說明

  • Image(統一隻讀文件系統)

 

       靜態容器 (未運行的容器,統一可讀寫文件系統)

動態容器(運行中的容器,進程空間(包括進程)+ 統一可讀寫文件系統)

命令說明

Docker 生命週期相關命令

  • docker create < image-id >

該命令即爲在只讀文件系統上添加一層可讀寫層「Top Layer」,並生成可讀寫文件系統。該命令狀態下容器爲靜態容器,並無運行。

  • docker start | restart < container-id >

該命令即爲在可讀寫文件系統添加一個進程空間和運行的進程,並生成一個動態容器。

docker stop 即爲 docker start 的逆過程。

  • docker run < image-id >

docker run = docker create + docker start

docker run 流程相似以下:

             docker stop < container-id >

該指令向運行中的容器發一個 SIGTERM 信號,而後中止全部的進程。即爲 docker start 的逆過程。

  • docker kill < container-id >

該指令向容器發送一個不友好的 SIGKILL 信號,至關於快速強制關閉容器。與 docker stop 的區別是 docker stop 是先發 SIGTERM 信號來清理進程,而後再發 SIGKILL 信號退出,整個進程是正常關閉的。

  • docker pause < container-id >

該指令用做暫停容器中的全部進程,使用 cgroup 的 freezer 順序暫停容器裏的全部進程。

docker unpause 爲其逆過程即恢復全部進程,比較少使用。

  • docker commit < container-id >

該指令用做把容器的可讀寫層轉化成只讀層,即從容器狀態「可讀寫文件系統」變爲鏡像狀態「只讀文件系統」,可理解爲固化。

  • docker build

docker build = docker run 「運行容器 + 進程修改數據」+ docker commit「固化數據」,整個過程不斷循環直至生成所需鏡像。

  1. 循環一次便會造成一個新的層(新鏡像 = 原鏡像層 + 已固化的可讀寫層)

  2. docker build 過程通常經過 dockerfile 文件來實現。

Docker 查詢類命令

Docker 可查詢的對象有:image、container、image/container 中的數據、系統信息(包括容器數、鏡像數及其它)。

  • docker images

該指令用做列出鏡像的頂層鏡像(以頂層鏡像 ID 來表示整個完整鏡像),每一個頂層鏡像下面隱藏多個鏡像層。

  • docker images -a

該指令用做列出鏡像的全部鏡像層。鏡像層的排序以每一個頂層鏡像 ID 爲首,依次列出每一個鏡像下的全部鏡像層。

  • docker history < image-id >

該指令列出該鏡像 ID 下的全部歷史鏡像。

  • docker ps

該指令用做列出全部運行中的容器。

  • docker ps -a

該指令用做列出全部容器,包括靜態容器和動態容器。

  • docker inspect < container-id > or < image-id >

該指令用做提取出容器或鏡像中最頂層的元數據。

  • docker info
     

該指令用做顯示 Docker 系統信息,包括鏡像和容器數。

Docker 操做類命令

  • docker rm < container-id >

該指令用做移除容器,默認只能對靜態容器(非運行狀態的)進行移除。若是要移除運行中的容器,須要使用 -f(force) 參數,即:docker rm -f <container-id>

  • docker rmi < image-id >

該指令做用與 docker rm 相似,用做移除鏡像。

  • docker exec < running-container-id >

該指令用於在運行狀態的容器中執行一個新的進程。

  • docker export < container-id >

該指令用做持久化一個容器,會建立一個 tar 格式的文件。該文件移除了元數據和沒必要要的層,將多個層整合成了一個層,只保存了當前統一視角看到的內容。

若是你要持久化一個鏡像,可使用 docker save 指令。它與 docker export 的區別在於其保留了全部元數據和歷史層。

經過 docker export 導出的容器再 docker import 到 Docker 中後,在 docker images –tree 命令只能看到一個鏡像。而經過 docker save 保存後的鏡像則不一樣,它可以看到這個鏡像構建過程當中的全部歷史層。

docker export 和 docker save 二者更多的區別可參考「Docker 的 save 和 export 命令的區別」一文。

 

經常使用的命令:

   1. docker pull: 從倉庫中拖鏡像

 

  2. docker run:運行容器,若是當前要運行的容器對應鏡像不存在,會自動拉取。例如:docker run hello-world

  3.docker stop:中止容器運行


  4.docker start:開始容器運行


  5.docker commit:提交容器到鏡像


  6.docker images  : 查看已經下載的鏡像

      案例: docker images jboss/base-jdk:8

  7.docker ps:查看當前啓動的容器

        $ docker ps -a :       # 列出全部的容器

        $ docker ps -l  :列出最近一次啓動的容器

        $ docker -l 列出最後一次運行的容器

  8. docker build : 建立鏡像

  9. docker load : 加載鏡像

 

  10. docker ps : 查看當前正在運行容器

  11. docker search ubuntu : 搜索鏡像文件

 

      12 .docker container ls:默認只列出正在運行的容器,-a 選項會列出包括中止的全部容器。

列出的結果是按列顯示的。每一列的值分別爲:

  1. Container ID :一開始的幾個字符對應你的容器的惟一 ID

  2. Image :你運行容器的鏡像名

  3. Command :容器啓動後運行的命令

  4. Created :建立時間

  5. Status :容器當前狀態

  6. Ports :與宿主端口相鏈接的端口信息

  7. Names :容器名(若是你沒有命名你的容器,那麼會隨機建立)

 

      13.docker image ls:列出鏡像信息,-a 選項會列出 intermediate 鏡像(就是其它鏡像依賴的層)。

      14.docker volume ls:列出數據卷。

      15.docker network ls:列出 network。

 

     16.docker system prune                 #命令來刪除那些已中止的容器,  ,這個命令默認不會刪除那些未被任何容器引用的數據卷

     17.docker system prune --all --force --volumns              #會刪除數據卷  ,確認的過程沒有--all 參數後會刪除全部未被引用的鏡像而不只僅是 dangling 鏡像。

 

    18.docker container prune     # 刪除全部退出狀態的容器

    19。docker volume prune     # 刪除未被使用的數據卷

    20。docker image prune      # 刪除 dangling 或全部未被使用的鏡像

 

    21.docker container stop  +容器名           #能夠中止一個或多個容器

    22.docker container ls -a -q              #直接列出全部的容器(包括已經中止的)!

-a 顯示全部的容器,-q 只顯示數字形式的容器 ID。

 

    23.docker container rm $(docker container ls -a -q)   #刪除容器

    24.docker image rm $(docker image ls -a -q)           #刪除鏡像

    25.docker volume rm $(docker volume ls -q)           # 刪除數據卷

    26.docker network rm $(docker network ls -q)               #刪除 network

    27.docker exec 容器id /etc/init.d/sshd restart                 #啓動2222端口

 

 

    28.

 
  1. 1.85kB

  • 鏡像拷貝,同時重命名,利用 tag命令

1. # 好比,想建立拷貝一個鏡像`hello-wrold`,同時命名爲`lqdev.cn/hello-world:1`
二、docker tag hello-world lqdev.cn/hello-world:1

此時查看鏡像列表,就會發現多了一個鏡像了:

[root@xx ~]# docker images

基於Dockerfile建立一個新的鏡像,利用 build命令(對於Dockerfile,在下一章節會詳細進行說明的,這裏就不過多介紹了。)

# 使用當前目錄下的Dockerfile,同時鏡像命名(`-t`,指tag)爲:lqdev.cn/first:1
docker build -t lqdev.cn/first:1

刪除鏡像,利用 rmi命令(這裏須要注意,當鏡像有容器在使用時,是沒法刪除的,須要先刪除容器再來刪除鏡像。)

 docker rmi jboss/base-jdk:8
 或者根據images_id刪除
 docker rmi b123d943e165

運行容器,利用 run命令。

docker run hello-world

運行命令是最經常使用的命令了,這裏其經常使用選項進行列舉說明下

 

後臺運行 redis實例,同時指定其宿主端口爲 16379

docker run -p 16379:6379 -d redis:3.2
  • 容器列表,使用 ps命令,能夠列舉出當前運行的容器,須要全部容器時,加入 -a選項便可。

docker ps -a
  • 中止容器,利用 stop命令。

 
  1. # docker stop 容器id

  2. docker stop 3ba5b7475423

  • 啓動已中止容器,利用 start命令。

# docker start 容器id
  1.   docker start 3ba5b7475423

  • 重啓容器,利用 restart命令。

 # docker restart 容器id
  1.  docker restart 3ba5b7475423

  • 強制中止容器,利用 kill命令。

 # docker kill 容器id
  1.  docker kill 3ba5b7475423

  • 刪除容器,利用 rm命令(只能刪除已經中止的容器,若須要刪除正在運行的容器,可加入 -f參數選項)

# docker rm 容器ID
  1. docker rm 3ba5b7475423

  • 進入容器,在一些場景下,好比想查看 redis的客戶端 redis-cli時,這個時候就須要進入容器了。進入容器有不少中,這裏就 exec進行講解下,其餘的好比 attach不熟悉,你們可自行搜索下。

# docker exec -it 容器ID 參數
  1.  docker exec -it 3ba5b7475423 redis-cli  

  2.  參數說明:

  3.    -d:分離模式: 在後臺運行  

  4.    -i:即便沒有附加也保持STDIN 打開

  5.    -t:分配一個僞終端

此時就能夠看見已經進入到客戶端了,進行相應操做了。

[root@xxx ~]# docker exec -it 3ba5b7475423 redis-cli
  1. 127.0.0.1:6379> keys *

  2. (empty list or set)

  3. 127.0.0.1:6379> set name okong

  4. OK

  5. 127.0.0.1:6379> keys *

  6. 1) "name"

  7. 127.0.0.1:6379> get name

  8. "okong"

  9. 127.0.0.1:6379>

  • 容器中建立一個鏡像。在製做一些私有鏡像時,經常是依賴於一個基礎鏡像後,而後進入容器中進行相關係統環境的配置,或者相應的優化。但若容器一刪除,以前的修改都會沒有了。故在這些場景下,可直接從修改後的容器中建立一個本身的私有鏡像,這樣裏面的一些環境和相關優化項仍是保留的。這個主要會在構建私有鏡像章節時具體展開。

# docker commit [options] 容器id name:tag
 
docker commit 3ba5b7475423 lqdev.cn/redis:1參數說明:
-a:提交的鏡像做者-c:使用Dockerfile指令來建立鏡像
-m:提交時的說明文字-p:在commit時,將容器暫停

 

# docker cp 容器名:要拷貝的文件在容器裏面的路徑  要拷貝到宿主機的相應路徑
# docker cp 要拷貝的文件路徑 容器名:要拷貝到容器裏面對應的路徑
docker cp 3ba5b7475423:/opt/a.json /opt
docker cp /opt/a.json 3ba5b7475423:/opt
  1. # docker cp 容器名:要拷貝的文件在容器裏面的路徑  要拷貝到宿主機的相應路徑

  2. # docker cp 要拷貝的文件路徑 容器名:要拷貝到容器裏面對應的路徑

  3. docker cp 3ba5b7475423:/opt/a.json /opt

  4. docker cp /opt/a.json 3ba5b7475423:/opt

 

  • 存入和載出鏡像

1.存出鏡像

[root@izuf64g8sd65ovaejq5rn0z ~]# docker save -o busybox.tar busybox

2.載入鏡像

[root@izuf64g8sd65ovaejq5rn0z ~]# docker load --input busybox.tar
Loaded image: docker.io/busybox:latest
  • 上傳鏡像
docker  push NAME[:TAG]

 

  • 中止container
docker  stop  <CONTAINER_ID>
  • 從新啓動container
docker start <CONTAINER_ID>
  • 顯示存在的容器
docker ps -l/-a
-l:顯示最後啓動的容器
-a:同時顯示中止的容器,默認只顯示啓動狀態
  • 鏈接到啓動的容器
docker attach <CONTAINER_ID>
  • 輸出容器日誌
docker logs <CONTAINER_ID>
  • 複製容器內的文件到宿主機目錄上
docker cp <CONTAINER_ID>:path hostpath

 

# 在docker中運行ubuntu鏡像

$ docker run <相關參數> <鏡像 ID> <初始命令>

# 守護模式啓動

$ docker run -it ubuntu:14.04

 

# 交互模式啓動

$ docker run -it ubuntu:14.04 /bin/bash

# 指定端口號啓動

$ docker run -p 80:80 birdben/ubuntu:v1

 

# 指定配置啓動

$ sudo docker run -d -p 10.211.55.4:9999:22 birdben/ubuntu:v1 '/usr/sbin/sshd' -D

 

# start 啓動容器

$ docker start 117843ade696117843ade696

# stop 中止正在運行的容器

$ docker stop 117843ade696117843ade696  

 

# restart 重啓容器

$ docker restart 117843ade696117843ade696

# rm 刪除容器 $ docker rm 117843ade696117843ade696

 

# rmi 刪除鏡像

$ docker rmi ed9c93747fe1Deleted

# 登陸Docker Hub中心

$ docker login

 

# 發佈上傳image(push)

$ docker push birdben/ubuntu:v1

 

 

注意:若是如下命令,不行,就在前面添加sudo ,在執行一次。

更新yum

yum update

 

安裝docker

yum install docker

 

啓動docker

 service docker start

或者

systemctl start docker.service

 

開機啓動

chkconfig docker on

或者

systemctl enable docker.service

 

驗證查看

docker info

docker version

 

docker鏡像檢索

docker search 鏡像名

檢索redis

docker search redis

 

鏡像下載

docker pull 鏡像名

下載redis

docker pull redis

 

鏡像列表

docker images

 

依次爲鏡像名 - 軟件版本 - 惟一標識 - 建立時間 - 大小 

 

刪除鏡像

docker rmi image-id

 

刪除全部鏡像

docker rmi $(docker images -q)

 

運行鏡像(端口映射)

後臺運行:

docker run -d -p 6379:6379 --name port-redis reds

前臺運行:

docker run -rm -p 6379:6379 --name port-redis reds

 

中止容器

docker stop port-redis

 

啓動容器

docker start port-redis

 

容器列表

運行中:

docker ps

運行和中止:

docker ps -a

 

刪除容器

docker rm port-redis

docker rm $(docker ps -a -q)

 

容器日誌

docker logs port-redis

 

登陸日誌

docker exec -it port-redis bash

 

高速安裝Docker。

curl -sSL https://get.daocloud.io/docker | sh

 

經常使用命令

總結一下經常使用命令:

其中<>闊起來的參數爲必選,[]闊起來爲可選

docker version                   查看docker的版本號,包括客戶端、服務端、依賴的Go等
docker info                    查看系統(docker)層面信息,包括管理的images, containers數等
docker search <image>        在docker index中搜索image

docker pull <image>      從docker registry server 中下拉image
docker push <image|repository>            #推送一個image或repository到registry
docker push <image|repository>:TAG         #同上,指定tag

docker inspect <image|container>          查看image或container的底層信息
docker images TODO filter out the intermediate image layers (intermediate image layers 是什麼)
docker images -a         #列出全部的images

docker ps          #默認顯示正在運行中的container
docker ps -l       #顯示最後一次建立的container,包括未運行的

docker ps -a         #顯示全部的container,包括未運行的
docker logs <container>       #查看container的日誌,也就是執行命令的一些輸出


docker rm <container...>          #刪除一個或多個container
docker rm `docker ps -a -q`       # 刪除全部的container


docker ps -a -q | xargs docker rm     #同上, 刪除全部的container
docker rmi <image...>                   #刪除一個或多個image
docker start/stop/restart <container>       #開啓/中止/重啓container


docker start -i <container>         #啓動一個container並進入交互模式
docker attach <container>          #attach一個運行中的container


docker run <image> <command>          #使用image建立container並執行相應命令,而後中止
docker run -i -t <image> /bin/bash     #使用image建立container並進入交互模式, login shell是/bin/bash


docker run -i -t -p <host_port:contain_port>      #將container的端口映射到宿主機的端口
docker commit <container> [repo:tag]               #將一個container固化爲一個新的image,後面的repo:tag可選

 
docker build <path>             # 尋找path路徑下名爲的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag]      #同上,能夠指定repo和可選的tag


docker build - < <dockerfile>     #使用指定的dockerfile配置文件,docker以stdin方式獲取內容,使用此配置生成新的image
docker port <container> <container port>      #查看本地哪一個端口映射到container的指定端口,其實用docker ps 也能夠看到
使用images新建一個container並登陸

 

 

倉庫相關操做

docker pull     #從遠程倉庫拉取鏡像到本地
docker push     #推送本地鏡像到遠程倉庫
docker search   #在倉庫搜索鏡像
docker login    #登陸到官方倉庫Docker Hub
docker logout   #退出登陸

 

鏡像相關操做

一、docker build    #從Dockerfile構建鏡像
二、docker pull     #同上
三、docker push     #同上
四、docker history  #顯示鏡像的歷史信息
五、docker images   #列出鏡像
六、docker rmi      #刪除鏡像
七、docker tag      #給鏡像打上tag標籤
八、docker run      #建立容器並啓動容器
九、docker create   #建立容器
十、docker commit   #將修改後的容器生成鏡像
十一、docker load     #從壓縮包中加載鏡像
十二、docker import   #
1三、docker save     #將鏡像保存到壓縮文件

 

容器相關操做

docker attach   #依附到一個正在運行的容器中
docker exec     #進到正在運行的容器中執行命令
docker cp       #在容器和本地系統間複製文件
docker update   #將一個容器內全部的進程從暫停狀態中恢復
docker ps       #列出主機中的容器
docker port     #查找一個nat到私有網口的公共口
docker top      #查看一個容器中正在運行的進程信息
docker logs     #查看日誌文件
docker diff     #檢查容器內文件系統的修改
docker status   #輸出容器的資源使用統計信息
docker wait     #阻塞直到容器終止
docker start    #啓動已建立的容器
docker pause    #暫停運行中的容器
docker unpause  #使暫停的容器恢復運行
docker stop     #中止容器運行
docker rename   #容器更名
docker restart  #容器重啓
docker kill     #關閉運行中的容器
docker rm       #刪除容器
docker export   #導出容器內容爲tar包
docker run      #同上
docker create   #同上
docker commit   #同上

 

其餘基本命令

docker events   #從服務端獲取實時的事件
docker info     #查看系統相關信息
docker inspect  #顯示Docker對象的具體配置信息,包括容器,鏡像,網絡等
docker version  #輸出Docker的版本信息

 

管理命令

docker container    #容器管理
docker image        #鏡像管理
docker network      #網絡管理
docker node         #節點管理
docker plugin       #插件管理
docker secret       #
docker service      #服務管理
docker stack        #
docker swarm        #集羣管理
docker system       #
docker volume       #卷管理

管理命令不能直接直接使用,後面還要加上命令,好比鏡像管理

$ docker image --help

Usage:  docker image COMMAND

Manage images

Options:
      --help   Print usage

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.

  

能夠看到跟基本命令對鏡像的操做相似,也包括build,pull,push等,比較經常使用的管理命令包括了

- image
- container
- network
- volume

 

 

login # 登陸docke倉庫

logout #退出登陸.

logs #查看容器日誌

network # 管理docker網絡:-鏈接;建立;斷開;刪除

 

 

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

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像建立並啓動一個容器
  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個 ip 地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢後容器被終止

 

 

參考連接:

Docker入門及經常使用命令(ubuntu):https://blog.csdn.net/he90227/article/details/53007768

 

Docker入門實戰(一)【內含有如何建立容器】:https://blog.csdn.net/u010425776/article/details/52260418

Docker 資料集合:

https://blog.csdn.net/qq_21816375/article/details/78238061

 

docker更全面介紹:https://blog.csdn.net/hcljava/article/details/78588623?locationNum=6&fps=1

 

Docker入門實戰-SSH鏈接docker容器:https://blog.csdn.net/qq626387/article/details/50506636

 

在Centos 7搭建Docker環境(ssh死活連不上):https://blog.csdn.net/qq_39871625/article/details/78029431

相關文章
相關標籤/搜索