开发者社区> shev> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Docker基础之五: 使用Docker容器

简介: 使用Docker容器 这一节我们将从运行一个简单的Hello world入手,来讲解如何使用容器。 1 运行Hello World root@shev:~# docker run ubuntu:14.04 echo hello-world hello-world root@shev:~#
+关注继续查看

使用Docker容器

对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。

这一节我们将从运行一个简单的Hello world入手,来讲解如何使用容器。

1 运行Hello World

root@shev:~# docker run ubuntu:14.04 echo hello-world
hello-world
root@shev:~# docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                     PORTS               NAMES
0cef7fa7468d        ubuntu:14.04                   "echo hello-world"       3 seconds ago       Exited (0) 2 seconds ago                       condescending_visvesvaraya

剖析:

  • 本条命令启动ubuntu:14.04版本的镜像,并在其中运行打印hello world的命令;
  • 由于我们的命令是一个简单的语句,并不会持续很长时间,当命令执行完毕时,容器就退出了
  • 因此,我们通过docker ps –a可以看到容器的状态是停止状态

2 运行一个可交互的容器

之前的例子里面,容器在运行完指令后就自动退出了,那么我们可不可以运行一个可交互的容器呢?

root@shev:~# docker run -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
Digest: sha256:f91f9bab1fe6d0db0bfecc751d127a29d36e85483b1c68e69a246cf1df9b4251
Status: Downloaded newer image for ubuntu:latest
root@558531c2b215:/# ll
total 72
drwxr-xr-x  32 root root 4096 Dec  2 09:16 ./
drwxr-xr-x  32 root root 4096 Dec  2 09:16 ../
-rwxr-xr-x   1 root root    0 Dec  2 09:16 .dockerenv*
-rwxr-xr-x   1 root root    0 Dec  2 09:16 .dockerinit*
drwxr-xr-x   2 root root 4096 Oct 28 04:34 bin/
drwxr-xr-x   2 root root 4096 Apr 10  2014 boot/
drwxr-xr-x   5 root root  380 Dec  2 09:16 dev/
drwxr-xr-x  64 root root 4096 Dec  2 09:16 etc/
drwxr-xr-x   2 root root 4096 Apr 10  2014 home/
drwxr-xr-x  12 root root 4096 Oct 28 04:34 lib/
drwxr-xr-x   2 root root 4096 Oct 28 04:33 lib64/
drwxr-xr-x   2 root root 4096 Oct 28 04:33 media/
drwxr-xr-x   2 root root 4096 Apr 10  2014 mnt/
drwxr-xr-x   2 root root 4096 Oct 28 04:33 opt/
dr-xr-xr-x 160 root root    0 Dec  2 09:16 proc/
drwx------   2 root root 4096 Oct 28 04:34 root/
drwxr-xr-x   7 root root 4096 Oct 28 04:34 run/
drwxr-xr-x   2 root root 4096 Nov 10 00:35 sbin/
drwxr-xr-x   2 root root 4096 Oct 28 04:33 srv/
dr-xr-xr-x  13 root root    0 Dec  2 09:16 sys/
drwxrwxrwt   2 root root 4096 Oct 28 04:34 tmp/
drwxr-xr-x  11 root root 4096 Nov 10 00:35 usr/
drwxr-xr-x  12 root root 4096 Nov 10 00:35 var/
root@558531c2b215:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:648 (648.0 B)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

剖析:

  • 本例中,我们在ubuntu:latest镜像中,执行/bin/bash,由于bash本身是一个包含了交互的终端,因此我们可以长时间的运行容器;
  • 但是,我们必须指定-it,同shell的stdiin和stdout绑定起来
  • 进入容器后,我们实际进入了一个shell终端,里面不仅可以访问文件将,还有一个虚拟网卡和IP。这是不是跟一个linux主机是一样的呢?

3 在容器中运行一个后台守护进程

所谓后台守护进程,就是运行在后台,并不会阻塞当前的进程。

在后台运行一个脚本,每隔1秒打印一句hello world:

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

查看后台的运行日志:

root@shev:~# docker logs ba50
hello world
hello world
hello world
hello world
hello world
hello world
hello world

查看当前正在运行的容器列表:

