Docker 前沿概述

简介: Docker是基于Go语言实现的开源容器项目。Docker是一个为开发者和系统管理员提供的开发,部署和运行的容器应用程序。Linux使用容器开发应用程序的这种方式称为容器化。Docker项目已加入Linux基金会,并遵循Apache2.0 协议,全部开源代码再http://github.com/docker 项目仓库进行维护。

什么是Docker?

Docker是基于Go语言实现的开源容器项目。Docker是一个为开发者和系统管理员提供的开发,部署和运行的容器应用程序。Linux使用容器开发应用程序的这种方式称为容器化。Docker项目已加入Linux基金会,并遵循Apache2.0 协议,全部开源代码再http://github.com/docker 项目仓库进行维护。

Docker的基本概念

Docker中包括三个基本概念:容器(Container)、镜像(Image)、仓库(Repository)

容器(Container) -- 镜像运行时的实体

先来看看容器较为官方的解释:容器就是将软件打包成基本单元,用来开发、交付和部署。

  • 容器镜像是轻量的、可执行的软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件是基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同环境上运行不同软件时的冲突。

镜像(Image) -- 一个特殊的文件系统

Docker中的Image镜像相当于是一个文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。

镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

用户可以通过编写Dockerfile创建新的镜像,也可以直接从类似github的Docker Hub上下载镜像使用。

仓库(Repository) -- 集中存放镜像文件的地方

如果你使用过 gitgithub 就很容易理解Docker的仓库概念。Docker仓库相当于一个 github 上的代码库。

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个镜像。

它们的范围大小依次是 仓库 > 镜像 > 容器

下面再来说说虚拟机

前面说到,容器在Linux上本机运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。

相比之下,虚拟机运行一个完整的客户操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。

下面这幅图很好的表述了这一点

33.png


容器和虚拟机的比较

这或许也就能解释 Docker 如此流行的原因

  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
  • Docker容器对系统资源需求很少,一台主机可以运行数千个Docker容器;
  • Docker通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
  • Docker通过Dockerfile支持灵活的自动化创新和部署机制,以提高工作效率,并标准化流程。

下图是Docker容器技术与传统虚拟机技术的比较:

特性 容器 虚拟机
启动速度 秒级 分钟级
性能 接近原生 较弱
内存代价 很小 较多
硬盘使用 一般为MB 一般为GB
运行密度 单机支持上千个容器 一般为几十个
隔离性 安全隔离 完全隔离
迁移性 优秀 一般

Docker 解决了什么样的问题

一项技术或者软件的流行都是为了解决某种问题应用而生的,那么话说回来了,Docker解决了什么问题呢?

  • 组织有序:如果没有Docker,一台机器就可能像是一个装满垃圾的抽屉,应用程序依赖各种资源,一些应用程序依赖各种代码库,语音,图像等。这种依赖关系很像分布式各个系统的调用网一样混乱不堪,如果用一张图来表示一下,就像是下面这样

34.jpg


但是Docker解决了这个问题,应用程序的各种依赖和环境都直接部署在Docker的容器中,起到隔离一切的目 的,就像是下图所示的这样

35.jpg


  • 提高可移植性:另一个软件的问题是,应用程序的依赖不仅只是资源的依赖,还有可能是系统环境的依赖,操作系统之间的移植性一直是软件用户的一个主要问题。虽然Linux和OS X之间可能会有某种兼容性,但是在Windows环境下开发的软件移植到Linux会很困难。
    Docker解决了这一点,因为Docker可运行在原生的Linux环境下,在OS X和Windows环境中通过单独的虚拟机也可以运行。
    这种新的移植性在几个方面有助于用户使用:第一,它将软件以前无法使用的地方彻底解锁。第二,它可以在任何系统上运行相同的软件。第三,软件维护人员可以集中精力在单一平台和一套依赖关系中编写他们的软件,这节省了大量的时间。
  • 保护你的机器:Docker就像是物理的牢房,容器里的任何东西只能访问它内部的东西。容器限制了一个程序对其他程序带来的影响范围、可访问的数据和系统资源的影响范围。下图说明了容器内部运行和外部运行软件的区别

