Docker(2)----命令的学习

1. 帮助命令

docker version  	#显示docker的版本信息
docker info    		#显示更加详细的系统信息,比如镜像和容器的数量,插件信息等等
docker 命令 --help   #帮助命令

docker的帮助文档https://docs.docker.com/reference/

2. 镜像命令

1. docker images

  1. 作用:用于查看本地的镜像有哪些

    # 查看镜像,即查看本机的镜像有哪些
    docker images 
    
    root@ubuntu:/home/mylinux# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        11 months ago       13.3kB
    
    # 各个参数代表的意思
    REPOSITORY  #镜像的仓库源
    TAG			#镜像的标签
    IMAGE ID	#镜像的id
    CREATED		#镜像的创建时间
    SIZE		#镜像的大小
    
    # 我们通过help命令查看 更加详细的image命令
    docker images --help
    
    # 可选项
     Options:
      -a, --all             #列出所有的镜像
      -q, --quiet           #只显示镜像的id (用于删除的时候,后面会演示)
    
    

2. docker search 镜像名

  1. 作用:用于搜索docker hub上的镜像有哪些版本,为了接下来的下载。

  2. docker hub是docker官网的镜像仓库,你需要的镜像可以从这里下载。

  3. 由于是官网指定的,因此,你使用docker search 搜索出来的信息,其实可以直接从docker hub上查询,是一样的。

    # 查询镜像名,搜索镜像名
    docker search tomcat 
    
    #可选项 通过搜索来过滤
    --filter=stars=3000  #搜索出来的镜像就是stars大于3000的
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3heTsRGg-1608542229261)(C:\Users\jin\AppData\Roaming\Typora\typora-user-images\1606972013805.png)]

  4. 我们还可以去docker hub上去查看tomcat的镜像,官网:https://hub.docker.com/

  5. 我们直接搜索tomcat ,则出现下面的图片。
    在这里插入图片描述

  6. 之后点击tags,选择你要下载的版本。后面可以直接复制下载的命令。
    在这里插入图片描述

3. docker pull 镜像名字:tag

  1. 作用:拉取你想要的镜像,即下载镜像。

  2. tag的作用是 区别不同的版本,比如tomcat9 有版本1,版本2,跟latest(最新的意思)
    不指定版本,则默认下载最新版本的。

    # 下载镜像
    docker pull 镜像名字:tag
    
    # 不加tag 下载
    root@ubuntu:/home/mylinux# docker pull tomcat
    Using default tag: latest    #不加tag 默认下载最新版
    latest: Pulling from library/tomcat 
    756975cb9c7e: Pull complete   #分层下载,dockerimage的核心 联合文件系统(之后再说)
    d77915b4e630: Pull complete 
    5f37a0a41b6b: Pull complete 
    96b2c1e36db5: Pull complete 
    27a2d52b526e: Pull complete 
    a867dba77389: Pull complete 
    0939c055fb79: Pull complete 
    0b0694ce0ae2: Pull complete 
    81a5f8099e05: Pull complete 
    c3d7917d545e: Pull complete 
    Digest: sha256:a319b10d8729817c7ce0bcc2343a6f97711c7870395019340d96b6aafd6ccbea #签名
    Status: Downloaded newer image for tomcat:latest
    docker.io/library/tomcat:latest
    
    #然后就可以使用docker images 来查看 自己下载好的镜像
    
    # 加Tag 下载
    root@ubuntu:/home/mylinux# docker pull tomcat:9-jdk8-adoptopenjdk-openj9
    9-jdk8-adoptopenjdk-openj9: Pulling from library/tomcat
    da7391352a9b: Pull complete 
    14428a6d4bcd: Pull complete 
    2c2d948710f2: Pull complete 
    7c07f69a5e5c: Pull complete 
    5f5a50382e0f: Pull complete 
    83b87ea46150: Pull complete 
    cd1bfe7629bf: Pull complete 
    2dcb672f941a: Pull complete 
    18b91b51d128: Pull complete 
    Digest: sha256:c69315e589cf03cdd8a5177f3a09418c4451401994e97be7285aba41339ad7bf
    Status: Downloaded newer image for tomcat:9-jdk8-adoptopenjdk-openj9
    docker.io/library/tomcat:9-jdk8-adoptopenjdk-openj9
    
    

