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/

相关文章
|
25天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
59 3
|
1月前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
99 2
|
2月前
|
人工智能 数据安全/隐私保护 虚拟化
Docker部署MaxKB详细步骤(window系统)
这篇文章详细介绍了如何在Windows系统上使用Docker部署MaxKB,并提供了从安装Docker到运行MaxKB容器的详细步骤,以及如何通过浏览器访问和配置MaxKB来使用ollama和llama3模型进行问答。
643 1
Docker部署MaxKB详细步骤(window系统)
|
2月前
|
Ubuntu jenkins 持续交付
Ubuntu系统 用docker安装jenkins
Ubuntu系统 用docker安装jenkins
|
4月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
5月前
|
存储 关系型数据库 数据安全/隐私保护
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
【7月更文挑战第23天】使用Docker部署Plik 临时文件上传系统
68 1
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
|
4月前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
|
4月前
|
数据可视化 应用服务中间件 nginx
使用Docker搭建网站流量可视化统计系统
使用Docker搭建网站流量可视化统计系统
|
4月前
|
Java BI 测试技术
【Docker项目实战】使用Docker部署SurveyKing调查问卷系统和考试系统
【8月更文挑战第5天】使用Docker部署SurveyKing调查问卷系统和考试系统
191 1
|
4月前
|
安全 Ubuntu Shell
深入挖掘Debian系统中安装Docker
【8月更文挑战第21天】在Debian系统中安装Docker需按步骤操作:首先确保软件包更新,执行`sudo apt update`并安装必要软件包支持HTTPS;接着添加Docker官方GPG密钥以验证包的完整性和安全性;然后设置Docker稳定版仓库,通过`tee`命令配置仓库文件;再更新软件包索引;最后安装Docker Engine并通过运行测试容器确认安装成功。此指南适用于多数Debian版本,如遇问题请查阅官方文档。
323 0

热门文章

最新文章