天天看點

Docker學習重點(3)~docker指令:幫助指令、鏡像指令、容器指令、常用其他指令

一、幫助指令

docker version # 顯示docker的基本資訊
docker info # 系統資訊,鏡像和容器的數量
docker 指令 --help # 全部資訊      
  • 官網文檔:​​https://docs.docker.com/reference/​​

二、鏡像指令[增删改查]:

  • 檢視所有鏡像 docker images
  • 搜尋鏡像 docker search 鏡像名
  • 下載下傳鏡像 docker pull 鏡像名[:tag]
  • 删除鏡像 docker rmi -f 鏡像id
  • 删除所有鏡像 docker rmi -f $(docker images -aq)

1、檢視所有鏡像:docker images

  • 檢視所有本地主機上的鏡像
[root@192 ~]# docker images      
# 解釋
REPOSITORY      # 鏡像倉庫源
TAG             # 鏡像的标簽
IMAGE ID        # 鏡像的ID
CREATED         # 鏡像的建立時間
SIZE            # 鏡像的大小      
--all , -a    Show all images (default hides intermediate images) # 顯示所有
--digests    Show digests
--filter , -f    Filter output based on conditions provided
--format    Pretty-print images using a Go template
--no-trunc    Don’t truncate output
--quiet , -q    Only show numeric IDs # 隻顯示id      

2、搜尋鏡像:docker search

  • 搜尋倉庫中的鏡像,相當于網頁搜尋
  • 推薦到docker hub官網搜尋:​​http://hub.docker.com​​
docker search mysql      
docker search --help      
  • 設定搜尋條件:
# 解釋
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output      
docker search mysql --filter=STARS=3000 # 搜尋出Stars大于3000的      

3、下載下傳鏡像:docker pull

  • 版本到官網檢視,官網:​​https://hub.docker.com/_/mysql​​

★ docker的精髓:​

​分層下載下傳​

​ image的核心,聯合檔案系統

(1)下載下傳鏡像指令:docker pull 鏡像名[:tag]

  • 不寫tag,預設是lasest
docker的精髓:​

​分層下載下傳​

Docker學習重點(3)~docker指令:幫助指令、鏡像指令、容器指令、常用其他指令

4、删除鏡像:docker rmi

  • 删除鏡像指令:docker rmi 鏡像id/鏡像名稱
# 删除一個 可以通過名稱 也可以指定id -f表示強制
docker rmi -f 9cfcce23593a
# 删除多個 用空格分隔id
docker rmi -f 鏡像id 鏡像id 鏡像id
# 删除所有 
docker rmi -f $(docker images -aq) # images -aq就是查所有鏡像id,進而遞歸删除      

三、容器指令

  • 鏡像建立運作一個docker容器執行個體 docker run [可選參數] image
# 啟動并進入容器
docker run -it centos /bin/bash 
# 等價于:先run啟動,然後通過exex /bin/bash 進入容器 
docker run -it centos 
docker exec -it 容器id /bin/bash      
  • 檢視運作的容器:docker ps [可選參數]
  • 退出容器:【停止容器】exit 【非停止容器】ctr+p+q
  • 删除容器:docker rm [可選參數] 容器id
# 删除所有容器 -f 強制的
docker rm -f $(docker ps -aq)
# 删除所有容器
docker ps -a -q|xargs docker rm      
  • 啟動、重新開機、停止、殺死容器:
  • 啟動:docker start 容器id
  • 重新開機:docker restart 容器id
  • 停止:docker stop 容器id
  • 殺死:docker kill 容器id

1、案例:centos容器的測試

(1)下載下傳centos 鏡像

docker pull centos      

(2)建立容器執行個體并啟動

docker run [可選參數] image

# 參數說明
--name="Name"   # 容器名字,用于區分容器
-d 背景方式運作
-it 使用互動方式運作,進入容器檢視内容
-p 指定容器的端口 如-p 8080::8080
  -p ip:主機端口:容器端口
  -p 主機端口:容器端口(常用)
  -p 容器端口
  
-p 随機指定端口      
# 測試,啟動并進入容器
docker run -it centos /bin/bash 
# 等價于:
docker run -it centos 
docker exec -it 容器id /bin/bash
# 檢視目錄,檢視容器内的centos,基本版本,很多指令都是不完善的!
ls
# 退出,從容器中退回主機
exit      

(3)檢視運作的容器