3. docker rmi id

  1. 当我们下载错了镜像,或者不想要某个镜像了,则可以使用docker rmi [对应的id] 进行删除

    docker rmi id  					#删除指定的镜像
    docker rmi -f id,id,id 			#删除多个镜像
    # 由于 docker images -aq 中 -a是显示所有镜像信息,-q是指显示镜像id信息
    # 一结合就是,显示所有镜像的id 信息,之后就可以批量删除了
    docker rmi ${docker images -aq} #删除全部的镜像
    
  2. 例子

    root@ubuntu:/home/mylinux# docker images
    REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
    tomcat                              latest              feba8d001e3f        3 days ago          649MB
    
    root@ubuntu:/home/mylinux# docker rmi feba8d001e3f
    Untagged: tomcat:latest
    Untagged: tomcat@sha256:57dae7dfb9b62a413cde65334c8a18893795cac70afc3be589c8336d8244655d
    Deleted: sha256:feba8d001e3f56558228ed129ce9b381936393c093129593d270140e5717d7d0
    Deleted: sha256:b50c5dac8a23b5e12785367e9a424fb107228980327cf0805c17514d14978b36
    Deleted: sha256:ce9fb501c029639580dbad9716ae9a8bcc71b19089829a587ee4f8f1ceebfa65
    Deleted: sha256:e5b7a89ed43e4f99b48f55a885abe442945d2e754a935cbaea3c1c74ffe6750d
    Deleted: sha256:36e7986244088b22acd453ae20debb710015a64712badf92ea34147fa151fc97
    Deleted: sha256:b374669c52b187fdb673ded5587d718dd435ec5516a486a6550d57187fe948cb
    Deleted: sha256:d452b70fd092c49d82206e68beee70e8adc8515a4ddd9519caeebceac08e296b
    Deleted: sha256:27b72082eb6718a3e506ca1b77ea96b2d403c52b9b2918fe3aea70bb9180e413
    Deleted: sha256:d821f0b05255e659e8513e1bb532c7bbbdce46d54860cffa706ca1e3e81f874f
    Deleted: sha256:d44584abca138ee35729df0e8d292e971777bf196f084cae5fc33bb4c458b4dc
    Deleted: sha256:f0e10b20de190c7cf4ea7ef410e7229d64facdc5d94514a13aa9b58d36fca647
    

3.容器命令(重点)

0. 前言

  1. 有了镜像才能创建容器,下载一个centos镜像,跟tomcat镜像来测试学习。

  2. 先把容器的相关命令全部都学习完后,我们再用这两个镜像学习,先让他们两个下载先。

    # 先下载个 centos的镜像, 没有指定tag,默认下载最新的
    root@ubuntu:/home/mylinux# docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    7a0437f04f83: Pull complete 
    Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
    Status: Downloaded newer image for centos:latest
    docker.io/library/centos:latest
    root@ubuntu:/home/mylinux# docker images
    REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
    tomcat                              latest              feba8d001e3f        3 days ago          649MB
    centos                              latest              300e315adb2f        13 days ago         209MB
    

1. 新建容器并启动

 # 新建容器并启动
 docker run [可选项] image 
 # 可选项
 --name 给容器起一个名字,tomcat01 tomcat02
 -d 以后台方式运行
 -it 使用交互方式运行,进入容器查看内容
 -p 指定容器的端口 -p 2000:8080
 -P 随机指定端口

2. 列出所有的运行的命令

# 列出当前正在运行的容器
docker ps 
# 列出所有运行过的容器
docker ps -a 
# 显示出最近创建的容器,n=2,则表示显示出最近创建的2个容器
docker ps -n=数字 
# 只显示正在运行容器的id号
docker ps -q 
# 列出所有容器的id,-a是指 所有运行过的容器,-q 是指 显示id
# 一结合就是:列出所有容器的id
docker ps -aq

3. 删除容器

# 删除容器
# 不能删除正在运行的容器,如果要强行 删除 rm -f
docker rm 容器id  
# 批量删除容器
docker rm  $(docker ps -aq)
# 批量删除容器(包括运行的容器)
docker rm -f $(docker ps -aq)

