标签 部署 下的文章

阿里云部署Docker(3)----指令学习
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

通过上两节的学习相信大家已经把docker环境已经搭建完毕,这一节,简单学习docker怎么用。
Hello world
计算机的每一个新事物似乎都是从hello world开始。
root@iZ28ikebrg6Z:~# docker run ubuntu:14.04 /bin/echo 'hello world'
hello world
root@iZ28ikebrg6Z:~# docker run ubuntu /bin/echo 'hello world'
hello world

我们之前执行过docker pull ubuntu, 所以我们从远端服务器拉取了不少ubuntu镜像,这些镜像已经存在在本地,不会再去远端服务器拉取,如果你运行的是本地没有的,docker会自动的去远端库查询和拉取。例如 :
root@iZ28ikebrg6Z:~# docker run centos /bin/echo 'hello world'
Unable to find image 'centos' locally
Pulling repository centos

上述ubuntu是一个镜像,作为一个容器,然后我们进一步运行容器内的APP,即/bin/echo程序。而当执行完echo指令之后,容器内的程序停止了,容器本身也就停止了。记住这个hello world 涉及到点概念,docker ,image, container ,application 。你懂了么? An Interactive Container

一个可以交互的容器。我们输入如下命令:

root@iZ28ikebrg6Z:~# docker run -i -t ubuntu:14.04 /bin/bash
root@95d20e5442f9:/#

多了两个参数,一个是 -t ,表示给我们的容器tty,终端。一个是-i 表示可以interactive,可以交互。细心看结果,上面一行还在我们的阿里云机子上iZ28ikebrg6z下一行已经进入到docker ubuntu:14.04镜像映射出的容器里面了,95d2e5442f9中。

你可以在这个bash里面执行一些操作。

root@95d20e5442f9:/# pwd
/
root@95d20e5442f9:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

如果你想退出这个bash,那么可以运行:
root@95d20e5442f9:/# exit
exit
root@iZ28ikebrg6Z:~#

这样即退出了bash,当然容器也就退出了。 A Daemonized Hello world 守候进程化,即后台化。

执行如下命令:

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

-d 选项就是告诉docker,这个容器需要后台化。但是,为什么输出是一串看不懂的字符串,而不是每秒输出一次hello world呢?

这一长串东西叫做容器的ID,我们可以通过它使用容器。

root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8eca9742031 ubuntu:14.04 "/bin/sh -c 'while t 3 minutes ago Up 3 minutes mad_jones

看到了吧,我们刚刚那个容器被列出来了。最后一列是名字,什么意思,docker都是一层层的增加的,具体后面细说,你执行一条命令,对你使用的镜像是没有影响的,但是你执行了毕竟是有数据或者其他的东西发生了变化,这个时候,docker给你自动取个名字(你可以指定名字),然后通过这个名字,就像一个新的镜像一样,后面你可以保存它。

打印日志:

root@iZ28ikebrg6Z:~# docker logs mad_jones
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world

停止任务:
root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8eca9742031 ubuntu:14.04 "/bin/sh -c 'while t 43 minutes ago Up 43 minutes mad_jones
root@iZ28ikebrg6Z:~# docker stop mad_jones
mad_jones
root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@iZ28ikebrg6Z:~#

好了,hello world就到次结束。后续推出更加高级的教程。

转载请注明原文地址:http://www.server110.com/docker/201411/11137.html

阿里云部署Docker(2)
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

之前有一篇文章讲过在阿里云中安装Docker,相对来说那个是安装,但是安装完之后我们一般会碰到问题。

今天我给大家记录一下我的新的解决过程。

环境还是ubuntu12.04,假设我们已经把内核升级到了3.8以上。

便捷安装Docker命令:

curl -s https://get.docker.io/ubuntu/ | sudo sh

这样一条指令就完成了安装。

直接执行如下命令:

sudo docker run -i -t ubuntu /bin/bash

不行,会报错。

如下:

root@iZ28ikebrg6Z:~# docker run -i -t ubuntu /bin/bash
2014/10/15 21:19:19 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

