关于Docker 常用命令

Docker 常用命令 

 

分类列一下常用的CLI命令 

  • 仓库相关 

search/ pull / push / login etc.

例:docker pull ubuntu 从仓库下载ubuntuimage

 

  • Images 操作相关 

images/ rmi / build / export  / import / save /load etc.

例:docker images -t 以树形结构列出当前本地Image

 

  • 运行相关 

run / start / stop / restart / attach /kill etc.

docker run -i -t ubuntu /bin/bash  启动ubuntu image,并交互式的运行shell

 

  • 杂项 

Docker diff  / commit

Dockerinfo / ps / inspect / port / logs / top / history etc. 

 

具体docker命令的使用参见 http://docs.docker.io/en/latest/reference/commandline/

 

常见问题 

  • 使用Non root 用户 

目前版本的docker由于使用Socket进行通讯,因此需要root用户权限 sudo xxx,或者将需要使用Dockerclient的用户加入docker用户组

sudogpasswd -a ${USER} docker

 

  • 网络相关问题 

当你在网关背后需要通过代理连接docker的index数据库时,可以手动加上http_proxy环境变量来启动dockerdaemon

 

HTTP_PROXY=http://proxy_server:port docker -d &

 

更好的做法是修改/etc/default/docker ( on ubuntu ), 添加 exporthttp_proxy=proxy_server:port

 

同样,docker container 如果无法自动正确的从host环境中获得DNS的配置,则需要手动指定DNS服务器地址,这可以通过 docker -run --dns=xxx来实现,也可以修改/etc/default/docker 添加例如 DOCKER_OPTS="-dns 8.8.8.8"

 

  • 特权模式 

在正常情况下 在container内部你没有权限操作device设备,而当前版本中,container内部部分文件例如/etc/hosts;/etc/hostname; /etc/resolve.conf等文件是动态通过mount动态以只读的形式加载上来的,理论上说你应该找到合适的方法去保证这些自动生成并加载的文件的正确性 (例如 通过--dns 设置 resolve.conf ),但是如果由于特殊原因你需要手动修改,那么你可以通过特权模式启动 docker client : docker run --privileged ,然后你可以卸载这些文件,自己再创建新的版本

 

  • 过多的层级依赖关系

 

以Layer的方式实现APP和相关library的cheap reuse和fast update是Docker的关键所在,不过受目前AUFS文件系统的限制,默认Layer的层级最多只能达到127(曾经只有42),在实际使用中有多种情况可能导致你的container的层级关系快速增长到这个极限值,撇开这么多layer叠加以后AUFS的效率不谈,更多情况下是你无法再更新构建你的image了

 

  1. 使用Dockerfile构建Image时,每条指令都会给最终的Image增加一层layer依赖关系.
  2. 以修改,提交,再修改再提交的方式不停的调整,更新你的Image
  3. 从仓库中下载的别人的Image已经包含众多的层级依赖关系,而你需要进一步更新以创建你自己的版本

 

前两者在一定程度上还是你自己可能把控的,最后一种情况就没办法了。这个问题最终必将影响Docker的实际可用性,目前的解决方案包括:

 

  • 使用Dockerfile时,尽可能合并多个操作:例如使用 "&&" 或 ";" 合并运行多个shell命令;将多个shell命令写成脚本,在dockerfile中添加并运行这个脚本
  • 通过Export再Import Image,丢弃所有历史信息和依赖关系,创建一个全新的image

 

将来可能的解决方案包括:

 

  • 在Dockerfile中添加对多步操作的合并提交的支持
  • 外部的image Flat工具的支持,目标是能够保留历史信息等
  • 非AUFS的其它Storage解决方案

 

 

 

Future development

 

虽然Docker目前默认使用LXC和AUFS,但是Docker的核心思想本身,并不强制绑定这两者,0.8版本已经可以使用BTRFS,而整个Docker框架也改成了插件式的架构,便于添加替换各个功能模块

 

 

 

 

例如更多的Storage方案的支持,规避AUFS当前的问题,除了LXC以外更多的虚拟化方案等

 

安装运行和使用

 

Docker虽然是号称build once, runeverywhere。但是实际上还是受其引擎依赖关系的限制的,目前的版本具体来说对系统要求:

 

  • Linux Kernel 3.8+
  • LXC support
  • 64bit OS
  • AUFS

 

