3.docker的常用命令

1.版本
    docker verison
2.docker常用信息
    docker info
    
3.列出本地的镜像
    [root@wmd03 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

镜像的操作命令

1.列出本地所有的镜像(含中间映像层)
[root@wmd03 ~]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

2.只显示镜像的id
[root@wmd03 ~]# docker images -q
bf756fb1ae65

3.组合使用:查看本地所有镜像的id
[root@wmd03 ~]# docker images -qa
bf756fb1ae65


4.去docker官网查询tomcat的信息
[root@wmd03 ~]# docker search tomcat
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   2838                [OK]                
tomee                         Apache TomEE is an all-Apache Java EE certif…   83                  [OK]                
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   55                                      [OK]
bitnami/tomcat                Bitnami Tomcat Docker Image                     36                                      [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      29                                      
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              17                                      [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                                      [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                                      [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   10                                      


5.只累出点赞数超过30的tomcat,点赞数越多,下载越多,也就越稳定
root@wmd03 ~]# docker search -s 30 tomcat
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat              Apache Tomcat is an open source implementati…   2838                [OK]                
tomee               Apache TomEE is an all-Apache Java EE certif…   83                  [OK]                
dordoka/tomcat      Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   55                                      [OK]
bitnami/tomcat      Bitnami Tomcat Docker Image 





6.下载镜像
不指定版本号的话,下载的是最新的tomcat
下载指定版本号的话: docker pull tomcat:版本号
[root@wmd03 ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
57df1a1f1ad8: Pull complete 
71e126169501: Pull complete 
1af28a55c3f3: Pull complete 
03f1c9932170: Pull complete 
881ad7aafb13: Pull complete 
9c0ffd4062f3: Pull complete 
bd62e479351a: Pull complete 
48ee8bc64dbc: Pull complete 
07cb85cca4f0: Pull complete 
6a78fac8d191: Pull complete 
Digest: sha256:1bab37d5d97bd8c74a474b2c1a62bbf1f1b4b62f151c8dcc472c7d577eb3479d
Status: Downloaded newer image for tomcat:lates



7.删除镜像:
    1.
    [root@wmd03 ~]# docker rmi hello-world
    Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container ee6aeb6d745b is using its referenced image bf756fb1ae65
    2.强制删除
    [root@wmd03 ~]# docker rmi -f  hello-world
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
    Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
    3.批量删除
     [root@wmd03 ~]# docker rmi -f  hello-world nginx   
    
    4.删除所有的镜像
         [root@wmd03 ~]# docker rmi -f ${docker images -q}
         
     5.删除包含关键字的镜像
         docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //其中doss-api为关键字

容器的操作命令

镜像是容器的前提,有镜像才能有容器:镜像可以理解是类(模板),容器是实例(具体的对象实例)
测试:
1.从阿里云上拉下一个centos系统
    [root@wmd03 ~]# docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    3c72a8ed6814: Pull complete 
    Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
    Status: Downloaded newer image for centos:latest
    
    [root@wmd03 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    tomcat              latest              f796d3d2c195        12 days ago         647MB
    centos              latest              0d120b6ccaa8        6 weeks ago         215MB
    发现centos系统的大小和vmware虚拟机的系统大小相差很大,vmware的系统最少4个g,
    这是因为docker上的centos镜像是精简版的,并没有硬件的虚拟,是最精简的linux系统

2.启动下载的centos系统
    -it的意思是启动并创建一个伪终端,实验如下
    [root@wmd03 ~]# docker run -it 0d120b6ccaa8
    发现路径在cenos系统的根目录下,是因为现处于docker启动的centos系统的伪终端里
    [root@9988123a0072 /]# pwd
    /
    [root@9988123a0072 /]# ls 
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@9988123a0072 /]# 
    
    2.2指定名称运行docker的centos
        [root@wmd03 ~]# docker run -it --name wmd03 centos
        这时,另创建一个连接执行:docker ps:发现names是自己创建的名称
            [root@wmd03 ~]# docker ps
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            93f13e82a6ba        centos              "/bin/bash"         22 seconds ago      Up 22 seconds                           wmd03


    3.退出容器
        3.1 exit 容器停止并退出
        3.2 ctrl+p+q 容器不停止退出
        
        
4.查询运行的容器
    docker ps:查询正在运行的容器
    docker ps -a:列出当前所有正在运行的容器+历史上运行过的容器
    docker ps -l:显示最近创建的容器
    docker ps -n:显示最近几个创建的容器
    docker ps -q:静默模式,只显示正在运行的容器的id号
    docker ps --no-trunc:不截断输出
    
    
5.docker 容器的启动和重启
    5.1查询正在运行的docker,发现只有一个
        [root@wmd03 ~]# docker ps 
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
    5.2查询曾经运行的两个容器
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                                     wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Exited (127) 15 minutes ago                       nostalgic_jennings
    5.3 启动已停止的docker 容器:docker start id号
        [root@wmd03 ~]# docker start 9988123a0072
        9988123a0072
    5.4 查看当前正在运行的docker容器,发现已经启动
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Up 6 seconds                            nostalgic_jennings
    5.5重启docker容器
        [root@wmd03 ~]# docker restart 9988123a0072
        9988123a0072
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Up 3 seconds                            nostalgic_jennings
        
6.docker容器的停止
    6.1 docker stop id号
    6.2强制关闭;docker kill id号
    
    
7.删除docker容器的运行历史
    7.1查询当前正在运行的容器:发现没有
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        查询历史运行的2个容器
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         23 minutes ago      Exited (0) 32 seconds ago                       wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         38 minutes ago      Exited (0) 25 seconds ago                       nostalgic_jennings
    7.2 docker rm id号
        删除9988123a0072的docker容器运行历史
        [root@wmd03 ~]# docker rm 9988123a0072
        9988123a0072
        查询历史发现已经没有该容器的运行历史
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         25 minutes ago      Exited (0) 2 minutes ago                       wmd03
        ee6aeb6d745b        bf756fb1ae65        "/hello"            2 hours ago         Exited (0) 2 hours ago                         romantic_thompson
    7.3强制删除该容器的运行历史(用于删除没有停止的容器历史)
        docker rm -f id号
    7.4强制删除所有容器的运行历史(不管运行与否)    
        docker rm -f $(docker ps -q)
1.启动docker容器
    docker run
                --name="容器新名字":为容器指定一个名称
                -d:后台运行容器,并返回容器ID,也即启动守护式容器
                -i:以交互模式运行容器,通常以-t同时使用
                -t:为容器重新分配一个伪输入终端,通常与-i同时使用
                -P:随机端口映射
                -p:指定端口映射,有以下四种格式
                     ip:hostPort:containerPort
                    ip::containerPort
                    hostPort:containerPort
                    containerPort
        这里需要注意的是: docker run -d centos(后台运行)和docker run -it centos(作为交互式运行时的区别)
            [root@wmd03 ~]# docker run -d centos(以后台运行进程,并返回一个序列号)
            e1599db736fea1ae078d6ee47360163d9cd3e101af4cc1f23971705e967459e8
            [root@wmd03 ~]# docker ps-->查询当前正在运行的容器,发现并没有centos的运行
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            [root@wmd03 ~]# docker ps -n 2--->查询容器的运行历史,发现centos有运行过,但是关闭了
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
            e1599db736fe        centos              "/bin/bash"         29 seconds ago      Exited (0) 27 seconds ago                       vigilant_ardinghelli
            这是什么原因呢:
                这里需要一个很重要的点:docker容器后台运行,就必须有一个前台进程
                容器运行的命令,如果不是一些挂起的命令(top,tail等),就会自动退出
                
                这是docker的机制问题,例如以web容器,我们以ngix为例,正常情况下,我们启动响应的service即可,例如:service nginx start
                但是这样做,nigix为后台进程模式运行,就导致docket前台没有可运行的应用
                这样容器后台启动后,就会例即自杀,因为他觉得无事可做
                所以最佳的解决方案是:将你要运行的程序以前台进程的方式运行
                


2.查看容器日志:
    docker -logs 
        -f 跟随最新的时间打印
        -t  加入时间戳
        --tail 数字,显示最后多少条
        容器id
        
        
3.解决1遗留的后台运行问题:思路是,因没有前台程序导致容器的自杀,所以可以写个死循环,不停的输出日志到控制台,这就有了一个挂起程序了,也就是有了前台,也就不会断了
    不能使用:docker run -d centos
    使用:docker run -d centos /bin/sh -c "while true;do echo hello wmd;sleep 5;done"-->后面的意思是每隔5秒打印一次:hello wmd
    a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a
    [root@wmd03 ~]# docker ps--->查询当前正在运行的容器,发现有centos
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    a4ced0fdefb9        centos              "/bin/sh -c 'while t…"   5 seconds ago       Up 4 seconds                            hardcore_tereshkova
    查看日志:
        1.-t
            [root@wmd03 ~]# docker logs -t a4ced0fdefb9
            2020-10-09T20:07:59.646584481Z hello wmd
            2020-10-09T20:08:04.847974447Z hello wmd
            2020-10-09T20:08:09.851195631Z hello wmd
            2020-10-09T20:08:14.862156606Z hello wmd
            发现5秒打印一次
        2.-f 不停的追加
             docker logs -t -f a4ced0fdefb9
             2020-10-09T20:07:59.646584481Z hello wmd
             2020-10-09T20:08:04.847974447Z hello wmd
             2020-10-09T20:08:09.851195631Z hello wmd
             2020-10-09T20:08:14.862156606Z hello wmd
             ...持续追加中
         3.--tail 数字:查看最后几条日志
             [root@wmd03 ~]# docker logs -f -t --tail 4 a4ced0fdefb9
            2020-10-09T20:13:00.129713239Z hello wmd
            2020-10-09T20:13:05.132413634Z hello wmd
            2020-10-09T20:13:10.135802553Z hello wmd
            2020-10-09T20:13:15.146469641Z hello wmd

4.查看docker 容器中的进程
    docker top 容器id
    [root@wmd03 ~]# docker top a4ced0fdefb9
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                3330                3318                0                   04:07               ?                   00:00:00            /bin/sh -c while true;do echo hello wmd;sleep 5;
    doneroot                3577                3330                0                   04:16               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=slee
    p /usr/bin/sleep 5
    

5.查看容器内部细节: docker inspect 容器id  以json串的形式返回容器的详细信息
    [root@wmd03 ~]# docker inspect a4ced0fdefb9
        [
            {
                "Id": "a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a",
                "Created": "2020-10-09T20:07:59.279476217Z",
                "Path": "/bin/sh",
                "Args": [
                    "-c",
                    "while true;do echo hello wmd;sleep 5;done"
                ],
                "State": {
                    "Status": "running",
                    "Running": true,
                    "Paused": false,
                    "Restarting": false,
                    "OOMKilled": false,
                    "Dead": false,
                    "Pid": 3330,
                    "ExitCode": 0,
                    "Error": "",
                    "StartedAt": "2020-10-09T20:07:59.657832567Z",
                    "FinishedAt": "0001-01-01T00:00:00Z"
                },
        。。。。
        。。。。

        
                
6.如何重新进入容器
    1.docker attach 容器id(进入交互式页面)
        6.1以交互式的形式运行centos
            [root@wmd03 ~]# docker run -it --name wmd centos
            [root@522e3c77fc0a /]# pwd
            /
            处于运行的centos容器中
        6.2:ctrl+p+q退出交互形式
        6.3查询当前正在运行的容器:发现此时已经退到宿主机了,这时如何返回到交互呢
            [root@wmd03 ~]# docker ps
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            522e3c77fc0a        centos              "/bin/bash"         26 seconds ago      Up 25 seconds                           wmd     
        6.4 docker attach 容器id
            [root@wmd03 ~]# docker attach 522e3c77fc0a
            [root@522e3c77fc0a /]# pwd
            /
            发现其进入了运行的centos容器中
    
    2.docker exec -it 容器id bashShell(进入容器中执行脚本并返回,再退出交互,最终结果是退出交互)
        [root@wmd03 ~]# docker exec -it 522e3c77fc0a pwd
        /
        [root@wmd03 ~]# 
        执行了pwd并返回给宿主机,并且最终退出宿主机
        
        也可以进入:这是进入
            [root@wmd03 ~]# docker exec -it 522e3c77fc0a /bin/bash
            [root@522e3c77fc0a /]# pwd
            /
            [root@522e3c77fc0a /]# 
            
            
7.如何将docker容器中的文件拷贝到宿主机上:docker cp 容器id:容器中文件路径 宿主机路径
    [root@wmd03 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    522e3c77fc0a        centos              "/bin/bash"         25 minutes ago      Up 25 minutes                           wmd
    [root@wmd03 ~]# docker cp 522e3c77fc0a:/tmp/yum.log /root
    将centos容器中/tmp/yum.log文件拷贝到宿主机的root目录下
       

 

posted @ 2022-05-26 20:02  努力的达子  阅读(92)  评论(0编辑  收藏  举报