4. 实战(用docker 安装tomcat)

  1. 前提,已经拉取好 centos 与tomcat的镜像了。

  2. 运行tomcat。

    # docker run --name=MyTomcat tomcat
    # docker run 固定命令
    # --name 起了个别名 叫MyTomcat
    # tomcat 代表你要运行的镜像,正常来说是 image:tag,如果不写tag 则默认运行latest
    # 或者你的镜像中,只有一个tomcat镜像,则可以不写
    root@ubuntu:/home/mylinux# docker run --name=MyTomcat tomcat
    
  3. 从下面的图片可以看出,tomcat的运行日志直接输出到终端上,而且直接占用了我这个终端,此效果不是很好,因此,我们需要让他在后台执行,此时需要参数 -d。
    在这里插入图片描述

  4. 由于上面的运行方式不是我想要的,因此ctrl+c 中止它,并使用docker run -d --name=MyTomcat2 tomcat 再次运行。
    在这里插入图片描述

  5. 从上面的图片可以看出,有个ports 8080哦,那我是不是可以直接再浏览器输入 localhost:8080,看见熟悉的欢迎界面了,答案是否定的,因为这个是容器,容器你可以想象为是一个小型的虚拟机,它肯定有它的网络,这个8080端口号是容器里面的端口后,又不是你宿主机的端口号,怎么可能可以访问。但是它的网络,外界无法访问,学习到docker网络的时候会明白,因此,我们需要映射端口号,比如让本机linux的8080端口号对应 tomcat容器的8080端口号,这样子当外界访问本机的8080,相当于访问tomcat容器的8080端口号。下面用图来解释:
    在这里插入图片描述

  6. 根据上面分析,我们就再次修改,我们的启动命令。

    # -p 本机端口号:容器端口号
    docker run -p=8080:8080 -d --name=MyTomcat3 tomcat 
    # 我们会发现第三次启动的tomcat 的ports 中,出现了0.0.0.0:8080-->8080,即映射成功
    root@ubuntu:/home/mylinux# docker run -p=8080:8080 -d --name=MyTomcat3 tomcat 
    28f49470f5ff9e62c1b99cb639377650d48df2b24d65c0a71e31c337019be5e5
    root@ubuntu:/home/mylinux# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    28f49470f5ff        tomcat              "catalina.sh run"   6 seconds ago       Up 4 seconds        0.0.0.0:8080->8080/tcp   MyTomcat3
    a1bbf5cf5fc4        tomcat              "catalina.sh run"   14 minutes ago      Up 14 minutes       8080/tcp                 MyTomcat2
    
  7. 之后我们在浏览器中运行http://localhost:8080/ 发现还是有错误,怎么会这样子,因此,我们需要去容器查看信息。

    # 进入容器内部
    # docker exec -it 固定写法,-it 使用交互模式
    # id 是 容器运行的id
    # container-name 你给容器起的别名
    # bash linux命令行模式
    docker exec -it id/container-name bash
    
    # 结果为:
    root@ubuntu:/home/mylinux# docker exec -it MyTomcat3 bash 
    # 看前面,跟上面不一样,这一串数字,其实是你容器的前面的id号码。
    root@28f49470f5ff:/usr/local/tomcat# 
    
    # 之后我们可以再里面进行查看
    # 后面我们发现 在tomcat中,webapps里面居然没有东西,怪不得错误,
    # 我们还发现 平时webapps里面的东西,居然都在webapps.dist里面,
    # 因此,我们把webapps.dist的内容copy到webapps下
    cd  webapps.dist
    cp -r ./ ../webapps
    # 之后就可以看见熟悉的欢迎页面了。
    

    在这里插入图片描述

  8. 当你进入容器终端之后,你还想出来本机的终端,请使用exit即可。

  9. 我们练习一下其他命令(结果自己查看自己的,就不截图了)

    # 查看容器情况
    docker ps
    
    root@ubuntu:/home/mylinux# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    28f49470f5ff        tomcat              "catalina.sh run"   13 minutes ago      Up 13 minutes       0.0.0.0:8080->8080/tcp   MyTomcat3
    a1bbf5cf5fc4        tomcat              "catalina.sh run"   27 minutes ago      Up 27 minutes       8080/tcp                 MyTomcat2
    
    # 启动停止容器
    docker start id
    docker restart id
    docker stop id
    docker kill id
    
    # 输出容器
    docker rm  a1bbf5cf5fc4
    
    # 停止第二个tomcat
    root@ubuntu:/home/mylinux# docker stop a1bbf5cf5fc4
    doa1bbf5cf5fc4
    # 输出第二个tomcat
    root@ubuntu:/home/mylinux# docker rm a1bbf5cf5fc4
    a1bbf5cf5fc4
    # 查看剩下tomcat
    root@ubuntu:/home/mylinux# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    28f49470f5ff        tomcat              "catalina.sh run"   14 minutes ago      Up 14 minutes       0.0.0.0:8080->8080/tcp   MyTomcat3
    
  10. 总结:

    1. 最终执行tomcat 容器的命令 docker run -p 8080:8080 -d --name=xxx tomcat
    2. 进入正在运行的容器:docker exec -it id/contain-name bash

4. 其他命令

1. 启动容器命令的补充

