使用“docker run --help”命令查看docker run命令的帮助信息。如下:
[root@localhost ~]# docker run --help Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container Options: --add-host list Add a custom host-to-IP mapping (host:ip) -a, --attach list Attach to STDIN, STDOUT or STDERR --blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) --blkio-weight-device list Block IO weight (relative device weight) (default []) --cap-add list Add Linux capabilities --cap-drop list Drop Linux capabilities ... more ...
实例1:使用-i和-t运行一个可以交互的centos镜像。
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest db421afca7de 35 hours ago 143MB centos 6.7 9f1de3c6ad53 4 months ago 191MB centos latest 9f38484d220f 4 months ago 202MB tomcat 8.0 ef6a7c98d192 10 months ago 356MB memcached 1.4.21 622897abf0a4 4 years ago 130MB [root@localhost ~]# docker run -it centos [root@6755058b1670 /]# ll total 12 -rw-r--r--. 1 root root 12082 Mar 5 17:36 anaconda-post.log lrwxrwxrwx. 1 root root 7 Mar 5 17:34 bin -> usr/bin drwxr-xr-x. 5 root root 360 Jul 21 02:00 dev drwxr-xr-x. 1 root root 66 Jul 21 02:00 etc drwxr-xr-x. 2 root root 6 Apr 11 2018 home lrwxrwxrwx. 1 root root 7 Mar 5 17:34 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Mar 5 17:34 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 Apr 11 2018 media drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt drwxr-xr-x. 2 root root 6 Apr 11 2018 opt dr-xr-xr-x. 124 root root 0 Jul 21 02:00 proc dr-xr-x---. 2 root root 114 Mar 5 17:36 root drwxr-xr-x. 11 root root 148 Mar 5 17:36 run lrwxrwxrwx. 1 root root 8 Mar 5 17:34 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Apr 11 2018 srv dr-xr-xr-x. 13 root root 0 Jul 16 13:57 sys drwxrwxrwt. 7 root root 132 Mar 5 17:36 tmp drwxr-xr-x. 13 root root 155 Mar 5 17:34 usr drwxr-xr-x. 18 root root 238 Mar 5 17:34 var
其中:
-i 表示已交互模式运行容器,通常与-t同时使用;
-t 为容器重新分配一个伪输入终端,通常与-i同时使用;
我们重新打开一个终端,使用“docker ps”查看当前正在运行的容器。如下:
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6755058b1670 centos "/bin/bash" 42 seconds ago Up 41 seconds frosty_cori
仔细观察,你会发现 docker ps 显示的 CONTAINER ID="6755058b1670",正好和运行 centos 镜像打开的终端提示符“root@6755058b1670”中的“6755058b1670”匹配。说明我们使用 docker 使用 centos 镜像运行了一个 id 为 6755058b1670 的容器,并且用户可以与运行的 centos 容器交互(root@6755058b1670)。
如果上面还是不明确,我们可以使用“--name=容器新名称”命令为容器指定新的名称。
[root@localhost ~]# docker run -it --name="mycentos" centos [root@19fdd0a78ea2 /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19fdd0a78ea2 centos "/bin/bash" 9 seconds ago Up 8 seconds mycentos
注意查看“NAMES”列,mycentos 就是我们通过 --name 指定的名称,CONTAINER ID与运行的 centos 容器主机名一致(用户名@主机名, root@19fdd0a78ea2 )。
实例2:使用“-d”将容器启动为后台运行。
[root@localhost ~]# docker run -d centos c77fe408dbd32c76ea848e01ca0f3d54bd3e6ac7ca13bb132ca06aa90afa09e1 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
注意:使用 -d 启动的容器,通过 docker ps 命令查看不到的。因为在 docker 中,后台服务必须要有一个前台服务才能运行(前台服务即使用 -it 选项启动的服务)。我们可以在启动容器时,在容器中运行shell代码,循环输出东西。此时,docker -d 启动的容器就不会自动关闭了,如下:
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done" 6d72e5c3201eed8097416646ba96d9cbb19dc2206b4c962b72c42bc2c4456efe [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d72e5c3201e centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds unruffled_archimedes
首先使用“docker ps”查看当前运行的容器,这里没有任何容器在运行。接下来执行“docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done"”命令,运行后会返回容器ID“6d72e5c3201eed8097416646ba96d9cbb19dc2206b4c962b72c42bc2c4456efe”,然后再次使用“docker ps”查看运行的容器,你会发现多了容器ID为“6d72e5c3201e”的容器。
注意:其中的“while true;do echo hello;sleep 2;done”是一段简单的shell脚本。
实例3:使用“-p”或者“-P”端口暴露容器中的端口,这里使用tomcat作为实例。
[root@localhost ~]# docker images tomcat REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 8.0 ef6a7c98d192 10 months ago 356MB [root@localhost ~]# docker run -it -p 8888:8080 tomcat:8.0 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar ...... 21-Jul-2019 02:12:36.046 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 21-Jul-2019 02:12:36.062 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"] 21-Jul-2019 02:12:36.067 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 3171 ms
上面使用“docker images tomcat”命令查看本地拥有的tomcat镜像。拥有一个 tomcat8.0 的镜像。使用“docker run -it -p 8888:8080 tomcat:8.0”命令运行 tomcat:8.0 镜像,启动成功后将会看见如下日志信息:
Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar ...... 21-Jul-2019 02:12:36.046 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 21-Jul-2019 02:12:36.062 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"] 21-Jul-2019 02:12:36.067 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 3171 ms
等等。然后在浏览器中访问:https://127.0.0.1:8888/ 你就看以看见tomcat的界面了。如下图:
如果你使用“-P”选项,则会随机分配一个端口给宿主主机。如下:
[root@localhost ~]# docker run -it -P tomcat:8.0 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar ...... 21-Jul-2019 02:16:46.194 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 3007 ms
上面使用“docker run -it -P tomcat:8.0”命令运行tomcat,然后使用“docker ps”查看端口信息,如下:
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b589ff76bc9 tomcat:8.0 "catalina.sh run" 18 seconds ago Up 17 seconds 0.0.0.0:32769->8080/tcp boring_easley
注意查看“0.0.0.0:32769”表示随机暴露的端口为“32769”。我们可以使用“https://127.0.0.1:32769”访问tomcat,如下图: