docker--經常使用命令

前戲

咱們使用docker --help來查看下都有哪些命令linux

[root@docker ~]# docker --help

Usage:
docker [OPTIONS] COMMAND [arg...]

       docker daemon [ --help | ... ]

       docker [ --help | -v | --version ]

 

A
self-sufficient runtime for containers.

 

Options:

 

  --config=~/.docker              Location of client config files  #客戶端配置文件的位置

  -D, --debug=false               Enable debug mode  #啓用Debug調試模式

  -H, --host=[]                   Daemon socket(s) to connect to  #守護進程的套接字(Socket)鏈接

  -h, --help=false                Print usage  #打印使用

  -l, --log-level=info            Set the logging level  #設置日誌級別

  --tls=false                     Use TLS; implied by--tlsverify  #

  --tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA  #信任證書籤名CA

  --tlscert=~/.docker/cert.pem    Path to TLS certificate file  #TLS證書文件路徑

  --tlskey=~/.docker/key.pem      Path to TLS key file  #TLS密鑰文件路徑

  --tlsverify=false               Use TLS and verify the remote  #使用TLS驗證遠程

  -v, --version=false             Print version information and quit  #打印版本信息並退出

 

Commands:

    attach    Attach to a running container  #當前shell下attach鏈接指定運行鏡像

    build     Build an image from a Dockerfile  #經過Dockerfile定製鏡像

    commit    Create a new image from a container's changes  #提交當前容器爲新的鏡像

    cp    Copy files/folders from a container to a HOSTDIR or to STDOUT  #從容器中拷貝指定文件或者目錄到宿主機中

    create    Create a new container  #建立一個新的容器,同run 但不啓動容器

    diff    Inspect changes on a container's filesystem  #查看docker容器變化

    events    Get real time events from the server#從docker服務獲取容器實時事件

    exec    Run a command in a running container#在已存在的容器上運行命令

    export    Export a container's filesystem as a tar archive  #導出容器的內容流做爲一個tar歸檔文件(對應import)

    history    Show the history of an image  #展現一個鏡像造成歷史

    images    List images  #列出系統當前鏡像

    import    Import the contents from a tarball to create a filesystem image  #從tar包中的內容建立一個新的文件系統映像(對應export)

    info    Display system-wide information  #顯示系統相關信息

    inspect    Return low-level information on a container or image  #查看容器詳細信息

    kill    Kill a running container  #kill指定docker容器

    load    Load an image from a tar archive or STDIN  #從一個tar包中加載一個鏡像(對應save)

    login    Register or log in to a Docker registry#註冊或者登錄一個docker源服務器

    logout    Log out from a Docker registry  #從當前Docker registry退出

    logs    Fetch the logs of a container  #輸出當前容器日誌信息

    pause    Pause all processes within a container#暫停容器

    port    List port mappings or a specific mapping for the CONTAINER  #查看映射端口對應的容器內部源端口

    ps    List containers  #列出容器列表

    pull    Pull an image or a repository from a registry  #從docker鏡像源服務器拉取指定鏡像或者庫鏡像

    push    Push an image or a repository to a registry  #推送指定鏡像或者庫鏡像至docker源服務器

    rename    Rename a container  #重命名容器

    restart    Restart a running container  #重啓運行的容器

    rm    Remove one or more containers  #移除一個或者多個容器

    rmi    Remove one or more images  #移除一個或多個鏡像(無容器使用該鏡像才能夠刪除,不然須要刪除相關容器才能夠繼續或者-f強制刪除)

    run    Run a command in a new container  #建立一個新的容器並運行一個命令

    save    Save an image(s) to a tar archive#保存一個鏡像爲一個tar包(對應load)

    search    Search the Docker Hub for images  #在docker
