首页 » 翻译 » Docker » 正文

Docker 入门教程02 Hello world

原文地址:
https://docs.docker.com/userguide/dockerizing/

Docker允许我们在容器内执行一些应用(比如说apache),如果想在容器内启动一个应用,只需要执行一个简单的命令:

docker run

例如:
docker run ubuntu:14.04 /bin/echo ‘hello world’

输出如下:hello world

好吧,你已经成功的启动了一次你的第一个容器(container)
然后,我们看一下刚刚都发生了什么

首先,我们确定了我们要执行的命令是 docker run (因为docker还有其他命令,你不会天真的认为只有一个run吧)

接下来,我们确定了一个镜像(image)ubuntu:14.04 ,就是说,我们的容器是基于ubuntu:14.04 启动的,我们称之为操作系统镜像

当我们指定了一个景象之后,Docker会优先查找本机是否有该景象,如果没有,Docker 会从Docker Hub 去下载对应的镜像

再然后,我们指定了我们要在容器中执行的命令/bin/echo ‘hello world’

容器被成功加载以后,执行/bin/echo ‘hello world’命令,然后我们就看到了’hello world‘

可能你要问执行完成命令后,我们刚刚创建的容器怎么样了?其实,这个容器只是在命令执行过程中存活,在你命令结束的一瞬间,容器也被停止了

(有人会说,我擦这有屁用,我们想让容器一直执行,好吧,继续翻译)

我们换一个命令

docker run -t -i ubuntu:14.04 /bin/bash

执行完成之后,我们发现我们得到了一个提示符

root@25b7822fb564:/#

这个命令和上一个命令唯一的不同就是我们增加了两个参数,-t ,-i,当然,我们还指定了一个新的命令/bin/bash,-t ,-i 的作用是提供给我们一个交互式的方式来启动一个容器

这个时候我们可以尝试一些其他的命令

pwd

ls

这个我们就可以看到我们现在处在/目录下,然后也可以看到根目录下的所有文件,如果我们想退出,我们可以输入 exit 或者直接Ctrl +D

好了,虽然我们现在可以和容器进行交互了,但是貌似没什么作用

好吧,那我们执行如下命令:

docker run -d ubuntu:14.04 /bin/sh -c “while true; do echo hello world; sleep 1; done”

然后我们得到如下结果:


[root@fedora ~]# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
f01cf49bea74bd9985e12e01cf768dd3716847a0d298db055274738a6b3bd6e8
[root@fedora ~]#

这个时候你可能会怀疑,输出跑的到哪里去了?我们不应该能看到 满屏幕的hello world吗?其实,我们仔细看一下会发现我们使用了一个参数-d ,-d的左右就是让我们的容器后台运行

我们指定了镜像:ubuntu:14.04
我们指定了命令:/bin/sh -c “while true; do echo hello world; sleep 1; done” 这是一个无线输出Hello world的循环

但是我们没有得到Hello world,只是得到了一个字符串f01cf49bea74bd9985e12e01cf768dd3716847a0d298db055274738a6b3bd6e8

其实这个字符串是我们的容器的id,用了区分容器和容器,我们可以通过这个容器Id来看一下我们的hello world 到底发生了什么

首先,我们通过一个命令来看一下(因为在后台执行么,我们咋知道跑了几个容器)

docker ps


[root@fedora ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f01cf49bea74 ubuntu:14.04 "/bin/sh -c 'while t 5 minutes ago Up 5 minutes boring_kowalevski
[root@fedora ~]#

docker ps会输出一下信息如上图,镜像,命令,创建时间,名称,Id

这个时候我们会得到一个短Id,其实作用是一样的,都是为了区分

我们可以通过如下命令来查看日志

docker logs boring_kowalevski

这个时候我们就可以看到好多Hello world了

好了,这个时候我们需要做的下一步可能就是停止这个容器了

docker stop boring_kowalevski

停止之后我们再使用docker ps查看一下

好了,没有正在运行的容器了

欢迎转载,转载请注明出处:http://www.503error.com/

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)