root@shev:~# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS               NAMES
ba50b5023bb1        ubuntu:14.04                   "/bin/sh -c 'while tr"   2 minutes ago       Up 2 minutes                            ecstatic_bell
e221abf45a0b        ghostcloud.cn:5000/gcali:1.2   "/usr/local/ghostclou"   49 minutes ago      Up 49 minutes                           gcsagent

停止指定的容器:

root@shev:~# docker stop ba50
ba50

再次查看正在运行的容器:

root@shev:~# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS               NAMES
e221abf45a0b        ghostcloud.cn:5000/gcali:1.2   "/usr/local/ghostclou"   50 minutes ago      Up 50 minutes                           gcsagent

剖析:

  • 本例中,我们通过-d属性,让容器运行在后台,我们并不进入容器内部
  • 执行完毕后,返回了一个id,该id是容器的id。上面显示的是容器的完整id,但是我们实际操作的时候,一般可以只输入前面几位即可,docker会自动进行匹配
  • 我们通过docker logs 来查看容器运行的情况,也就是我们循环打印的日志
  • 由于该容器是长时间运行的,所以我们可以通过docker ps,查看该容器
  • docker stop则是停止该容器,停止后,我们就看不到该容器了

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Docker容器实战(四) - 纷纷扰扰,终归尘土(中)
Docker容器实战(四) - 纷纷扰扰,终归尘土(中)
62 0
Docker容器实战(四) - 纷纷扰扰,终归尘土(上)
Docker容器实战(四) - 纷纷扰扰,终归尘土(上)
55 0
Docker容器实战(四) - 纷纷扰扰,终归尘土(下)
Docker容器实战(四) - 纷纷扰扰,终归尘土(下)
51 0
Docker 容器实战 (四):纷纷扰扰, 终归尘土
伴随着 Docker 公司的容器技术生态在云计算市场中站稳了脚跟,围绕着 Docker 项目进行的各个层次的集成与创新产品,也如雨后春笋般出现在这个新兴市场当中。而 Docker 公司,不失时机地发布了 Docker Compose、Swarm 和 Machine “三件套”,在重定义 PaaS 走出了最关键的一步。
1663 0
Docker容器实战(四) - 纷纷扰扰,终归尘土
Docker公司为什么在Docker项目已经取得巨大成功之后,执意走回已经让无数先驱折戟的PaaS路呢? 实际上,Docker项目一直伴随着公司管理层和股东们的阵阵担忧。他们心里明白,虽然Docker项目备受追捧,但用户们最终要部署的,还是他们的网站、服务、数据库,甚至是云计算业务。
1513 0
Docker容器实战(二) -"鲸鱼"公司粉墨登场
一天天的,PaaS深入人心,Cloud Foundry为首的传统PaaS,开始蓄力基础设施领域的 平台化和PaaS化,于是发现了PaaS中的问题 1 如何给应用打包 Cloud Foundry/OpenShift/Clodify都没给出答案,走向碎片化歪路 此时,名不见经传的PaaS创业公司do...
1377 0
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
318 0
Docker容器实战(六) - 容器的隔离与限制
Linux容器中用来实现“隔离”的技术手段:Namespace。Namespace实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有区别。
1380 0
Docker容器实战(五) - 特殊的进程!
容器起于PaaS Docker项目具有里程碑意义 Docker项目通过“容器镜像”,解决应用打包这个根本难题 容器本身没有价值,有价值的是“容器编排” 正因为如此,容器技术生态才爆发了一场关于“容器编排”的“战争”而这次战争,最终以Kubernetes项目和CNCF社区的胜利而告终。
1422 0
Docker容器实战(三) - Docker的自我重新定位
Docker公司为什么在Docker项目已经取得巨大成功之后,执意走回已经让无数先驱折戟的PaaS路呢? 实际上,Docker项目一直伴随着公司管理层和股东们的阵阵担忧。他们心里明白,虽然Docker项目备受追捧,但用户们最终要部署的,还是他们的网站、服务、数据库,甚至是云计算业务。
1434 0
+关注
shev
精灵云(www.ghostcloud.cn)联合创始人,20年编程经验,全栈工程师,曾任索贝数码及赛门铁克架构师架构师,精通分布式系统开发,2013年开始研究LXC和Docker相关技术,目前主要从事容器云平台研发工作。
65
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载