Docker -- 系统整洁之道 -- 0
来源:互联网 发布:qq群优惠券淘宝客软件 编辑:程序博客网 时间:2024/06/09 18:24
更好的排版,请查看http://dengnanyi.com/2016/09/28/docker-learn-0/。
在我的小 rmbp 256G的硬盘里,实在是装不下100多个G的虚拟机了,所以想把一些东西迁移到这两年很火的Docker下,Docker以前也有过一两次,只是按着别人给的用法用的,具体的一些细节并没有深入,和git一样,这么牛掰的东西怎么能不好好学一些呢?
Docker和虚拟机的区别
Docker是一种容器,虚拟机是一种管理程序虚拟机化(hypervisor virtualization,HV)。管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行在物理硬件之上,而容器(比如Docker)则是直接运行在操作系统内核之上的用户空间。由于容器是运行在操作系统上的,所以只能运行底层和宿主机相同或者类似的操作系统,比如说在Ubuntu下可以在容器里运行Centos,却不能运行Windows。
目前Windows上的Docker可以跑Linux的Docker容器,是因为底下跑了Linux的VM,但是马上就可以支持Windows Server 2016了,如链接Introducing the Technical Preview of Docker Engine for Windows Server 2016。
容器的优点:
- 一次save,到处运行。
- 启动速度快,消耗资源少。Docker与虚拟机性能比较
容器缺点:
- 资源隔离方面不如虚拟机。
- 安全性问题,“权限隔离”做的不够好,只要有Docker的命令权限,就可以操作所有的Docker实例。
Docker的目标
- 提供一个简单、轻量的建模方式。
- 职责的逻辑分离,防止开发环境和部署环境不一致,导致出现“开发时一切正常,肯定是运维问题”的情况。
- 快速、高效的开发生命周期。
Docker的核心组件
Docker客户端和服务器
Docker是一个C/S架构的程序,Docker客户端需要向Docker服务器发出请求,服务器完成请求后返回信息。一个本地Docker客户端可以连接远端的Docker服务器进行操作,如下图。
Docker镜像
镜像是构建Docker世界的基石。用户基于镜像来维护自己的容器。Docker镜像是Docker容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker使用 UnionFS来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发Docker镜像变得简单和快速。
Docker仓库(Registry)
Docker使用Registry来保存用户构建的镜像,就像苹果的apple store。Registry分为私有和公有两种,Docker公司自己运营的Registry叫做Docker Hub。
Docker容器
Docker可以帮你构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台,Docker容器是Docker的运行部分。
Docker的技术组件
Docker可以被安装在x64架构,内核3.10以上的linux系主机、win10以上windows和OS X 10.10.3且2010年以后的Mac上。在2013年Docker刚发布的时候,它是一款基于LXC的开源容器管理引擎。把LXC复杂的容器创建与使用方式简化为Docker自己的一套命令体系。 随着Docker的不断发展,它开始有了更为远大的目标,那就是反向定义容器的实现标准,将底层实现都抽象化到Libcontainer的接口。这就意味 着,底层容器的实现方式变成了一种可变的方案,无论是使用namespace、cgroups技术抑或是使用systemd等其他方案,只要实现了 Libcontainer定义的一组接口,Docker都可以运行。
安装
安装方法都很简单,值得注意的是当前Docker版本的安装需求,比如现在Linux下安装的需求就上x64架构,内核3.10以上。
Mac下安装方法,直接在官网上下载docker app,安装即可。
Linux下安装方法,Linux下最简单的安装方法就是apt和yum包管理工具进行安装了。
Windows下安装方法
还有一个比较好用的安装脚本,这个脚本只支持在lsb、debian、fedora、oracle、centos、redhat、os这几个发行版中使用。
在安装结束后,可以使用docker info
命令来查看Docker是否装好了。Mac下的docker info结果:
123456789101112131415161718192021222324252627282930313233343536373839
~ docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 1.12.1Storage Driver: aufsRoot Dir: /var/lib/docker/aufsBacking Filesystem: extfsDirs: 0Dirperm1 Supported: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: null bridge host overlaySwarm: inactiveRuntimes: runcDefault Runtime: runcSecurity Options: seccompKernel Version: 4.4.20-mobyOperating System: Alpine Linux v3.4OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 1.952 GiBName: mobyID: FSZQ:ZPKN:NEUW:55GH:Q33R:7L7M:5FLN:GW6E:CLHJ:NO66:WL4K:A3L5Docker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): trueFile Descriptors: 34Goroutines: 98System Time: 2016-09-29T01:48:55.851895948ZEventsListeners: 2Registry: https://index.docker.io/v1/Insecure Registries:127.0.0.0/8
Mac装好后如下图的样子,基本功能都已经在菜单上了。
同时Mac还有一个GUI界面Kitmatic,目前还是beta版,但是用起来还是很不错的。
各种各样的image看起来很好看。
使用入门
先把Docker的命令行打印出来。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
~ docker --helpUsage: docker [OPTIONS] COMMAND [arg...]docker [ --help | -v | --version ]A self-sufficient runtime for containers.Options:--config=~/.docker Location of client config files-D, --debug Enable debug mode-H, --host=[] Daemon socket(s) to connect to-h, --help Print usage-l, --log-level=info Set the logging level--tls Use TLS; implied by --tlsverify--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA--tlscert=~/.docker/cert.pem Path to TLS certificate file--tlskey=~/.docker/key.pem Path to TLS key file--tlsverify Use TLS and verify the remote-v, --version Print version information and quitCommands:attach Attach to a running containerbuild Build an image from a Dockerfilecommit Create a new image from a container's changescp Copy files/folders between a container and the local filesystemcreate Create a new containerdiff Inspect changes on a container's filesystemevents Get real time events from the serverexec Run a command in a running containerexport Export a container's filesystem as a tar archivehistory Show the history of an imageimages List imagesimport Import the contents from a tarball to create a filesystem imageinfo Display system-wide informationinspect Return low-level information on a container, image or taskkill Kill one or more running containersload Load an image from a tar archive or STDINlogin Log in to a Docker registry.logout Log out from a Docker registry.logs Fetch the logs of a containernetwork Manage Docker networksnode Manage Docker Swarm nodespause Pause all processes within one or more containersport List port mappings or a specific mapping for the containerps List containerspull Pull an image or a repository from a registrypush Push an image or a repository to a registryrename Rename a containerrestart Restart a containerrm Remove one or more containersrmi Remove one or more imagesrun Run a command in a new containersave Save one or more images to a tar archive (streamed to STDOUT by default)search Search the Docker Hub for imagesservice Manage Docker servicesstart Start one or more stopped containersstats Display a live stream of container(s) resource usage statisticsstop Stop one or more running containersswarm Manage Docker Swarmtag Tag an image into a repositorytop Display the running processes of a containerunpause Unpause all processes within one or more containersupdate Update configuration of one or more containersversion Show the Docker version informationvolume Manage Docker volumeswait Block until a container stops, then print its exit codeRun 'docker COMMAND --help' for more information on a command.'
我相信能用Docker都是的大神,就不翻译了。
在安装好以后来运行一个最简单的hello world吧。
1
docker run hello-world
所见即所得,如图。
在运行docker run
的时候,可以看到打印出了Hello from Docker!
,首先docker在本地去检查了是否有一个叫做hello-world
的镜像,在这里,我们刚装好的docker里必然是没有的,所以docker就去Docker Hub上找这个镜像,找到以后下载下来,run。读一下这个helloworld的输出,可以docker run -it ubuntu bash
来运行一个ubuntu。来试一试
12
# -i 代表保持STDIN开启,-t 代表为容器分配一个tty。docker run -it ubuntu bash
运行以后,在docker hub里下载好ubuntu镜像后,docker构造好容器启动,就可以和正常的shell一样的进行操作了。
更多内容尽在docker-learn1。
参考链接
- Introducing the Technical Preview of Docker Engine for Windows Server 2016
- Docker与虚拟机性能比较
- 第一本Docker书
- 5分钟弄懂Docker
- 一次“奇幻”的Docker libcontainer代码阅读之旅
- Docker背后的容器管理—Libcontainer深度解析
- LXC:Linux 容器工具
- 阿里云Registry加速器
- docker使用阿里云Docker镜像库加速
- 非常好的一篇Docker教程,比较全面
- 知乎_Docker的应用场景在哪里
- 一个比较详细的命令用法
- Docker -- 系统整洁之道 -- 0
- Docker -- 系统整洁之道 -- 0
- Docker -- 系统整洁之道 -- 1
- 代码整洁之道-----系统
- 代码整洁之道--系统,并发
- 代码整洁之道 类 系统
- [代码整洁之道]-整洁代码
- 代码整洁之道精华——第十一章 系统
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 架构整洁之道
- 代码整洁之道
- 《代码整洁之道》
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- window下利用navicat访问Linux下的mariadb数据库
- 安装虚拟机工作站
- linux学习笔记--finger命令
- Rebound库使用分享
- Apache Options Indexes FollowSymLinks详解
- Docker -- 系统整洁之道 -- 0
- jQuery 效果 方法
- Linux简单操作命令行之一,普通命令
- 从四个方面谈一谈经典的==和equals的问题
- Kafka配置文件Server.properties文件的配置
- jQuery HTML / CSS 方法
- 卷积神经网络参数说明
- linux 实战篇 攻略(一)
- linux 实战篇 攻略(二)