经过上篇docker入门后,肯定有点抱怨,还是没有体验到docker的威力。现在我们来点好玩的。
装个ubuntu
以前我们装ubuntu,都是要费老大的力气,有了docker,我们装个ubuntu玩玩。
docker run -t -i ubuntu:14.04 /bin/bash
好了,你装好了ubuntu了,可以在里面随便玩,玩坏了!没事,删掉重建一个。
这里跟我们之前创建启动容器的方式不一样,多了一些参数。我们来找--help帮忙
docker run --help
//截取部分
-t, --tty Allocate a pseudo-TTY
--ulimit value Ulimit options (default[])
-i, --interactive Keep STDIN open even if not attached
-t 分配一个交互终端, -i 让我们能输入字符 ;两个结合起来就能进行交互。最后/bin/bash 是让容器ubuntu启动时bash运行。
为了方便管理,我们创建创建容器的时候,可以初始化一个name
docker run -t -i --name robin_test ubuntu:14.04 /bin/bash
最后面可以看到名字变了,之前我们都没有初始化名字,docker会帮我们随机生成一个。name 是唯一的,当第二次执行上面耳朵命令,会失败,因为容易里已经存在robin_test这个容器。
如何退出了? 直接Ctrl + d 或者 exit 就能退出了,docker ps 查看,发现刚才运行的容器没有运行,Ctrl + d 退出,容器也会停止运行。
退出了,怎么让刚才的容器重新跑起来?
docker start id/name
docker ps 可以看到,容器正在运行,有人想问,我想进入到这个ubuntu容器里去啊!怎么做?
docker attach id/name
后台运行,日志
我们在实际开发中,一般不会run的时候就登陆到容器里去,而是把应用部署到容器里,以后台保护进程来运行。
docker run -t -i -d --name robin_test ubuntu:14.04 /bin/bash
//在原来额基础上加上-d参数就行, daemon (守护)
// 为了你以后想登陆进去,我加上了 -t -i 交互参数
问题来了,我的应用布置上去了,我怎么看运行状态啊!就是docker的日志。为了方便演示,我们创建启动一个新容器,让他一直打印helloWorld
启动一个新容器
docker run --name loop -d ubuntu:14.04 /bin/sh -c "while [ true ]; do echo helloWorld; sleep 1; done"
然后执行下面的一条查看日志,就可以看到我们神奇的helloWorld了
docker logs [容器名]
docker logs [容器名] -f //实时查看
docker logs [容器名] -f --tail 100 //加上行数
docker logs [容器名] -f t --tail 0 //日志显示时间
解释下/bin/sh -c "..." ,先来man下sh(dash) , command interpreter 指令解释器,-c 将字符串解析成指令执行。
容易运行时一些系统信息
我们经常在linux上部署应用,会查看一些系统信息,我们也可以查看运行容器的一些进程,cpu内存使用情况等。
先来看看进程,任然查看刚才的loop容器
docker top loop
可以看到
这里有两个进程,一个是while循环,一个是sleep睡眠。
再来看看应用的cpu内存一些信息
docker stats loop
可以看到loop占用了多少内存,多少cpu,以及io的统计。
不登陆容器执行command
这里来点更有意思的,我们运行的容器,我能不能让他执行一些命令,可是我启动的时候,没有以交互方式run的,现在也登陆不进去。我想修改配置,怎么办啊!
哈哈!等你看完下面的,这些问题都变得so easy!!!
先来一个tomcat镜像
docker run -d --name test -p 8080:8080 tomcat
好戏才开始
在tomcat的ROOT下创建一个hello.html,这里需要用到docker exec
docker exec -d test touch /usr/local/tomcat/webapps/ROOT/hello.html
先来了解下docker exec,docker exec --help解释为【Run a command in a running container】在容器里执行指令,-d 在后台执行这个指令,test是容器名;touch /usr/local/tomcat/webapps/ROOT/hello.html这里是容器里需要执行的指令。
访问下hello.html 发现能访问,但是什么也没有,一个空白页。没错,你只是创建了一个hello.html页面,没有写入任何东西。
给你新建的文件写点东西
docker exec test /bin/sh -c "echo helloWorld>/usr/local/tomcat/webapps/ROOT/hello.html"
在访问下页面,页面上显示helloWorld,有东西了,很爽吧!很简单,用sh -c来执行下命令。
将文件里的内容 cat 下
docker exec test /bin/sh -c "cat /usr/local/tomcat/webapps/ROOT/hello.html"
这里千万别加-d参数,不然看不到任何输出信息。
补充:大家可能有疑惑,我怎么知道tomcat的路径啊!这里先给大家引入一个查看容器详情的指令,docker inspect,执行docker inspect test 可以看到很长一段json格式的信息,我们先别看那么多,反正也看不懂,别把自己弄糊涂了!
现在你应该知道路径了吧!
以交互的方式再进入运行的tomcat
docker exec -it test /bin/bash
好了,进入到了交互界面了,退出的话直接exit就行,但是容器是没有停止的。
之前我们run的时候可以以交互模式进入的,退出容器也停止了,不推荐。这里我们小总结下:启动images的时候,以-d守护进程启动,然后进入交互里的数,就docker exec -it test /bin/bash方式。
今天先到这了,接下来你可以去好好装逼了,下期再见。