以上要求,以ubuntu为例,需要12.04 配合 3.8kernel升级, 或者 ubuntu 13.04+

 

在ubuntu12.04上,基本安装步骤如下

 

sudoapt-get update sudo apt-get install linux-image-generic-lts-raringlinux-headers-generic-lts-raring

sudoapt-key adv --keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9

sudosh -c "echo deb http://get.docker.io/ubuntudocker main\ > /etc/apt/sources.list.d/docker.list"

sudoapt-get update

sudoapt-get install lxc-docker

 

如果你在安装之前想要先体验一下docker的基本操作命令等的话, 可以尝试一下这个在线的live教程

https://www.docker.io/gettingstarted/#h_tutorial

关于Docker的更多介绍,本文参考:http://blog.csdn.net/colorant/article/details/20608157 

转载请注明出处:http://www.cnblogs.com/haochuang/ 8年IT工作经验,5年测试技术与管理,2年产品与项目管理,曾参与过云计算\云存储\车联网产品研发工作; 业余自媒体人,有技术类垂直微信公众号;如有招聘或求职方面需求,请Mail to uetest@qq.com ;或通过 QQ:363573922 微博:@念槐聚 联系;

时间: 2024-12-23 07:30:20

关于Docker 常用命令的相关文章

Docker 常用命令整理并介绍_docker

什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环境中部署和调整数据库或其他的后台应用: 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的P

Docker | docker常用命令

docker常用命令总结 1.启动docker服务 sudo service docker start 2.停止docker服务 sudo service docker stop 3.检查docker 守护进程是否在运行 sudo docker stats 4.查看docker相关信息 sudo docker info 5.列出所有容器 sudo docker ps -a 6.最后一次运行的容器 sudo docker ps -l 7.重新启动已停止的容器 sudo docker start 容

Docker 常用命令整理及使用注意事项总结_docker

常用docker命令 对docker常用命名的详细解释,让你快速学会docker的使用! docker,轻量级虚拟机,也有人称之为应用容器 优点:1.部署速度快 2.测试服务与部署可保持完全一致 常用命令 1.查看容器的root用户密码 docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1 因为Docker容器启动时的root用户的密码是随机分配的.所以,通过这种方式就可以得到redmine容器的root用户的密码了. 2.

详解修改docker时区及docker常用命令_docker

前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

docker常用命令

systemctl start docker.service ------------ docker kill 容器id docker rm 容器id ---------------------- docker info

docker 常用命令

docker start .启动一个或多少已经被停止的容器 docker stop .停止一个运行中的容器 docker restart .重启容器 docker run  镜像名 docker rm 容器名 docker rmi 镜像名.(注意必须删除使用此镜像的容器) docker images .查看所有镜像 docker ps -a .查看所有容器 exit  .退出容器 docker start 容器名 .启动容器 docker stop 容器名 . 停止容器 docker commi

Docker常用命令汇总

docker # 查看镜像 docker images # 查看运营的容器 docker ps # 运行 ubuntu docker run -i -t daocloud.io/ubuntu:14.04 /bin/bash # 运行ubuntu, 退出时自动删除容器 docker run -i -t --rm daocloud.io/ubuntu:14.04 /bin/bash # 切换machine,使用docker-vm eval "$(docker-machine env docker-v

docker 开发常用命令总结

Docker 常用命令总结,镜像下载,到docker容器创建,常用docker命令的 增删查 1.镜像下载,从hub.docker.com中下载最新版本的postgres docker pull postgres 2.首次启动一个容器,名称为--name docker-postgresql,把容器/root文件挂在到 ~/codehub下 -v ~/codehub:/root:ro,设置postgres密码为123456-e POSTGRES_PASSWORD=123456 docker run

Docker 清理命令集锦_docker

杀死所有正在运行的容器 复制代码 代码如下: docker kill $(docker ps -a -q)  删除所有已经停止的容器 复制代码 代码如下: docker rm $(docker ps -a -q)  删除所有未打 dangling 标签的镜像 复制代码 代码如下: docker rmi $(docker images -q -f dangling=true)  删除所有镜像 复制代码 代码如下: docker rmi $(docker images -q)  为这些命令创建别名