Docker化应用:Hello World

来源:互联网 发布:mac电脑绘图软件 编辑:程序博客网 时间:2024/04/29 06:47

Docker在容器中运行应用,使用单一命令:docker run。

注意:如果你使用一个远程的Docker daemon,例如BOoot2Docker,则不需要在docker之前输入sudo命令,在以下的举例命令中。

Hello World

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'Hello world
        你运行了第一个容器

        发生了什么,我来步骤的分析一下docker run指令做了什么。

        首先,我们指定docker二进制,run表示我们想要执行命令。docker run连接运行的容器。

        然后,我们制定image:Ubuntu:14.04。这是我们运行的容器的来源。Docker称它为image。在这个例子里,我们使用使用了一个Ubuntu 14.04的操作系统image。

        当你指定了一个image,Docker首先搜索image在Docker本地主机。如果不存在,则从Docker Hub上下载。

        下一步,我们告诉Docker在新的container里运行什么命令:

         /bin/echo 'Hello world'

         当我们的容器创建一个Ubuntu 14.04环境,然后执行/bin/echo命令。输出结果:

         Hello world

         Docker container在运行命令期间是active的,当Hello world输出,container也就停止了。

交互的容器

         再次运行docker run,在我们的容器中指定新的命令运行:

$ sudo docker run -t -i ubuntu:14.04 /bin/bashroot@af8bae53bdd3:/#

          我们再次指定了docker run命令,运行一个Ubuntu:14.04 image。但是,我们也输入了两个标识:-t 和-i 。-t 标识分配一个伪终端布偶这终端在我们的新容器中,-i标识允许我们去建立交互性连接,占用容器的标准输入(STDIN)。

        我们也指定一个新的命令提供容器运行:/bin/bash。这是运行Bash shell在我们的容器中。

        当我们的容器运行了,可以看到一个命令的提示:

root@af8bae53bdd3:/#

         尝试运行一些命令在我们的容器中:

root@af8bae53bdd3:/# pwd/root@af8bae53bdd3:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
           我们运行pwd来显示我们当前的目录,可以看到在/ 根目录下。我们可以看到典型linux文件系统的根目录下的目录列表。

           可以使用CTRL+D和exit命令,来退出当前容器。一天Bash shell进程结束,容器也随之结束。

Daemonized Hello world

            一个容器运行一些命令,然后退出,没有过多的用处。让我们来创建一个以daemon运行的容器,像绝大多数运行在Docker的运用那样。

           我们再次运行docker run命令:

$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

           等待什么?“Hello world”在哪儿?这看起来很熟悉,我们运行了docker run,但是这次指定了标签:-d。-d 标签告诉Docker在后台运行容器,守护(daemonize)它。

           我们也指定了相同的image:Ubuntu:14.04

           最终,我们指定一个运行命令:

/bin/sh -c "while true; do echo hello world; sleep 1; done"
           这是一个silliest daemon:一个一直输出hello world的shell脚本。

           那么为什么我们没有看见hello world?而代替的是Docker返回一个很长的字符串:

           

1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

            这个长字符串被称为container ID。这唯一标识我们工作的容器。

            注意:这个container ID是一个长比特、不好用的,后面我们会看到一个较短的ID,采取一些命名container方法,来时我们工作起来更简单。

            我们可以使用者container ID来观察我们的Hello world daemon发生了什么。

            首先,确保我们容器在运行。我们可以使用docker ps命令查看。docker ps命令查看Docker daemon知道的所有容器的信息。

$ sudo docker psCONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES1e5535038e28  ubuntu:14.04  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        insane_babbage

           我们看到了daemonized container。docker ps返回了一些有用的信息,一个缩减后的container ID:1e5535038e28.

           我们能看到之前用于构建的image:Ubuntu:14.04,命令,stauts,自动分配的名字:insane_babbage。

           注意:Docker自动的命名你启动的任何容器,稍后将讲述如何指定自己命名。

           命令已经运行,那么它是否在运行,我们请求的做的呢?我们使用命令:docker logs查看容器中发生的。我们使用Docker分配的容器名字:

$ sudo docker logs insane_babbagehello worldhello worldhello world. . .
         docker logs命令查看容器中,返回标准输出:这个例子里输出了hello world。

         我们的daemon正在工作,我们创建了首个Dockerized应用。

         现在我们已经创建容器,然后停止我们的容器,可以使用docker stop 命令:

$ sudo docker stop insane_babbageinsane_babbage

         这docker stop命令告诉Docker politely停止正在运行的容器,如果它成功执行,将返回刚刚停止的容器的名字。

         让我们来检查一下,是否已经关闭,借助指令docker ps:

$ sudo docker psCONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES

       我们的容器已经停止。  

0 0
原创粉丝点击