# 1. 刚刚我们启动tomcat的时候,使用的命令是
docker run -p 8080:8080 -d -name=xxx tomcat

# 似乎没有问题,那么我们使用类似上面命令启动一个centos
# 当然 端口号不需要则不写,我也不写名字,docker会帮我生成一个随机名字
docker run -d centos 
# 似乎很正常的命令,-d 后台执行,当你敲下命令 回车,查看 docker ps
root@ubuntu:/home/mylinux# docker run -d centos
2be5ce5ee4a257cc62f4403b995bb680440fe9355e474b5fbd5c2c1e860059c6
# 居然只有tomcat的容器运行,没有centos,之后再次使用docker ps -a查看
root@ubuntu:/home/mylinux# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
28f49470f5ff        tomcat              "catalina.sh run"   28 minutes ago      Up 28 minutes       0.0.0.0:8080->8080/tcp   MyTomcat3
# 我们惊奇发现有centos了,那么就是它被停止了?我没有停止它啊
# 对这个就是要补充的内容。
# docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# 容器启动后,发现前台没有提供服务,就会立刻停止,就是没有程序了
# tomcat 启动后最终会有个线程监听8080端口是否有信息,因此不会被停止
# 所以针对这种容器,我们需要加上 -it的参数,表示 交互模式
root@ubuntu:/home/mylinux# docker ps -a
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS                      PORTS                    NAMES
2be5ce5ee4a2        centos                                    "/bin/bash"              13 seconds ago      Exited (0) 12 seconds ago                            inspiring_vaughan
28f49470f5ff        tomcat                                    "catalina.sh run"        29 minutes ago      Up 28 minutes               0.0.0.0:8080->8080/tcp   MyTomcat3

# 输入命令,当然你可以先把刚刚的centos容器删除了,防止干扰你的视野
# docker rm -f centos-id/centos-container-name
# docker run -it -d centos
root@ubuntu:/home/mylinux# docker rm -f inspiring_vaughan      
inspiring_vaughan
root@ubuntu:/home/mylinux# docker run -it -d centos
a5b4a0d0394007642abb400c57bdfa80d54607678f1285f26940f671c90fcb66
# 已经运行了
root@ubuntu:/home/mylinux# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
a5b4a0d03940        centos              "/bin/bash"         2 seconds ago       Up 1 second                                  keen_feistel
28f49470f5ff        tomcat              "catalina.sh run"   34 minutes ago      Up 34 minutes       0.0.0.0:8080->8080/tcp   MyTomcat3


2. 日志查看

# 命令格式
docker logs -f id
# 可选项
# -tail 10 显示n条信息
docker logs -f -tail n id

# 例子 MyTomcat3
root@ubuntu:/home/mylinux# docker logs -f --tail 10 28f49470f5ff
21-Dec-2020 10:36:24.253 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
21-Dec-2020 10:36:24.942 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [690] ms
21-Dec-2020 10:36:24.946 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
21-Dec-2020 10:36:25.027 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [81] ms
21-Dec-2020 10:36:25.028 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
21-Dec-2020 10:36:25.092 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [64] ms
21-Dec-2020 10:36:25.094 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs]
21-Dec-2020 10:36:25.159 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [65] ms
21-Dec-2020 10:36:25.160 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
21-Dec-2020 10:36:25.213 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [53] ms

3. 查看容器内部中进程信息

# docker top id 
root@ubuntu:/home/mylinux# docker top 28f49470f5ff                                                                                                                     UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                15548               15521               0                   18:27               ?                   00:00:19            /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

4. 查看容器的元数据

  1. 元数据:就是一些配置信息,乱七八糟的,后面有需要可以去看。

    # 查看镜像的元数据
    # 信息量很大,就不截图了
    docker inspect id
    
    
    

5. 从容器内部拷贝文件到主机上

# 从容器内拷贝文件到主机上
docker cp id:内路径  目的主机路径
# 例子
docker cp abf9d9160caf:/test.java  /home

这个拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现,自动同步
  1. 例子:在刚刚的tomcat容器中,我们有个webapp目录,我们将它copy到本机的home目录下中。
    在这里插入图片描述

  2. 进入webapps中查看。

    root@ubuntu:/home/webapps# ls
    docs  examples  host-manager  manager  ROOT
    

其他相关文章学习

Docker(1)----初步认识

Docker(2)----命令的学习

Docker(3)----对镜像进一步了解与容器数据卷

Dokcer(4)----网络

Docker(5)----DockerFile的使用

Docker(6)----Docker-compose的使用

Docker(7)----CI/CD的使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值