开发者社区> season雅宁> 正文

Docker -- 系统整洁之道 -- 0

简介: 在我的小 rmbp 256G的硬盘里,实在是装不下100多个G的虚拟机了,所以想把一些东西迁移到这两年很火的Docker下,Docker以前也有过一两次,只是按着别人给的用法用的,具体的一些细节并没有深入,和git一样,这么牛掰的东西怎么能不好好学一些呢? Docker和虚拟机的区别 Docker是一种容器,虚拟机是一种管理程序虚拟机化(hypervisor virtualization,HV)。
+关注继续查看

在我的小 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](http://Introducing the Technical Preview of Docker Engine for Windows Server 2016)。

容器的优点:

  1. 一次save,到处运行。
  2. 启动速度快,消耗资源少。Docker与虚拟机性能比较

容器缺点:

  1. 资源隔离方面不如虚拟机。
  2. 安全性问题,“权限隔离”做的不够好,只要有Docker的命令权限,就可以操作所有的Docker实例。

Docker的目标


  1. 提供一个简单、轻量的建模方式。
  2. 职责的逻辑分离,防止开发环境和部署环境不一致,导致出现“开发时一切正常,肯定是运维问题”的情况。
  3. 快速、高效的开发生命周期。

Docker的核心组件


  1. Docker客户端和服务器

    Docker是一个C/S架构的程序,Docker客户端需要向Docker服务器发出请求,服务器完成请求后返回信息。一个本地Docker客户端可以连接远端的Docker服务器进行操作,如下图。

    这里写图片描述

  2. Docker镜像

    镜像是构建Docker世界的基石。用户基于镜像来维护自己的容器。Docker镜像是Docker容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker使用 UnionFS来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发Docker镜像变得简单和快速。

  3. Docker仓库(Registry)

    Docker使用Registry来保存用户构建的镜像,就像苹果的apple store。Registry分为私有和公有两种,Docker公司自己运营的Registry叫做Docker Hub。

  4. Docker容器

    Docker可以帮你构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台,Docker容器是Docker的运行部分。

  5. 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结果:

~  docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.12.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: null bridge host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.20-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952 GiB
Name: moby
ID: FSZQ:ZPKN:NEUW:55GH:Q33R:7L7M:5FLN:GW6E:CLHJ:NO66:WL4K:A3L5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 34
Goroutines: 98
System Time: 2016-09-29T01:48:55.851895948Z
EventsListeners: 2
Registry: https://index.docker.io/v1/
Insecure Registries:
127.0.0.0/8

Mac装好后如下图的样子,基本功能都已经在菜单上了。

这里写图片描述

同时Mac还有一个GUI界面Kitmatic,目前还是beta版,但是用起来还是很不错的。

这里写图片描述

各种各样的image看起来很好看。

使用入门


先把Docker的命令行打印出来。

~  docker --help
Usage: 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 quit

Commands:
   attach    Attach to a running container
   build     Build an image from a Dockerfile
   commit    Create a new image from a container's changes
   cp        Copy files/folders between a container and the local filesystem
   create    Create a new container
   diff      Inspect changes on a container's filesystem
   events    Get real time events from the server
   exec      Run a command in a running container
   export    Export a container's filesystem as a tar archive
   history   Show the history of an image
   images    List images
   import    Import the contents from a tarball to create a filesystem image
   info      Display system-wide information
   inspect   Return low-level information on a container, image or task
   kill      Kill one or more running containers
   load      Load an image from a tar archive or STDIN
   login     Log in to a Docker registry.
   logout    Log out from a Docker registry.
   logs      Fetch the logs of a container
   network   Manage Docker networks
   node      Manage Docker Swarm nodes
   pause     Pause all processes within one or more containers
   port      List port mappings or a specific mapping for the container
   ps        List containers
   pull      Pull an image or a repository from a registry
   push      Push an image or a repository to a registry
   rename    Rename a container
   restart   Restart a container
   rm        Remove one or more containers
   rmi       Remove one or more images
   run       Run a command in a new container
   save      Save one or more images to a tar archive (streamed to STDOUT by default)
   search    Search the Docker Hub for images
   service   Manage Docker services
   start     Start one or more stopped containers
   stats     Display a live stream of container(s) resource usage statistics
   stop      Stop one or more running containers
   swarm     Manage Docker Swarm
   tag       Tag an image into a repository
   top       Display the running processes of a container
   unpause   Unpause all processes within one or more containers
   update    Update configuration of one or more containers
   version   Show the Docker version information
   volume    Manage Docker volumes
   wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.'

我相信能用Docker都是的大神,就不翻译了。

在安装好以后来运行一个最简单的hello world吧。

docker run hello-world

所见即所得,如图。

这里写图片描述

在运行docker run的时候,可以看到打印出了Hello from Docker!,首先docker在本地去检查了是否有一个叫做hello-world的镜像,在这里,我们刚装好的docker里必然是没有的,所以docker就去Docker Hub上找这个镜像,找到以后下载下来,run。读一下这个helloworld的输出,可以docker run -it ubuntu bash来运行一个ubuntu。来试一试

# -i 代表保持STDIN开启,-t 代表为容器分配一个tty。
docker run -it ubuntu bash

运行以后,在docker hub里下载好ubuntu镜像后,docker构造好容器启动,就可以和正常的shell一样的进行操作了。

这里写图片描述

更多内容尽在docker-learn1。

参考链接


  1. [Introducing the Technical Preview of Docker Engine for Windows Server 2016](http://Introducing the Technical Preview of Docker Engine for Windows Server 2016)
  2. Docker与虚拟机性能比较
  3. 第一本Docker书
  4. 5分钟弄懂Docker
  5. 一次“奇幻”的Docker libcontainer代码阅读之旅
  6. Docker背后的容器管理—Libcontainer深度解析
  7. LXC:Linux 容器工具
  8. 阿里云Registry加速器
  9. docker使用阿里云Docker镜像库加速
  10. 非常好的一篇Docker教程,比较全面
  11. 知乎_Docker的应用场景在哪里
  12. 一个比较详细的命令用法

原文链接:http://dengnanyi.com/2016/09/28/docker-learn-0/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
Python自动化,大概也许或者是今年最具热度的话题之一了。七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那么Python自动化到底能帮我们做些什么呢? 第一,Python自动化可以避免熟练工种的重复工作,对于功能相对完整和成熟的软件,每发布一个新的版本,无论是大版本还是小版本,其中大部分功能和界面都几乎和上一个版本相似或完全相同,但所谓向上兼容,你不能因为新功能的产生而不对老版本功能进行测试工作,而这些老功能又在上一个版本上线时测过,所以这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。
109 0
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
70 0
远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统
我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能测试上自动化,而功能发布讲究三板斧:灰度、监控、止血。灰度属于测试范畴,止血则是亡羊补牢,今天我们来聊聊监控,提起监控,就不得不提在DepOps(自动化运维)领域鼎鼎有名的Prometheus(普罗米修斯),有人说这个开源系统的名字怎么有点如雷贯耳啊,没错,它的名字就是取自从宙斯手中为人类夺回圣火的古希腊神明普罗米修斯,而Prometheus的Logo恰恰就是奥林匹克圣火。Prometheus主要的功能就是可以无时不刻的监控所有部署在生产环境中的服务,如果服务出现问题则会
139 0
金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的、具备工业标准特性的应用协议,可以使用TCP协议提供访问控制和维护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。
41 0
一代版本一代神:利用Docker在Win10系统极速体验Django3.1真实异步(Async)任务
Django官方发布3.0版本,内核升级宣布支持Asgi,这一重磅消息让无数后台研发人员欢呼雀跃,弹冠相庆。大喜过望之下,小伙伴们兴奋的开箱试用,结果却让人大跌眼镜:非但说好的内部集成Websocket没有出现,就连原生的异步通信功能也只是个壳子,内部并未实现,很明显的换汤不换药,这让不少人转身投入了[FastAPI](https://v3u.cn/a_id_167)的怀抱。不过一年之后,今天8月,Django3.1版本姗姗来迟,这个新版本终于一代封神,不仅支持原生的异步视图,同时也支持异步中间件,明显整了个大活。
56 0
上穷碧落下凡尘:Win10系统下基于Docker配置Elasticsearch7配合Python3进行全文检索交互
基于文档式的全文检索引擎大家都不陌生,之前一篇文章:[使用Redisearch实现的全文检索功能服务](https://v3u.cn/a_id_105),曾经使用Rediseach来小试牛刀了一把,文中戏谑的称Rediseach已经替代了Elasticsearch,其实不然,Elasticsearch作为老牌的全文检索引擎还并没有退出历史舞台,依旧占据主流市场,桃花依旧笑春风,阿里也在其ecs服务中推出了云端Elasticsearch引擎,所以本次我们在Win10系统中依托Docker来感受一下Elasticsearch的魅力。
90 0
Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像
书接上回,之前一篇:[Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略](https://v3u.cn/a_id_163),阐述了如何使用Celery异步推送Websocket消息,现在我们利用Docker将这个完整项目部署起来,为什么用Docker呢?原因很简单,这种容器技术可以将整个项目用单个容器装起来,仅仅只需要维护一个简单的配置文件就告诉电脑每次部署要把什么东西装进容器,甚至把这个过程自动化,部署流程就会变得简单、方便。
94 0
关于mac 系统docker 使用桥接网络ip 宿主机无法访问容器的问题
关于mac 系统docker 使用桥接网络ip 宿主机无法访问容器的问题
456 0
云原生之使用docker部署Dochub文库系统
云原生之使用docker部署Dochub文库系统
265 0
云原生之使用docker部署centos系统测试环境
云原生之使用docker部署centos系统测试环境
138 0
+关注
season雅宁
大数据生态圈,计算机视觉,机器学习,高端技术的爱好者,话不多说,上代码!!!
文章
问答
视频
文章排行榜
最热
最新
相关课程
更多
相关电子书
更多
构建基因数据应用生态系统—— docker in Bio/informatics
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像