# 檢視正在運作的容器
docker ps
# 檢視所有(包括曾經)運作的容器
docker ps -a
# 顯示最近建立的容器,設定顯示個數
docker ps -a - n=? 
# 隻顯示容器的編号(容器id)
docker ps -aq      
[root@192 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@192 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
9939864fa2e6        centos              "bin/bash"          4 minutes ago       Exited (0) 4 minutes ago                       unruffled_knuth
5f42e9930435        centos              "/bin/bash"         8 minutes ago       Exited (0) 4 minutes ago                       lucid_cannon
a89ddb393d3d        bf756fb1ae65        "/hello"            19 hours ago        Exited (0) 19 hours ago                        gracious_bhabha
[root@192 ~]# docker ps -a -n=2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
9939864fa2e6        centos              "bin/bash"          6 minutes ago       Exited (0) 6 minutes ago                       unruffled_knuth
5f42e9930435        centos              "/bin/bash"         10 minutes ago      Exited (0) 7 minutes ago 
[root@192 ~]# docker ps -aq
9939864fa2e6
5f42e9930435
a89ddb393d3d      

(4)退出容器

# 容器停止退出
exit
# 容器不停止退出 注意必須在英文輸入法下,中文輸入法不行
Ctrl + P + Q      
[root@192 ~]# docker run -it centos /bin/bash
[root@bfcea13c40cd /]# [root@192 ~]# docker ps ##注意這裡會自動給個指令,删掉
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
bfcea13c40cd        centos              "/bin/bash"         About a minute ago   Up About a minute                       stoic_wilson
edbd9366d959        centos              "/bin/bash"         7 minutes ago        Up 7 minutes                            affectionate_bartik
[root@192 ~]# docker exec -it edbd9366d959 /bin/bash ## 再次進入
[root@edbd9366d959 /]# exit ##停止并推出
exit      

(5)删除容器

# 删除指定容器 不能删除正在運作的容器,如果強制删除 rm -f
docker rm 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有容器
docker ps -a -q|xargs docker rm      
[root@192 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bfcea13c40cd        centos              "/bin/bash"         29 minutes ago      Up 29 minutes                                   stoic_wilson
edbd9366d959        centos              "/bin/bash"         35 minutes ago      Up 35 minutes                                   affectionate_bartik
9939864fa2e6        centos              "bin/bash"          48 minutes ago      Exited (0) 48 minutes ago                       unruffled_knuth
5f42e9930435        centos              "/bin/bash"         52 minutes ago      Exited (0) 49 minutes ago                       lucid_cannon
a89ddb393d3d        bf756fb1ae65        "/hello"            20 hours ago        Exited (0) 20 hours ago                         gracious_bhabha
[root@192 ~]# docker rm 5f42e9930435
5f42e9930435
[root@192 ~]# docker rm edbd9366d959      # 注意正在運作的容器不能删除
Error response from daemon: You cannot remove a running container edbd9366d9596c744dd449119269b04de2f2a494e7fc471f6396bcefd94c33fe. Stop the container before attempting removal or force remove      
[root@192 ~]# docker ps -aq # 所有容器id
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d
[root@192 ~]# docker rm -f $(docker ps -aq) # 全部删除
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d      

(6)啟動和停止/殺死容器的操作

docker start
docker restart
docker stop
docker kill      

四、常用其他指令

  • 背景啟動docker指令:參數是 -d
docker run -d 鏡像名/鏡像id
  • ​檢視日志[沒有報錯資訊或者報錯資訊不足以解決問題時,需要檢視日志]:​

    ​docker logs
docker logs [-f -t --tail n] 容器id
  • 檢視程序(ps): docker top 容器id
  • 檢視正在運作的容器資訊: docker inspect 容器id
  • 進入目前正在運作的容器 docker exec -it 容器id /bin/bash
  • 從容器内拷貝檔案到主機上 容器資料拷貝到主機: docker cp 容器id 主控端的檔案目錄
  • 檢視内容占用:docker stats

1、背景啟動docker,參數是 -d

docker run -d 鏡像名      

問題:docker 容器使用背景運作,用docker ps 檢視的時候 發現停止了

原因:背景運作,docker發現前台沒有,容器啟動後,發現自己沒有提供服務,會立刻停止

2、檢視日志

docker logs
docker logs -f -t --tail n 容器id      
[root@192 ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g.
                       2013-01-02T13:23:37) or relative
                       (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the
                       end of the logs (default "all")
  -t, --timestamps     Show timestamps # 時間戳
      --until string   Show logs before a timestamp (e.g.
                       2013-01-02T13:23:37) or relative
                       (e.g. 42m for 42 minutes)      
# 腳本
while true;do echo shenzai;sleep      
# 檢視日志,由于沒有運作腳本,是以啥也沒顯示
[root@192 ~]# docker logs -f -t --tail 10 c2887d35c71d
^C # ctrl+c退出

# 運作centos裡面加個腳本
[root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo shenzai;sleep 1;done"

[root@192 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
cb6d7fbc3f27        centos              "/bin/sh -c 'while t…"   7 seconds ago       Up 6 seconds                           

# 檢視日志 發現隔一秒列印一條
[root@192 ~]# docker logs -f -t --tail 10 cb6d7fbc3f27      

3、檢視運作的容器,檢視容器中的程序資訊 ps

  • top 指令,友善以後殺死程序
  • 指令:docker top 容器id
docker top 3cdbca722bab

UID                 PID                 PPID                C                   STIME               TTY                 TIME               
root                24624               24603               0                   22:22               ?                   00:00:00            /bin/sh -c while true;do echo kuangshen;sleep 1;done      

4、檢視正在運作的容器資訊(鏡像中繼資料):inspect

  • 指令:docker inspect 容器id
[root@192 ~]# docker inspect cb6d7fbc3f27
[
    {
        # 容器的完整id
        "Id": "cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388",
        
        # 建立時間
        "Created": "2020-06-17T12:00:50.706906186Z",
        
        # 腳本位置
        "Path": "/bin/sh",
        
        # 運作的腳本
        "Args": [
            "-c",
            "while true;do echo shenzai;sleep 1;done"
        ],
        "State": {
            "Status": "running", # 狀态,正在運作
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1909, # 父程序id
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-06-17T12:00:51.093617477Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        
        # 來源鏡像
        "Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
        "ResolvConfPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hostname",
        "HostsPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hosts",
        "LogPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388-json.log",
        
        
        "Name": "/dreamy_almeida",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        
        # 主機配置
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        
        # 其他配置
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907-init/diff:/var/lib/docker/overlay2/7f79322e0f58d651a84a555dadd83d92537788172525945d3f538dd95dce336c/diff",
                "MergedDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/merged",
                "UpperDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/diff",
                "WorkDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/work"
            },
            "Name": "overlay2"
        },
        
        "Mounts": [], # 挂載
        
        # 基本配置
        "Config": {
            "Hostname": "cb6d7fbc3f27",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ], # 基本環境變量,這裡沒有Java
            
            # 基本指令
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo shenzai;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200611",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        
        # 網卡,比如現在用的是橋接的網卡
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "4d701985d7e77aa153790b697b2f38a61e20555c224b7675e4bf650b82799882",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/4d701985d7e7",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "22b0fd2290ccbc4e066a75d3f01bd8bf32ee4352c5bbcfc9f911287219219571",
                    "EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]      

5、進入目前正在運作的容器

  • 指令:docker exec -it 容器id bashSHELL

● 差別:是否開啟一個新的線程

docker exec 進入容器後開啟一個新的終端,可以在裡面操作(​

​常用​

​)
docker attach 進入容器正在執行的終端,不會啟動新的程序
# 我們通常容器都是使用背景方式運作的
docker exec -it 容器id bashSHELL

# 測試
[root@192 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c2887d35c71d        centos              "/bin/bash"         35 minutes ago      Up 35 minutes                           
[root@192 ~]# docker exec -it c2887d35c71d /bin/bash
[root@c2887d35c71d /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@c2887d35c71d /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 11:57 pts/0    00:00:00 /bin/bash
root         14      0  0 12:32 pts/1    00:00:00 /bin/bash
root         28     14  0 12:32 pts/1    00:00:00 ps -ef
[root@c2887d35c71d /]# c2887d35c71d
[root@c2887d35c71d /]# exit
exit

# 方式二
[root@192 ~]# docker attach c2887d35c71d
[root@c2887d35c71d /]#      

6、從容器内拷貝檔案到主機上 cp

# 運作
[root@192 ~]# docker run -it centos
# ctrl P Q 不關閉退出,檢視
[root@0569081aa89c /]# [root@192 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0569081aa89c        centos              "/bin/bash"         19 seconds ago      Up 19 seconds    
hopeful_chebyshev

# 檢視主機home下無檔案
[root@192 ~]# cd /home
[root@192 home]# ls

# 進入正在運作的容器
[root@192 home]# docker attach 0569081aa89c

# 進入容器home目錄
[root@0569081aa89c /]# cd /home

# 在目錄中建立java檔案
[root@0569081aa89c home]# touch test.java

# 退出并停止容器
[root@0569081aa89c home]# exit
exit

# 檢視現在運作的容器
[root@192 home]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# 容器雖然被停止,但是資料都會保留
[root@192 home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
0569081aa89c        centos              "/bin/bash"              3 minutes ago       Exited (0) 8 seconds ago                           hopeful_chebyshev
f589e5684a01        centos              "/bin/bash"              44 minutes ago      Exited (0) 44 minutes ago                          cranky_easley
cb6d7fbc3f27        centos              "/bin/sh -c 'while t…"   54 minutes ago      Exited (137) 42 minutes ago                        dreamy_almeida
c2887d35c71d        centos              "/bin/bash"              58 minutes ago      Exited (127) 16 minutes ago                        vigorous_kare
8ce188e5fee3        centos              "/bin/bash"              About an hour ago   Exited (0) About an hour ago                       tender_dirac
7b1a7dd10ea4        centos              "/bin/bash"              9 hours ago         Exited (0) 9 hours ago                             fervent_mirzakhani

# 容器資料拷貝到主機
[root@192 home]# docker cp 0569081aa89c:/home/test.java /home
[root@192 home]# ls
test.java

# 拷貝是一個手動過程,未來我們使用 -v 卷的技術,可以實作自動同步 /home /home      

7、檢視内容占用 stats

docker stats      

如果本文對你有幫助的話記得給一樂點個贊哦,感謝!

繼續閱讀