什么叫做 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. IOC 初始化源代码阅读之我见

    由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出.由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出.由于代码太过于复杂,在本次博客中,只列 ...

  2. ubuntu 20.04 安装 ros1 和ros2

    ubuntu  选择Hong Kong 源 1. ROS1安装 添加 sources.list(设置你的电脑可以从 packages.ros.org 接收软件.) sudo sh -c '. /etc ...

  3. h4ck47h0n ? h4ck3r ? I"m just a coder......

    [0x00]刚开了专栏,没事过来投投稿混眼熟啦~//才不是为了抱枕呢刚刚结束了黑客马拉松,回来也是缓了好久才缓过来.这么高强度的脑洞劳动···阿不,是脑力劳动的说.真的第一次.说起来,跟代码相识,还是 ...

  4. 探讨:微信小程序应该如何设计

    微信小程序公测后,开发者非常热情,都有很高的期待,都想抓住这一波红利.但是热情背后需要冷静,我们需要搞清楚两个问题: 微信想要我们做什么?微信小程序可以做什么? 微信想要我们做什么? 首先来弄清楚微信 ...

  5. Python使用函数模拟“汉诺塔”过程

    运行效果: 源代码: 1 # -*- coding:utf-8 -*- 2 ##汉诺塔游戏开始 3 _times=0 #用于统计移动次数 4 def hannuota(nlist,mfrom,mpas ...

  6. 小程序滚动事件之头部渐隐渐现demo

    效果图: ==>  代码: //test1.wxml <view class='header' style="opacity:{{opacityStyle}}" hid ...

  7. P7683 [COCI2008-2009#5] KRUSKA

    洛谷上这道题的第一篇题解.上海加油. 题目大意 Aladdin 已经厌倦了宫殿里的生活.他有一份稳定的工作,他的妻子 Jasmine 和孩子们都在路上,生活变得单调.在这一切的驱使下,他决定在安顿下来 ...

  8. 关于croptool无法裁剪分辩率过低的图片

    在使用croptool.js时,如果图片的分辨率过低,则无法裁剪超过分辨率的大小.比如说 function chooseImg(event){ var files = event.files || e ...

  9. Water 2.5.9 发布,一站式服务治理平台

    Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...

  10. 1.5 万字 + 40 张图解 HTTP 常见面试题

    作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林,我最开始写的第一篇图解文章就是这篇: 那时候我也就不到 100 读者,如今这篇阅读都快 ...