好,我们的守候进程没有起来。
于是我们输入命令:
root@iZ28ikebrg6Z:~# docker -d

出现如下错误:
root@iZ28ikebrg6Z:~# docker -d

2014/10/15 21:21:01 docker daemon: 1.2.0 fa7b24f; execdriver: native; graphdriver: [be668f49] +job serveapi(unix:///var/run/docker.sock) [info] Listening for HTTP on unix (/var/run/docker.sock) [be668f49] +job init_networkdriver() [be668f49.init_networkdriver()] creating new bridge for docker0 Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0' [be668f49] -job init_networkdriver() = ERR (1) 2014/10/15 21:21:01 Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0'

这个时候,很多人很困惑,搜索很多解决方法而不得解决,我也是,我试过很多方法,不过,我没记录下来,抱歉,现在我只知道正确的解决方法了

它来自http://segmentfault.com/q/1010000000438713
大家都在搜如何在阿里云里面部署Docker

里面有一个人说:

改下路由表就可以了:

sudo route del -net 172.16.0.0 netmask 255.240.0.0

反正其他的我都试烂了,所以,也不介意多试这个。 root@iZ28ikebrg6Z:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 115.28.83.247 0.0.0.0 UG 0 0 0 eth1 10.0.0.0 10.163.191.247 255.0.0.0 UG 0 0 0 eth0 10.0.3.0 255.255.255.0 U 0 0 0 lxcbr0 10.163.176.0 255.255.240.0 U 0 0 0 eth0 115.28.80.0 * 255.255.252.0 U 0 0 0 eth1 172.16.0.0 10.163.191.247 255.240.0.0 UG 0 0 0 eth0 192.168.0.0 10.163.191.247 255.255.0.0 UG 0 0 0 eth0 root@iZ28ikebrg6Z:~# route del -net 172.16.0.0 netmask 255.240.0.0
root@iZ28ikebrg6Z:~# docker -d

2014/10/15 21:45:41 docker daemon: 1.2.0 fa7b24f; execdriver: native; graphdriver: [12f8faab] +job serveapi(unix:///var/run/docker.sock) [info] Listening for HTTP on unix (/var/run/docker.sock) [12f8faab] +job init_networkdriver() [12f8faab.init_networkdriver()] creating new bridge for docker0 [12f8faab.init_networkdriver()] getting iface addr [12f8faab] -job init_networkdriver() = OK (0) 2014/10/15 21:45:41 WARNING: Your kernel does not support cgroup swap limit. [info] Loading containers: [info] : done. [12f8faab] +job acceptconnections() [12f8faab] -job acceptconnections() = OK (0) [info] POST /images/create?fromImage=ubuntu&tag= [12f8faab] +job pull(ubuntu, )
嘿嘿,成功了。

至少没报错。好,守候进程算是起来了,不过,我们还是要验证一下能不能真正的用。

新开一个终端,输入:

root@iZ28ikebrg6Z:~# docker pull ubuntu
Pulling repository ubuntu
a9561eb1b190: Pulling dependent layers
3db9c44f4520: Downloading [====================> ] 26.42 MB/63.51 MB 14m3s
c5881f11ded9: Pulling dependent layers
195eb90b5349: Pulling dependent layers
2185fd50e2ca: Pulling dependent layers
463ff6be4238: Pulling dependent layers
9cbaf023786c: Pulling dependent layers
511136ea3c5a: Download complete
6cfa4d1f33fb: Download complete

拉取成功了。有不会报错了。好了,至此,我们可以正常的操作Docker了。哈哈。

root@iZ28ikebrg6Z:~# docker run ubuntu /bin/echo "hello"
hello
root@iZ28ikebrg6Z:~# docker run -i -t ubuntu /bin/bash
root@9fbad8b573d3:/#

而当你试图使用没有拉取过的镜像的时候,它会自动的帮你去拉取。例如,你突然使用centos。

root@iZ28ikebrg6Z:~# docker run centos /bin/echo 'hello world'
Unable to find image 'centos' locally
Pulling repository centos

转载请注明原文地址:http://www.server110.com/docker/201411/11136.html