docker container 命令入门

作者: 谈飞 | 来源:发表于2019-09-27 22:44 被阅读0次

    上一篇 / 目录

    容器命令docker container是docker初学者最需要掌握的内容,命令包含了很多可选的参数。本文就以几个示例给读者们展示docker container命令的各种用法。

    1 下载镜像

    容器都是由镜像加载而来的,为了演示容器的启动,首先需要下载一个镜像。在Windows 的powershell 命令行窗口中输入下面的命令下载WildFly镜像:

    docker image pull jboss/wildfly
    

    WildFly是一个Java Web应用服务器,并且支持Java EE标准。

    2 交互模式

    运行容器有两种模式,一种是交互模式,另外一种是后台模式。运行下面的命令以交互模式启动wildfly容器:

    docker container run -it jboss/wildfly
    

    容器启动后,在命令行窗口中会打印出如下的日志:

    =========================================================================
    
      JBoss Bootstrap Environment
    
      JBOSS_HOME: /opt/jboss/wildfly
    
      JAVA: /usr/lib/jvm/java/bin/java
    
      JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true  --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
    
    ========================================================================
    
    14:26:21,655 INFO  [org.jboss.modules] (main) JBoss Modules version 1.9.1.Final
    …
    14:26:27,360 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 17.0.1.Final (WildFly Core 9.0.2.Final) started in 6398ms - Started 314 of 576 services (369 services are lazy, passive or on-demand)
    

    可以看到,wildfly服务器的日志信息都打印到了当前的powershell窗口中,并且docker container run命令并没有立刻结束运行,仍然在等待wildfly继续输出日志,这种运行方式就是交互模式。

    具体来说,交互有两层含义:一是容器可以接收用户在powershell命令行中输入的字符,这是通过-i参数来指定的;二是容器可以把产生的日志输出到当前的powershell命令行中,这是通过-t参数来指定的。当然,上面的例子中同时指定了-i-t参数,你可以分别输入这两个参数,或者像例子中一样,使用-it把他们组合到一起。

    使用 Ctrl + C可以停止这个容器。

    这里笔者再举一个交互模式的例子。运行下面的命令可以以交互模式启动openjdk:12容器:

    docker container run -it openjdk:12
    

    容器启动后,在poweshell窗口中会输出下面的日志:

    Sep 20, 2019 2:41:10 PM java.util.prefs.FileSystemPreferences$1 run
    INFO: Created user preferences directory.
    |  Welcome to JShell -- Version 12.0.2
    |  For an introduction type: /help intro
    
    jshell>
    

    此时光标会停在jshell>的右边,等待用户输入。我们通过键盘输入的字符串都会发送给openjdk:12容器中的jshell程序,并且jshell程序的输出也会显示在当前窗口中。例如输入下面的内容:

    jshell> int a = 1, b = 2;
    a ==> 1
    b ==> 2
    
    jshell> a + b
    $3 ==> 3
    
    jshell>
    
    

    使用Ctrl + D可以停止这个容器。注意Ctrl + C不能停止openjdk:12容器。针对不同的容器,退出命令会有差别。

    3 Detached模式(后台模式)

    除了交互模式之外,启动容器还有另外一种模式,那就是Detached模式,意思就是在后台运行容器。使用-d参数指定后台模式。下面的命令以后台模式启动wildfly容器:

    docker container run -d jboss/wildfly
    

    容器启动后,命令行窗口会显示容器的ID,并且docker conainer run命令会立刻结束,如下图所示:

    后台模式

    使用docker container ls命令可以查看所有正在运行中的容器:

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    ce5c1ffa53a1        jboss/wildfly       "/opt/jboss/wildfly/…"   2 minutes ago       Up 2 minutes        8080/tcp            angry_shannon
    

    在上面的列表中,CONTAINER ID列是唯一标识容器的ID号,NAMES列则是唯一标识容器的一个名称,这个名称是由docker随机生成的。使用docker container logs ce5c1ffa53a1 或者 docker container logs angry_shannon 可以显示这个容器的日志信息。注意,凡是需要使用容器ID的命令,其ID都可以替换为容器的名称(Name),ID或者Name都可以唯一标识一个容器。

    使用下面的命令停止这个后台运行的容器:

    docker container stop CONTAINER-ID
    

    这里CONTAINER-ID需要替换成容器的ID,例如 docker container stop ce5c1ffa53a1

    4 自定义Name

    启动容器时,也可以使用--name参数给容器自定义一个名称。下面的命令给新启动的wildfly容器设置一个自定义名称mywildfly:

    docker container run -d --name mywildfly jboss/wildfly
    

    运行docker container ls查看正在运行的容器:

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    e6c751511bbc        jboss/wildfly       "/opt/jboss/wildfly/…"   9 seconds ago       Up 8 seconds        8080/tcp            mywildfly
    

    可以看到,NAMES列显示的名称是我们自定义的mywildfly,这样就可以使用该名称来标识这个容器了。例如显示容器输出的日志信息:

    docker container logs mywildfly
    

    运行下面的命令停止容器:

    docker container stop mywildfly
    

    5 对外映射TCP端口

    如果使用之前的命令启动wildfly容器,那么这个容器并不能通过TCP端口来访问,这是因为容器并没有对宿主机暴露任何端口。为此,需要使用-P参数把容器中监听的端口映射到宿主机的一个随机端口上。我们在powershell中运行下面的命令再次启动wildfly容器:

    docker container run -d -P jboss/wildfly
    

    接下来运行docker container ls查看一下刚启动的容器:

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                     NAMES
    c6a9b353c0d9        jboss/wildfly       "/opt/jboss/wildfly/…"   About a minute ago   Up About a minute   0.0.0.0:32768->8080/tcp   gifted_grothendieck
    

    从PORTS列中可以看到这个容器的端口映射关系。0.0.0.0:32768->8080/tcp 表示宿主机的端口32768与容器的tcp端口8080建立了一对一的映射。此时,我们可以在浏览器中访问网址 http://localhost:32768 来加载wildfly容器中的服务器主页:

    wildfly容器主页

    最后运行下面的命令停止这个容器。

    docker container stop c6a9b353c0d9
    

    6 指定映射的端口号

    上一节我们使用大写的-P参数随机分配了一个映射的端口。其实我们也可以使用小写的-p参数来显示指定端口。-p 参数的格式是 -p HOST-PORT:CONTAINER-PORT。下面的命令将把宿主机的38888端口映射到容器的8080端口:

    docker container run -d --name wildfly-custom-port -p 38888:8080 jboss/wildfly
    

    容器启动后,可以在浏览器中访问http://localhost:38888 来打开wildfly的服务器主页。

    7 停止容器

    使用docker container stop命令通过容器的ID或者容器的名称来停止一个容器:

    docker container stop CONTAINER-ID
    docker container stop CONTAINER-NAME
    

    例如,我们在前一步启动了一个wildfly容器,运行下面的命令可以将其停止:

    docker container stop wildfly-custom-port
    

    想停止多个容器,可以用空格来分隔各个容器的ID或Name,例如:

    docker container stop mywildfly wildfly-custom-port
    

    如果想要停止所有正在运行的容器,可以运行下面的命令:

    docker container stop $(docker container ls -q)
    

    $(docker container ls -q) 的作用是先执行docker contianer ls -q找到所有正在运行的容器,-q参数表示仅打印出容器的ID。然后把这些ID作为参数传递给docker container stop命令。

    8 启动容器

    使用docker container start来启动一个或多个处于停止状态的容器。

    docker container start CONTAINER-ID
    docker container start CONTAINER-NAME
    

    例如,运行下面的命令启动mywildfly和wildfly-custom-port容器:

    docker container start mywildfly wildfly-custom-port
    

    docker container start 默认是以后台模式启动容器。通过参数-ai可以开启交互模式。例如,我们先停止mywildfly容器:

    docker container stop mywildfly
    

    然后以交互模式启动mywildfly:

    docker container start -ai mywildfly
    

    你会看到powershell窗口打印出容器的日志信息,并且docker container start命令不会立刻返回。

    交互模式

    使用Ctrl + C退出容器。

    9 查看端口映射

    docker container port命令可以查看某个容器的端口映射。

    docker container port CONTAINER-ID
    docker container port CONTAINER-NAME
    

    例如,输入下面的命令查看wildfly-custom-port容器的端口映射:

    docker container port wildfly-custom-port
    

    你会看到下面的输出日志:

    8080/tcp -> 0.0.0.0:38888
    

    这表明容器的tcp端口8080映射到宿主机的38888端口。注意,这和我们使用docker container ls命令看到的端口映射正好相反。docker container ls命令会把宿主机的端口放在左边,而docker container port命令会把宿主机的端口放在右边。不过意思都是一样的,读者们应该不难理解。

    10 删除容器

    对于正在运行的容器,最好不要使用-f参数强行删除,你可以先将其停止,然后再删除。这是因为某些容器在停止过程中还需要进行一些状态保存的操作,例如把内存中的一些数据写回到硬盘中。

    使用docker container rm命令删除容器。

    docker container rm CONTAINER-ID
    docker container rm CONTAINER-NAME
    

    例如,运行下面的命令停止mywildfly和wildfly-custom-port容器。然后将其删除

    docker container stop mywildfly wildfly-custom-port
    docker container rm mywildfly wildfly-custom-port
    

    使用docker container prune命令可以删除所有已经停止的容器。

    prune命令

    11 总结

    读者朋友们已经学会了docker container命令最常见的用法。如果需要查看完整的文档,可以输入命令:

    docker container --help
    

    下面列出本篇指南用到的所有命令,供读者们参考:

    # 下载jboss/wildfly镜像
    docker image pull jboss/wildfly
    # 以交互模式启动一个新的wildfly容器
    docker container run -it jboss/wildfly
    # 以交互模式启动一个新的openjdk容器
    docker container run -it openjdk:12
    # 后台模式
    docker container run -d jboss/wildfly
    # 查看正在运行的容器
    docker container ls
    # 给容器设置自定义名称
    docker container run -d --name mywildfly jboss/wildfly
    # 查看容器的日志
    docker container logs mywildfly
    # 对外映射到随机端口
    docker container run -d -P jboss/wildfly
    # 对外映射到指定端口
    docker container run -d --name wildfly-custom-port -p 38888:8080 jboss/wildfly
    # 停止容器
    docker container stop CONTAINER-ID
    docker container stop CONTAINER-NAME
    # 停止多个容器
    docker container stop mywildfly wildfly-custom-port
    # 停止所有的容器
    docker container stop $(docker container ls -q)
    # 启动容器
    docker container start CONTAINER-ID
    docker container start CONTAINER-NAME
    # 启动多个容器
    docker container start mywildfly wildfly-custom-port
    # 交互模式启动容器
    docker container start -ai mywildfly
    # 查看端口映射
    docker container port CONTAINER-ID
    docker container port CONTAINER-NAME
    # 停止并删除多个容器
    docker container stop mywildfly wildfly-custom-port
    docker container rm mywildfly wildfly-custom-port
    # 删除所有已经停止的容器
    docker container prune
    

    上一篇 / 目录

    相关文章

      网友评论

        本文标题:docker container 命令入门

        本文链接:https://www.haomeiwen.com/subject/bieeuctx.html