-
查看容器的root用户密码
docker logs <容器名orid> 2>&1 | grep '^User: ' | tail -n1 容器名orid>
因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到redmine容器的root用户的密码了。
-
查看容器日志
docker logs -f <容器名orid>容器名orid>
-
查看正在运行的容器
docker psdocker ps -a为查看所有的容器,包括已经停止的。
-
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm <容器名orid>容器名orid>
-
停止、启动、杀死一个容器
docker stop <容器名orid> docker start <容器名orid> docker kill <容器名orid>容器名orid> 容器名orid> 容器名orid>
-
查看所有镜像
docker images
- 删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
-
运行一个新容器,同时为它命名、端口映射、文件夹映射。以redmine镜像为例
docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
-
一个容器连接到另一个容器
docker run -i -t --name sonar -d -link mmysql:db tpires/sonar-serversonar
容器连接到mmysql容器,并将mmysql容器重命名为db。这样,sonar容器就可以使用db的相关的环境变量了。
-
拉取镜像
docker pull <镜像名:tag>镜像名:tag>
如
docker pull sameersbn/redmine:latest
-
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
机器adocker save busybox-1 > /home/save.tar
使用scp将save.tar拷到机器b上,然后:
docker load < /home/save.tar
-
构建自己的镜像
docker build -t <镜像名>
镜像名> 如Dockerfile在当前路径:
docker build -t xx/gitlab .
- 重新查看container的stdout
# 启动top命令,后台运行 $ ID=$(sudo docker run -d ubuntu /usr/bin/top -b) # 获取正在running的container的输出 $ sudo docker attach $IDtop - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombieCpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 373572k total, 355560k used, 18012k free, 27872k buffersSwap: 786428k total, 0k used, 786428k free, 221740k cached^C$$ sudo docker stop $ID
-
后台运行(-d)、并暴露端口(-p)
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
-
从container中拷贝文件出来
sudo docker cp 7bb0e258aefe:/etc/debian_version .
拷贝7bb0e258aefe中的/etc/debian_version到当前目录下。
注意:只要7bb0e258aefe没有被删除,文件命名空间就还在,可以放心的把exit状态的container的文件拷贝出来。 -
移除所有的容器和镜像(大扫除)
用一行命令大扫除:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
注:shell 中的 $() 和 `` 类似,会先执行这里面的内容,上面的脚本会出现如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 删除容器, docker rmi 删除镜像
当没有运行的容器或者是根本没有容器的时候,这只会提示一个警告信息。当你想尝试的时候,这就是个非常好的单行命令。如果你仅仅想删除所有的容器,你可以运行如下命令:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
退出时删除容器
如果你仅仅想在一个容器中快速的运行一个命令,然后退出,并且不用担心容器状态,把 --rm 参数加入 run 命令后面,这将结束很多你保存了的容器,并且清理它们。
示例:docker run --rm -i -t busybox /bin/bash
不在 Shell 上运行命令
如果你使用需要Shell 的扩展项的 docker run 命令处理某些事情,比如 docker run --rm busybox ls '/var/log/*', 这个命令将失败。这个失败的原因我花了工夫才弄明白。这个陷阱在这里:你原来没有 Shell , 而 ```* 是 Shell 的扩展项,因此你需要一个能使用的 Shell 。正确方法为:
docker run --rm busybox sh -c 'ls /var/log/*'
Boot2Docker 和 LapTops 处理 DNS 问题的方法
由于这个原因, Boot2Docker 会占用 DNS 服务器很长一段时间。当你在尝试创建镜像的时候,可能会得到离谱的错误。如果你在 Ubuntu 或者 CentOS 上看到下面的提示:
cannot lookup archive.ubuntu.com
聪明的做法是停止,然后启动 boot2docker 。
boot2docker-cli down && boot2docker-cli up
这样问题就解决了。
Volumes 解决 docker logs 和 docker copy 问题
如果你想在一个容器中监控另一个容器中的日志文件和文件的使用,你可以看看 ,例如,检查 tomcat 是否启动:
tomcat_id=$(docker run -d -v /var/log/tomcat6 wouterd/tomcat6) # Give Tomcat some time to wake up... sleep 5 while ! docker run --rm --volumes-from ${tomcat_id} busybox /bin/sh -c "grep -i -q 'INFO: Server startup in' /var/log/tomcat6/catalina*.log" ; do echo -n "." sleep 5 done
你还可以在一个 Dockerfile中指定 volumes ,这个在我前面的博客文章中结合 Docker 连载了。
Docker Inspect 结合 Go Templates 的好处
命令 docker inspect 允许使用 来格式化inspect 命令的输出信息如果你擅长这个,你能获取很多 docker 容器命令行的脚本输出信息。这是一个获取正在运行的容器 IP 的示例:
container_ip=$(docker inspect --format '{ {.NetworkSettings.IPAddress}}' ${container_id})
这里有一个笨的技巧,用于得到匹配所有暴露(exposed)的端口 host:port ,并且把他们输入一个 java properties 文件:
sut_ip=${BOOT_2_DOCKER_HOST_IP} template='{ { range $key, $value := .NetworkSettings.Ports }}{ { $key }}='"${BOOT_2_DOCKER_HOST_IP}:"'{ { (index $value 0).HostPort }} { { end }}' tomcat_host_port=$(docker inspect --format="${template}" ${container_id}) for line in ${tomcat_host_port} ; do echo "${line}" >> ${work_dir}/docker_container_hosts.propertiesdone
- Docker网络学习笔记:http://blog.csdn.net/junjun16818/article/details/38423379