hub中搜索鏡像

    start    Start one or more stopped containers#啓動容器

    stats    Display a live stream of container(s) resource usage statistics  #統計容器使用資源

    stop    Stop a running container  #中止容器

    tag         Tag an image into a repository  #給源中鏡像打標籤

    top       Display the running processes of a container #查看容器中運行的進程信息

    unpause    Unpause all processes within a container  #取消暫停容器

    version    Show the Docker version information#查看容器版本號

    wait         Block until a container stops, then print its exit code  #截取容器中止時的退出狀態值

 

Run 'docker COMMAND --help' for more information on a command.  #運行docker命令在幫助能夠獲取更多信息
View Code

搜索鏡像

docker search jenkins  # 搜索全部的jenkins的docker鏡像
[root@HH ~]# docker search jenkins 
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
jenkins                                Official Jenkins Docker image                   4453                [OK]                
jenkins/jenkins                        The leading open source automation server       1706                                    
jenkinsci/blueocean                    https://jenkins.io/projects/blueocean           442                                     
jenkinsci/jenkins                      Jenkins Continuous Integration and Delivery …   371                                     
jenkinsci/jnlp-slave                   A Jenkins slave using JNLP to establish conn…   114                                     [OK]
jenkins/jnlp-slave                     a Jenkins agent (FKA "slave") using JNLP to …   96                                      [OK]
jenkinsci/slave                        Base Jenkins slave docker image                 57                                      [OK]
jenkinsci/ssh-slave                    A Jenkins SSH Slave docker image                39                                      [OK]
cloudbees/jenkins-enterprise           CloudBees Jenkins Enterprise (Rolling releas…   34                                      [OK]
jenkins/slave                          base image for a Jenkins Agent, which includ…   32        

NAME:名稱。DESCRIPTION:描述。STARS:點贊數。OFFICIAL:官方。AUTOMATED:自動化web

獲取鏡像

從docker registry獲取鏡像的命令是docker pull。命令格式是:docker

docker pull [選項][docker registry地址] 倉庫名:標籤shell

docker是把應用程序和其依賴打包在image文件裏面,只有經過這個鏡像文件才能生成docker容器。json

一個image文件能夠生成多個容器實例。vim

可使用docker pull命令來從倉庫獲取所須要的鏡像,好比下載一個jenkins的鏡像centos

docker pull jenkins  # 獲取jenkins鏡像
[root@HH ~]# docker pull jenkins
Using default tag: latest
latest: Pulling from library/jenkins
55cbf04beb70: Pull complete 
1607093a898c: Pull complete 
9a8ea045c926: Pull complete 
d4eee24d4dac: Pull complete 
c58988e753d7: Pull complete 
794a04897db9: Pull complete 
70fcfa476f73: Pull complete 
0539c80a02be: Pull complete 
54fefc6dcf80: Pull complete 
911bc90e47a8: Pull complete 
38430d93efed: Pull complete 
7e46ccda148a: Pull complete 
c0cbcb5ac747: Pull complete 
35ade7a86a8e: Pull complete 
aa433a6a56b1: Pull complete 
841c1dd38d62: Pull complete 
b865dcb08714: Pull complete 
5a3779030005: Pull complete 
12b47c68955c: Pull complete 
1322ea3e7bfd: Pull complete 
Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668
Status: Downloaded newer image for jenkins:latest
docker.io/library/jenkins:latest

拉取指定版本,用:瀏覽器

docker pull jenkins:1.12  # 獲取jenkins1.12的鏡像

下載過程能夠看出鏡像是由多層存儲構成的。下載也是一層一層,並不是單一的文件。安全

下載過程當中給出每一層的前12位ID。下載結束後會給出sha246的文件一致性校驗值bash

查看docker鏡像

docker images  # 查看docker鏡像

 刪除docker鏡像

若是要移除本地的鏡像,可使用docker rmi命令(在刪除鏡像以前先用docker rm刪除依賴於這個鏡像的全部容器)。注意docker rm 命令是移除容器。

docker rmi imageID  #刪除docker鏡像
或者
docker rmi 鏡像名字

刪除全部的鏡像

docker rmi `docker images -aq`   #一次性刪除全部鏡像記錄,反單引號

導出docker鏡像

有時候咱們的鏡像,別人也要使用,咱們能夠把咱們的鏡像導出給別人使用,使用docker save命令

docker save jenkins > /tmp/jenkins.tar.gz  # 導出docker鏡像到本地的tmp目錄下

導入docker鏡像

上面別人給咱們導出了他的鏡像,那咱們就要導入了,刪除本身的docker鏡像在導入

docker load < /tmp/jenkins.tar.gz  # 導入本地鏡像到docker鏡像庫

導入完以後查看docker鏡像庫

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jenkins             latest              cd14cecfdb3a        14 months ago       696MB

啓動docker容器

啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另一個是將在終止狀態(stopped)的容器從新啓動。

由於Docker的容器實在過輕量級了,不少時候用戶都是隨時刪除和新建立容器。

新建容器並啓動

使用docker run啓動容器

[root@HH ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jenkins             latest              cd14cecfdb3a        14 months ago       696MB
[root@HH ~]# docker run cd14

這樣就啓動了一個容器,但這樣有缺點,咱們關掉窗口或者ctrl+c就終止了,因此在啓動的時候咱們能夠加上參數-d,表示後臺啓動

[root@HH ~]# docker run -d jenkins  也能夠經過id啓動
4ee88fb080c7718fd68bc5dfbea01e10048df8fd00e461cdec166be594064293

docker run就是運行容器的命令。
參數

  • -it : -i 是交互式操做,-t是終端
  • -rm : 容器退出後將其刪除。也能夠不指定參數,手動docker rm,使用-rm能夠避免浪費空間。
  • bash : 指定用交互式的shell,所以須要bash命令

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

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

查看正在運行的容器

經過docker ps就能夠查看運行的容器

[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   4 minutes ago       Up 4 minutes        8080/tcp, 50000/tcp   brave_wilson

後面的NAMES參數是docker給咱們生成的,咱們也能夠自定義,在啓動的時候加上--name參數

[root@HH ~]# docker run -d --name MyJenkins jenkins
1603ebfad9aaff6c2ec1bfa6e5300ac711a716d8bea3b0fed37c6bbc38b354b1
[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
1603ebfad9aa        jenkins             "/bin/tini -- /usr/l…"   9 seconds ago       Up 8 seconds        8080/tcp, 50000/tcp   MyJenkins

中止正在運行的容器

經過docker stop 容器id/names均可以中止容器

[root@HH ~]#  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   7 minutes ago       Up 7 minutes        8080/tcp, 50000/tcp   brave_wilson
[root@HH ~]# 
[root@HH ~]# docker stop brave_wilson
brave_wilson
[root@HH ~]# docker stop 40db
40db

查看全部的容器

docker ps -a 能夠查看中止和運行的容器

[root@HH ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS               NAMES
40db302d030b        jenkins             "/bin/tini -- /usr/l…"   2 minutes ago       Exited (143) About a minute ago                       admiring_morse
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   9 minutes ago       Exited (143) 2 minutes ago                            brave_wilson
d6e046c9d2ff        cd14                "/bin/tini -- /usr/l…"   12 minutes ago      Exited (130) 11 minutes ago                           vigorous_greider

刪除容器記錄

 經過docker rm 容器ID來刪除

[root@HH ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
40db302d030b        jenkins             "/bin/tini -- /usr/l…"   About an hour ago   Exited (143) About an hour ago                       admiring_morse
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   2 hours ago         Exited (143) About an hour ago                       brave_wilson
d6e046c9d2ff        cd14                "/bin/tini -- /usr/l…"   2 hours ago         Exited (130) 2 hours ago                             vigorous_greider
[root@HH ~]# docker rm 40db     刪除容器記錄
40db
[root@HH ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   2 hours ago         Exited (143) About an hour ago                       brave_wilson
d6e046c9d2ff        cd14                "/bin/tini -- /usr/l…"   2 hours ago         Exited (130) 2 hours ago                             vigorous_greider

經過rm刪除的是已中止的,若是是正在運行的會報錯

[root@HH ~]# docker rm 00436
Error response from daemon: You cannot remove a running container 00436eade5368cad1f93e9e1ef9c3cc5da3738a0f17a7e1b6e2669e7c379ca54. Stop the container before attempting removal or force remove

能夠經過-f參數強制刪除

[root@HH ~]# docker rm -f 00436
00436
[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
3c4cb6a23761        jenkins             "/bin/tini -- /usr/l…"   30 minutes ago      Up 30 minutes       50000/tcp, 0.0.0.0:8000->8080/tcp   myjenkins

一次性刪除全部容器記錄

docker rm `docker ps -aq` # 一次性刪除全部容器id記錄

` ` #反引號是取命令的運行結果

啓動終止狀態的容器

經過docker start 容器ID來啓動

[root@HH ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   2 hours ago         Exited (143) About an hour ago                       brave_wilson
d6e046c9d2ff        cd14                "/bin/tini -- /usr/l…"   2 hours ago         Exited (130) 2 hours ago                             vigorous_greider
[root@HH ~]# docker start 4ee8   啓動中止的容器
4ee8
[root@HH ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                 NAMES
4ee88fb080c7        jenkins             "/bin/tini -- /usr/l…"   2 hours ago         Up 3 seconds               8080/tcp, 50000/tcp   brave_wilson
d6e046c9d2ff        cd14                "/bin/tini -- /usr/l…"   2 hours ago         Exited (130) 2 hours ago                         vigorous_greider

進入容器

使用-d參數時,容器啓動後會進入後臺。某些時候須要進入容器進行操做,有不少種方法,包括使用docker attach命令或nsenter工具等。

docker  exec -it 容器id /bin/bash
docker attach 容器id

提交建立自定義的鏡像

#1.咱們進入交互式的centos容器中,發現沒有vim命令
docker run -it centos
#2.在當前容器中,安裝一個vim yum install -y vim
#3.安裝好vim以後,exit退出容器 exit
#4.查看剛纔安裝好vim的容器記錄 docker container ls -a
#5.提交這個容器,建立新的image docker commit 059fdea031ba chaoyu/centos-vim
#6.查看鏡像文件 [root@master /home]docker images REPOSITORY TAG IMAGE ID CREATED SIZE chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago 348MB

外網訪問容器

上面咱們使用-d參數後臺啓動了jenkins,可是還不能訪問它,若是想訪問,還須要加-p或者-P參數,返回的是容器ID

[root@HH ~]# docker run -d --name myjenkins -p 8000:8080 jenkins
3c4cb6a2376121fdc71303232cd3e68ffb6683c2c24aeba544c3d65e17c0e9be
[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
3c4cb6a23761        jenkins             "/bin/tini -- /usr/l…"   5 seconds ago       Up 4 seconds        50000/tcp, 0.0.0.0:8000->8080/tcp   myjenkins

-p 8000:8080表示將本機的8000端口映射到容器的8080端口,瀏覽器訪問8000端口就是訪問容器的8080端口

設置成功後,咱們在瀏覽器輸入以下的地址就能看到jenkins的頁面了

http://49.235.160.132:8000

-P  參數會隨機映射端口到容器開放的網絡端口

[root@HH ~]# docker run -d -P jenkins
00436eade5368cad1f93e9e1ef9c3cc5da3738a0f17a7e1b6e2669e7c379ca54
[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                               NAMES
00436eade536        jenkins             "/bin/tini -- /usr/l…"   5 seconds ago       Up 3 seconds        0.0.0.0:32769->8080/tcp, 0.0.0.0:32768->50000/tcp   angry_curran
3c4cb6a23761        jenkins             "/bin/tini -- /usr/l…"   3 minutes ago       Up 3 minutes        50000/tcp, 0.0.0.0:8000->8080/tcp                   myjenkins

上面會將宿主機的32769端口映射到容器的8080端口,訪問下面地址也是同樣的

http://49.235.160.132:8000

舒適提示:若是訪問失敗的話,請檢查本身的防火牆,以及雲服務器的安全組 

查看容器日誌

不間斷顯示log:docker logs -f 容器ID

[root@HH ~]# docker logs -f 00436
Running from: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
Sep 28, 2019 2:37:31 PM Main deleteWinstoneTempContents
WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war
Sep 28, 2019 2:37:31 PM org.eclipse.jetty.util.log.JavaUtilLog info
INFO: Logging initialized @1325ms
Sep 28, 2019 2:37:31 PM winstone.Logger logInternal
INFO: Beginning extraction from war file
Sep 28, 2019 2:37:33 PM org.eclipse.jetty.util.log.JavaUtilLog warn
WARNING: Empty contextPath
Sep 28, 2019 2:37:33 PM org.eclipse.jetty.util.log.JavaUtilLog info
INFO: jetty-9.2.z-SNAPSHOT

查看指定容器的端口映射

如今咱們已經映射了兩個端口,一個是32769,一個是8000,以下

[root@HH ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                               NAMES
00436eade536        jenkins             "/bin/tini -- /usr/l…"   8 minutes ago       Up 8 minutes        0.0.0.0:32769->8080/tcp, 0.0.0.0:32768->50000/tcp   angry_curran
3c4cb6a23761        jenkins             "/bin/tini -- /usr/l…"   12 minutes ago      Up 12 minutes       50000/tcp, 0.0.0.0:8000->8080/tcp                   myjenkins

使用docker port 容器ID就能夠查看端口映射

[root@HH ~]# docker port 00436
50000/tcp -> 0.0.0.0:32768
8080/tcp -> 0.0.0.0:32769

 docker info

查看docker的xinx

[root@HH ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 4      # 容器總數
  Running: 1        # 運行的容器個數
  Paused: 0         # 暫停的容器個數
  Stopped: 3        # 中止的容器個數
 Images: 1          # 鏡像個數
 Server Version: 19.03.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.21.3.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 991.2MiB
 Name: HH
 ID: YNAQ:DAQM:U3EC:6DQS:HL5N:PVME:5KST:I3VD:K4VK:AZJ4:NJIY:AEHW
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

 總結

鏡像
docker image ls         # 查看全部鏡像
docker images           # 查看全部鏡像
docker pull 鏡像名       # docker倉庫,dockerhub
docker push 鏡像名       # 把本地的鏡像推送到 dockerhub倉庫
docker search 鏡像名     # 搜索鏡像
docker rmi  容器ID       # 刪除鏡像
docker version           # 查看docker版本,查看到server 和client兩個端
systemctl start docker   # 啓動docker
docker save  鏡像名  >  /data/centos.tar.gz  # 導出鏡像
docker load  <  /data/centos.tar.gz  # 導入鏡像    
docker run  鏡像名       # 運行鏡像文件,產生一個容器實例
 容器
docker start 容器id          # 啓動容器
docker stop 容器id           # 中止容器
docker exec -it   容器id     # 進入正在運行的容器
    -i 交互式操做
    -t  開啓一個終端

docker run 鏡像名            # 建立容器實例
docker rm  容器id            # 刪除容器記錄,必須提早docker stop 容器id ,只能殺死已經中止的容器
docker rm -f 容器id          # 能夠刪除運行中的容器
docker ps                    # 查看容器正在運行記錄
docker ps -aq               # 顯示全部容器記錄的id號
    -a  顯示全部容器記錄
    -q     顯示容器id
    
docker rm  `docker ps -aq`  # 一次性刪除全部容器記錄

docker container ls         # 查看容器正在運行記錄
docker commit  容器id記錄     # 提交這個容器,建立一個新的鏡像
docker logs                 # 查看容器運行日誌 
    -f    #不間斷打印容器日誌
    
docker port   #查看容器的端口映射關係(外部訪問到容器內的端口)
docker run -d  centos  -P  
-d 後臺運行
-P   隨機映射端口  
-p  9000(宿主機):5000(容器內) 
--name   給建立的容器記錄,添加別名
相關文章
相關標籤/搜索