什么叫做 Docker

本文写于 2020 年 11 月 5 日

没有人会喜欢环境配置

在去年的时候我开始学习 Python,并利用 Python 制作了一些小工具。但问题是我很难让别人去用我的软件,除非我让他们安装 Python 的运行环境。

环境配置是编程与软件使用的拦路虎之一,还是挺凶猛的一只。用户必须保证操作系统的设置、库的安装……各种事项必须全部安装正确,你的程序才可以正常的跑起来——即便你完全配置成功了,你也可能因为环境变量的设置问题而失败。

除开使用者,开发者对于环境配置也十分头疼。例如多版本,我们经常需要同时编写多个项目,每个项目依赖的库的版本是可能不同的。

总而言之,环境配置很讨厌,我们需要解决这个痛点,软件他到底可不可以带着环境安装呢?

Docker 就是为了解决这个问题而生的,Docker 使得软件可以带着环境一起安装——也就是说,安装的时候会将原始环境一模一样地复制过来。

Docker 是什么?

Docker 是一个虚拟环境容器,可以让我们把开发环境、代码、配置文件打包到一个容器中,并且发布到任意平台。

如果我们在本地使用 Django 开发网站后台,开发测试完成后,就可以将我们依赖包、数据库、Nginx 等等打包到一个容器中,在进行部署。

Docker 有三个基础概念:Image(镜像)、Container(容器)、Repository(仓库)。

镜像

Image 类似于虚拟机中的「镜像」,它是一个包含有文件系统的、面向 Docker 引擎的只读模板

程序的运行是需要环境的,而 Image 就是用来提供环境的。例如,一个 mysql 镜像就是一个包含 mysql 运行环境的模板,如果我们再在此镜像上装上 Apache,我们就可以叫它 Apache + mysql 镜像。

容器

Container 是 Image 的实例,是一个沙盒。可以认为他就是一个极简的 Linux 系统环境,包括:root 权限、进程空间、用户空间、网络空间、其中的应用程序等等。

Docker 引擎利用 Container 来运行程序,不同的 Container 之间不可以互相影响。

我们可以创建、启动、停止、删除 Container——注意,Image 依然是只读的。

仓库

Repository 类似于 GitHub 的代码仓库,在 Docker 中是镜像仓库,用来存放镜像文件。

我们要注意,Repository 与 Registry 的区别在于:

Registry 是「存放仓库」的地方,一般会有很多个仓库;Repository 是「存放镜像」的地方,一般仓库会存放一类镜像,利用 tag 进行区分,例如 nodejs 9.x / 11.x / 12.x / 15.x 等。

Docker 与虚拟机的区别

虚拟机也是处理环境的一种方案,它可以在一个操作系统里运行另一种操作系统——例如在 Windows 中运行 Linux。

但是虚拟机会占用较多的硬件资源,哪怕程序只需要 1MB,但是虚拟机依然需要上百 MB 来维持自己的运行。另外,虚拟机是一个系统,需要启动、登陆等等步骤,较为繁琐,并且较慢。

Docker 的安装与换源

Docker 可以安装在 Windows、Linux、Mac 等各个平台上,具体可以查看文档 Install Docker

安装完成之后,可以使用 docker --version 查看版本信息。

安装之后我们会发现从自带的 Registry 下载 Image 的时候会发现比较慢,所以需要换源至中国地区。

19.03 的换源方法和之前不太一样,需要在设置中的 Docker Engine 加入:

"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]

即可。

常用命令

新版本的 Docker 自带一个 Docker Hub,可以在 GUI 下操作,但我们还是会经常用到命令的。

  1. docker ps 查看有哪些容器正在运行,其状态如何;
  2. docker kill container-name 可以关闭指定的容器;
  3. docker container start container-name 可以开启刚刚关闭的容器;
  4. docker rm container-name 可以删除容器;
  5. docker run --name container-name 启动新的容器,这里还有很多额外参数,自行谷歌。

(完)

什么叫做 Docker的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  5. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  8. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  9. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  10. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

随机推荐

  1. maven项目改造成springboot项目

    springboot项目其实归根到底就是一个maven项目,通常我们创建springboot项目,只要使用idea中的spring Initializr就可以创建就可以了. 今天我们来讲下如何改造一个 ...

  2. 16_伯德图_手绘技巧与应用_Bode Plot_Part2

  3. 【转载】10个Web3D可视化精彩案例

    1.化学元素周期表 六种排列方式,炫酷动画效果,TWaver 3D轻松实现. 演示地址:http://demo.servasoft.com/che... 2.DNA螺旋图 DNA3D模型,包含几千个球 ...

  4. 简单vue项目脚手架

    简单vue项目脚手架 github地址 使用技术栈 webpack(^2.6.1) webpack-dev-server(^2.4.5) vue(^2.3.3) vuex(^2.3.1) vue-ro ...

  5. lunix或者centos服务器下如何下载自己在github上面的项目代码

    1.在github找到项目压缩包下载地址 打开自己的github主页找到需要下载的项目首页,如图所示,找到zip下载地址(ps:如何找这个地址我就不多说了,了解过一点html的同学肯定很容易可以找到) ...

  6. python的字典及相关操作

    一.什么是字典 字典是Python中最强大的数据类型之一,也是Python语言中唯一的映射类型.映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希 ...

  7. 新手入门C语言第十章:C作用域规则

    C 作用域规则任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数 ...

  8. 【面试普通人VS高手系列】什么叫做阻塞队列的有界和无界

    昨天一个3年Java经验的小伙伴私信我,他说现在面试怎么这么难啊! 我只是面试一个业务开发,他们竟然问我: 什么叫阻塞队列的有界和无界.现在面试也太卷了吧! 如果你也遇到过类似问题,那我们来看看普通人 ...

  9. contact 和 footer 的页面制作

    1. html 结构 <section id="contact"> <div class="contact-form bg-primary p-2&qu ...

  10. python基础练习题(题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制)

    day11 --------------------------------------------------------------- 实例018:复读机相加 题目 求s=a+aa+aaa+aaa ...