码迷,mamicode.com
首页 > 其他好文 > 详细

Docker 基础

时间:2017-08-31 19:01:57      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:lines   进程   管道   repo   分配   play   manage   output   gif   

docker 介绍

  Docker is the world’s leading software container platform. Developers use Docker to eliminate(消除) “works on my machine” problems when collaborating(合作) on code with co-workers. Operators use Docker to run and manage apps side-by-side(并行) in isolated(独立) containers to get better compute density(计算密度). Enterprises use Docker to build agile(敏捷) software delivery(交付) pipelines(管道) to ship new features(特性) faster, more securely and with confidence for both Linux, Windows Server, and Linux-on-mainframe apps.

Docker是世界领先的容器平台,在与同事协作代码开发消除个人开发环境引起(不一致)的问题,操作人原(开发或者运维)使用Docker运行和管理独立且并行的程序容器来获取更好的计算密度,企业使用Docker来构建敏捷的软件交付管道以更快地发布新特性,对于Windows linux server 大型主机上应用更可靠安全。

docker特性(能干什么)

1. 简化配置
这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
2. 代码流水线(Code Pipeline)管理
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
3. 提高开发效率
这就带来了一些额外的好处:Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014大会或者是DockerCon上的演讲。
不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。
理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。
4. 隔离应用
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。
我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。
5. 整合服务器
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。
6. 调试能力
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。
7. 多租户环境
另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。
你可以在这里了解关于此场景的更多信息。
8. 快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。这正是Google和Facebook都看重的特性。
你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。

docker架构及组件(家庭成员)

docker是有docker宿主机 client 和server构成
技术分享

docker三大组件分别是镜像(image)、容器(Container)、仓库(repository)
1.镜像 Docker运行容器前需要本地存在对应的镜像。 镜像可以用来创建Docker容器的。一个镜像可以包含一个完整的操作系统环境和用户需要的其它应用程序。在docker hub 里面有大量现成的镜像提供下载。docker的镜像是只可读的,一个镜像可以创建多个容器。 2.容器 docker利用容器来开发、运行应用。 容器是镜像创建的实例。它可以被启动、开始、停止、删除。每个容器都是 相互隔离的、保证安全的平台。 3.仓库 仓库是集中存放镜像文件的场所。 每个 仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。国内的公开 仓库包括DockerPool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库

Docker VS Vm(不同场景选择不懂程度上的虚拟化)

Docker可以认为是服务或微型服务虚拟化,Vm是操作系统的级别的虚拟化

技术分享技术分享

技术分享

 

在一个物理机上可以跑多个VM,VM特点就是稳定占用主机的性能较高相对不灵活适合传统复杂的企业,Docker则相反,适合真正的互联网公司可以动态扩展和伸缩集群。

 安装(基于Centos7)

[root@docker01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@docker01 ~]# uname -ra
Linux docker01.zwjf.com 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker01 ~]# yum -y install docker
[root@docker01 ~]# systemctl   start docker
[root@docker01 ~]# systemctl   restart docker
[root@docker01 ~]# systemctl   enable docker
[root@docker01 ~]# docker info

常用命令可参考 http://www.runoob.com/docker/docker-tutorial.html 

技术分享
1. 查看docker信息(version、info)
# 查看docker版本 
docker version 
# 显示docker系统的信息 
docker info
2. 对image的操作(search、pull、images、rmi、history)
# 检索image 
docker search image_name
 
# 下载image 
docker pull image_name 
#列出镜像列表; -a, --all=false Show all images; --no-trunc=false Dont truncate output; -q, --quiet=false Only show numeric IDs 
docker images
# 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents 
docker rmi image_name
# 显示一个镜像的历史; --no-trunc=false Dont truncate output; -q, --quiet=false Only show numeric IDs docker his
3. 启动容器(run)
# 在容器中运行"echo"命令,输出"hello word" 
docker run image_name echo "hello word"
# 交互式进入容器中 
docker run -i -t image_name /bin/bash
# 在容器中安装新的程序 
docker run image_name apt-get install -y app_name
# 在一次进刚才进入的容器
docker exec -i -t [容器ID]
查看容器(ps)
# 列出当前所有正在运行的container 
docker ps
# 列出所有的container 
docker ps -a 
# 列出最近一次启动的container 
docker ps -l
保存对容器的修改(commit)
# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message 
docker commit ID new_image_name
 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)
# 删除所有容器 
docker rm `docker ps -a -q` 
    
# 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container 
docker rm Name/ID
    
# 停止、启动、杀死一个容器 
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
    
# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps 
docker logs Name/ID
    
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的 
docker diff Name/ID
    
# 显示一个运行的容器里面的进程信息 
docker top Name/ID
    
# 从容器里面拷贝文件/目录到本地一个路径 
docker cp Name:/container_path to_path 
docker cp ID:/container_path to_path 
    
# 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10 
docker restart Name/ID

# 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process 
docker attach ID
保存和加载镜像(save、load)
# 保存镜像到一个tar包; -o, --output="" Write to an file 
docker save image_name -o file_path 
 
# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file 
docker load -i file_path 
    
# 机器a 
docker save image_name > /home/save.tar
 
# 使用scp将save.tar拷到机器b上,然后:
docker load < /home/save.tar
登录registry server(login)
# 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Usernamedocker login
 发布image(push)
# 发布docker镜像 
docker push new_image_name
根据Dockerfile 构建出一个容器
build 
   --no-cache=false Do not use cache when building the image 
   -q, --quiet=false Suppress the verbose output generated by the containers 
   --rm=true Remove intermediate containers after a successful build 
   -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success 
 
docker build -t image_name Dockerfile_path
View Code

 

Docker 基础

标签:lines   进程   管道   repo   分配   play   manage   output   gif   

原文地址:http://www.cnblogs.com/91king/p/7458435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!