Docker 使用总结
来源:互联网 发布:淘宝助理导出图片 编辑:程序博客网 时间:2024/04/29 11:53
http://blog.csdn.net/liukun321/article/details/50770356
从贴出Docker 资料汇总那篇水帖, 到现在已经完整的做过一个用Docker部署的小型website集群并且已经上线运行了。 对docker的使用也有了些许体会(不过现在对Docker的理解还停留在一个轻度使用者的角度去理解)。这个项目从负载均衡 、反向代理、及app server全都是跑在Docker容器上。为什么使用Docker? 也许是时候好好想想这个问题了。最开始用Docker只是为了快速部署,以及docker能对不同服务进行很好的隔离,还有更多的优秀特性并不了解。也许 使用Docker更多驱动来自于对新事物的好奇。
为什么用Docker?
下面的资料来自大神们的总结:
当然这里说的是Docker的优点,我来总结一下网友们以及我个人对这个问题的看法:
1、虚拟化容器的优势
随着公有云的普及,开发者越来越需要一个快速迁移和高速构建应用的环境。现在开发者需要能方便地创建运行在云平台上的应用,也就是说应用必须能够脱离底层机器。 而且同时必须是方便获取的。因此,开发者们需要一种创建分布式应用程序的方式,这也是Docker所能够提供的。
举 个例子: 我在项目中同一台服务器中同时运行了nginx,forum&wiki(node.js),meteor server(meteor.js)。每个服务又依赖大量的第三方库,如果用传统的方式进行部署。则需要安装大量的依赖模块,费时费力。假如我需要在国外 的AWS及国内的阿里云上同时部署多台机器。或者从某个公有云服务商迁移到另外一个服务商。这中间的重复劳动是很让人抵触的。抛开让人生厌的重复劳动,服务之间也有可能因此互相“污染”导致性能下降甚至服务异常。而Docker提供了一种更为聪明的方式,通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。这无疑将节约大量的宝贵时间,并降低部署过程出现问题的风险。
2、Docker在开发和运维中的优势
对开发和运维(DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。
具体说来,Docker在开发和运维过程中,具有如下几个方面的优势。
更 快速的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;比如在项目开发过程中我会先用Docker将代码部署到本地进 行测试验证。使用Docker在本地轻松搭建出的和服务器类似的架构,使开发环境中的测试更贴近于生产环境。开发完成之后,测试和运维人员可以直接使用相 同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,各个步骤都有明确的配置和操作,整个过程 全程可见,使团队更容易理解应用的创建和工作过程。
更高效的资源利用。Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 利用这种兼容性让用户可以在不同平台之间轻松地迁移应用。
更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。
3、Docker与虚拟机比较
作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:
Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启动N个虚拟机 (每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker只需要启动N个隔离的容器,并将应用放到容器内即可。
当 然,在隔离性方面,传统的虚拟机方式多了一层额外的隔离。但这并不意味着Docker就不安全。Docker利用Linux系统上的多种防护机制实现了严 格可靠的隔离。从1.3版本开始,Docker引入了安全选项和镜像签名机制,极大地提高了使用Docker的安全性。
基本操作常用命令
查看容器的root用户密码
docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1
因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到对应容器名的容器的root用户的密码了。
查看容器日志
docker logs -f <容器名orID>
查看正在运行的容器
docker ps
docker ps -a为查看所有的容器,包括已经停止的。
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm <容器名orID>
停止、启动、杀死一个容器
docker stop <容器名orID>
docker start <容器名orID>
docker kill <容器名orID>
查看所有镜像
docker images
删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
运行一个新容器,同时为它命名、端口映射、文件夹映射。以tengine镜像为例
docker run -d -v /opt/nginx/tengine.conf:/usr/local/nginx/conf/nginx.conf -p 80:80 --name=nginx liukunmcu/tengine
一个容器连接到另一个容器(父子链接)
docker run -i -t --name <容器名> -d -link mongodb:db <镜像名>
sonar
这里列举的是将当前容器连接到mongodb的过程,名为mongodb的容器已提前在本地启动,并将mongodb容器映射为db。这样,当前启动的容器就可以使用db的相关的环境变量了。
拉取镜像
docker pull <镜像名:tag>
如
docker pull liukunmcu/tengine
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
机器a
docker 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 $ID
top - 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 zombie
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 373572k total, 355560k used, 18012k free, 27872k buffers
Swap: 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的文件拷贝出来
网络部分常用命令:
docker0网桥配置
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给出了 MTU(接口允许接收的最大传输单元),通常是 1500 Bytes,或宿主主机网络路由上支持的默认值。这些值都可以在服务启动的时候进行配置。
--bip=CIDR -- IP 地址加掩码格式,例如 192.168.1.5/24
--mtu=BYTES -- 覆盖默认的 Docker mtu 配置
也可以在配置文件中配置 DOCKER_OPTS,然后重启服务。 由于目前 Docker 网桥是 Linux 网桥,用户可以使用brctl show 来查看网桥和端口连接信息。
$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.3a1d7362b4ee no veth65f9
vethdda6
注:brctl 命令在 Debian、Ubuntu 中可以使用 sudo apt-get install bridge-utils 来安装。
每次创建一个新容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关。
$ sudo docker run -i -t --rm base /bin/bash
$ ip addr show eth0
24: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 32:6f:e0:35:57:91 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::306f:e0ff:fe35:5791/64 scope link
valid_lft forever preferred_lft forever
$ ip route
default via 172.17.42.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3
$ exit
从贴出Docker 资料汇总那篇水帖, 到现在已经完整的做过一个用Docker部署的小型website集群并且已经上线运行了。 对docker的使用也有了些许体会(不过现在对Docker的理解还停留在一个轻度使用者的角度去理解)。这个项目从负载均衡 、反向代理、及app server全都是跑在Docker容器上。为什么使用Docker? 也许是时候好好想想这个问题了。最开始用Docker只是为了快速部署,以及docker能对不同服务进行很好的隔离,还有更多的优秀特性并不了解。也许 使用Docker更多驱动来自于对新事物的好奇。
为什么用Docker?
下面的资料来自大神们的总结:
当然这里说的是Docker的优点,我来总结一下网友们以及我个人对这个问题的看法:
1、虚拟化容器的优势
随着公有云的普及,开发者越来越需要一个快速迁移和高速构建应用的环境。现在开发者需要能方便地创建运行在云平台上的应用,也就是说应用必须能够脱离底层机器。 而且同时必须是方便获取的。因此,开发者们需要一种创建分布式应用程序的方式,这也是Docker所能够提供的。
举 个例子: 我在项目中同一台服务器中同时运行了nginx,forum&wiki(node.js),meteor server(meteor.js)。每个服务又依赖大量的第三方库,如果用传统的方式进行部署。则需要安装大量的依赖模块,费时费力。假如我需要在国外 的AWS及国内的阿里云上同时部署多台机器。或者从某个公有云服务商迁移到另外一个服务商。这中间的重复劳动是很让人抵触的。抛开让人生厌的重复劳动,服务之间也有可能因此互相“污染”导致性能下降甚至服务异常。而Docker提供了一种更为聪明的方式,通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。这无疑将节约大量的宝贵时间,并降低部署过程出现问题的风险。
2、Docker在开发和运维中的优势
对开发和运维(DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。
具体说来,Docker在开发和运维过程中,具有如下几个方面的优势。
更 快速的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;比如在项目开发过程中我会先用Docker将代码部署到本地进 行测试验证。使用Docker在本地轻松搭建出的和服务器类似的架构,使开发环境中的测试更贴近于生产环境。开发完成之后,测试和运维人员可以直接使用相 同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,各个步骤都有明确的配置和操作,整个过程 全程可见,使团队更容易理解应用的创建和工作过程。
更高效的资源利用。Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 利用这种兼容性让用户可以在不同平台之间轻松地迁移应用。
更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。
3、Docker与虚拟机比较
作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:
Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启动N个虚拟机 (每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker只需要启动N个隔离的容器,并将应用放到容器内即可。
当 然,在隔离性方面,传统的虚拟机方式多了一层额外的隔离。但这并不意味着Docker就不安全。Docker利用Linux系统上的多种防护机制实现了严 格可靠的隔离。从1.3版本开始,Docker引入了安全选项和镜像签名机制,极大地提高了使用Docker的安全性。
基本操作常用命令
查看容器的root用户密码
docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1
因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到对应容器名的容器的root用户的密码了。
查看容器日志
docker logs -f <容器名orID>
查看正在运行的容器
docker ps
docker ps -a为查看所有的容器,包括已经停止的。
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm <容器名orID>
停止、启动、杀死一个容器
docker stop <容器名orID>
docker start <容器名orID>
docker kill <容器名orID>
查看所有镜像
docker images
删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
运行一个新容器,同时为它命名、端口映射、文件夹映射。以tengine镜像为例
docker run -d -v /opt/nginx/tengine.conf:/usr/local/nginx/conf/nginx.conf -p 80:80 --name=nginx liukunmcu/tengine
一个容器连接到另一个容器(父子链接)
docker run -i -t --name <容器名> -d -link mongodb:db <镜像名>
sonar
这里列举的是将当前容器连接到mongodb的过程,名为mongodb的容器已提前在本地启动,并将mongodb容器映射为db。这样,当前启动的容器就可以使用db的相关的环境变量了。
拉取镜像
docker pull <镜像名:tag>
如
docker pull liukunmcu/tengine
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
机器a
docker 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 $ID
top - 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 zombie
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 373572k total, 355560k used, 18012k free, 27872k buffers
Swap: 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的文件拷贝出来
网络部分常用命令:
docker0网桥配置
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给出了 MTU(接口允许接收的最大传输单元),通常是 1500 Bytes,或宿主主机网络路由上支持的默认值。这些值都可以在服务启动的时候进行配置。
--bip=CIDR -- IP 地址加掩码格式,例如 192.168.1.5/24
--mtu=BYTES -- 覆盖默认的 Docker mtu 配置
也可以在配置文件中配置 DOCKER_OPTS,然后重启服务。 由于目前 Docker 网桥是 Linux 网桥,用户可以使用brctl show 来查看网桥和端口连接信息。
$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.3a1d7362b4ee no veth65f9
vethdda6
注:brctl 命令在 Debian、Ubuntu 中可以使用 sudo apt-get install bridge-utils 来安装。
每次创建一个新容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关。
$ sudo docker run -i -t --rm base /bin/bash
$ ip addr show eth0
24: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 32:6f:e0:35:57:91 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::306f:e0ff:fe35:5791/64 scope link
valid_lft forever preferred_lft forever
$ ip route
default via 172.17.42.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3
$ exit
0
上一篇:CSDN——CTO讲堂
下一篇:Docker推出了Docker云
相关热门文章
- cl社区最新地址
- vm虚拟机怎么访问本地硬盘...
- 使用libvirt管理kvm虚拟机...
- Linux下kvm和xen的区别
- vSphere 初体验一ESXi5的安装...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- docker 使用总结
- docker使用总结
- docker使用总结
- docker使用总结
- Docker使用总结
- docker使用总结
- docker的使用总结
- Docker 使用总结
- Docker 使用总结
- docker使用总结
- docker使用总结
- docker使用总结
- Docker使用总结
- docker 使用问题总结
- Docker 使用总结
- docker 使用总结
- Docker 使用总结
- docker使用总结
- Docker容器和镜像存储机制—images—目录树结构
- Fedora 23 上安装搜狗输入法——sogoupinyin
- CSDN——CTO讲堂
- 【poj 2479】Maximum sum 题意&题解&代码(C++)
- Tiny4412 led之NDK JNI实现
- Docker 使用总结
- Docker推出了Docker云
- 创建 Docker 镜像
- How To Install Docker on Fedora 23
- Android 输入法显示隐藏的问题
- (OK) Fedora23——Docker——CORE—testing
- Ubuntu LAMP环境搭建(直接输命令)
- 量子计算核心突破!Shor算法实现或使密码成摆设
- Java 控制台输入数据
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
三亚学院北一女事件
北七
北七家
北京北七家
北七家建材城
北七家房价
北七家招聘
北七家二手房
7家
北京北七家房价
北七家新楼盘
北七家规划
北七家社区医院
北七家旧货市场
北七家房租
北七家花卉市场
北七家卫生院
大鸭梨北七家店
北七家建材城营业时间
北京北七家属于哪个区
北七家房价不高原因
北七家为啥房价稍便宜
北七家镇
北七家镇邮编
顺德家私城
西南家具城
燕郊家具城
头桥家具城
十里河家具城
星月家具城
八一家具城
红旗家具城
万客隆家具城
北京7环
宋七月慕战北免费
宋七月慕战北全集目录
宋七月慕战北免费阅读全文
战七少莫北恶魔住隔壁
常德到石门县北的火车
石门县北火车站
双北