36.jpg


下面就开始你的Docker搭建之旅吧!!!

准备你的docker环境

我为你准备了下面四种环境的docker安装教程,你可以根据教程来实现安装

Ununtu Docker安装https://www.runoob.com/docker/ubuntu-docker-install.html

CentOS Docker安装https://www.runoob.com/docker/centos-docker-install.html

Windows Docker安装https://www.runoob.com/docker/windows-docker-install.html

MacOS Docker安装https://www.runoob.com/docker/macos-docker-install.html

测试Docker 版本

  1. 安装完成后,运行docker --version 确保你的系统已经支持了docker

37.png

  1. 运行docker info(没有 - )以查看有关Docker安装的更多详细信息:


38.jpg

等等

测试Docker 安装

  1. 测试你的安装工作通过运行一个简单的docker 映像,hello-world:

39.jpg


  1. 列出来你机器上下载的hello-world 映像

40.jpg

  1. 列出显示其消息后退出的hello-world容器(由图像生成)。如果它仍在运行,则不需要--all选项:

41.png

回顾和备忘单

列出Docker CLI 命令

docker

docker container --help

显示docker version 和 info

docker --version

docker version

docker info

执行docker图像

docker run hello-world

列出docker 映像

docker image ls

列出docker容器

docker container ls

docker container ls --all

docker container ls -aq

            </div>
目录
相关文章
|
安全 Java API
ArrayList 全面详解
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文详细解析了Java集合框架中的ArrayList,包括其定义、特点、成员变量、构造函数、API、主要方法和扩容机制等。欢迎留言交流。
|
前端开发 JavaScript Android开发
React Native跨平台开发实战
【7月更文挑战第21天】React Native为跨平台移动应用开发提供了一种高效且强大的解决方案。通过本文的学习,你应该能够掌握React Native的基本概念和实战步骤,并开始在你的项目中使用React Native进行开发。随着你对React Native的深入理解,你将能够利用其强大的功能来构建更加复杂和高效的移动应用。
|
监控 安全 网络安全
非军事区 (DMZ) 在网络安全中的概念
【8月更文挑战第27天】
1836 0
|
存储 人工智能 自然语言处理
通过阿里云 Milvus 与 PAI 搭建高效的检索增强生成(RAG)系统
阿里云Milvus现已无缝集成于阿里云PAI平台,一站式赋能用户构建高性能的检索增强生成(RAG)系统。您可以利用Milvus作为向量数据的实时存储与检索核心,高效结合PAI和LangChain技术栈,实现从理论到实践的快速转化,搭建起功能强大的RAG解决方案。
通过阿里云 Milvus 与 PAI 搭建高效的检索增强生成(RAG)系统
|
存储 算法 Java
数据结构之动态内存管理机制(中)
数据结构之动态内存管理机制(中)
|
敏捷开发 存储 运维
阿里云云原生 DevOps - DevOps 基础概念
阿里云云原生 DevOps - DevOps 基础概念
阿里云云原生 DevOps - DevOps 基础概念
|
Java 数据库连接 数据库
数据库系列课程(13)-事务传播机制、隔离级别、通知类型
数据库系列课程(13)-事务传播机制、隔离级别、通知类型
186 0
|
存储 算法 大数据
大数据Flink容错机制
大数据Flink容错机制
258 0
LeetCode 80 Remove Duplicates from Sorted Array II
给定排序的数组nums,就地删除重复项,使重复项最多出现两次并返回新的长度. 不要为另一个数组分配额外的空间,必须通过使用O(1)复杂度的额外空间来修改输入数组,从而实现此目的.
185 0
LeetCode 80 Remove Duplicates from Sorted Array II
|
数据采集 传感器
相机与激光雷达标定:gazebo仿真livox_camera_lidar_calibration---标定数据采集与处理
ROS功能包:**livox_camera_lidar_calibration**提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。
相机与激光雷达标定:gazebo仿真livox_camera_lidar_calibration---标定数据采集与处理