专栏首页程序员的碎碎念Docker 入门(一)

Docker 入门(一)

Docker 是什么

是一个能构建应用程序环境和部署应用程序到容器的开源引擎。

我们可以简单地将它理解为一个可以通过设计镜像自动地构建虚拟环境(容器)的工具。

在学习 docker 的运作原理时,我们先了解一些概念:

Docker 的关键组件

容器(作为虚拟环境运行)

镜像(用来创建容器)

仓库(repository,用来存放镜像)

registry(登记处、注册地,用来存放仓库)

这四个概念我用递进的形式列举出来,方便大家理解它们之间的关系。

仓库和 registry 是最好理解的,registry 就类似于 GitHub 那样的代码托管平台,GitHub 托管代码,而 registry 则托管镜像,GitHub 一般都是一个项目放在一个仓库,而 docker 的 registry 则是同系列的镜像放在一个仓库,比如 Ubuntu,Ubuntu 有很多个版本,我们就把这些不同版本的 Ubuntu 镜像都放在一个仓库。

容器则好像一个虚拟机,但又比虚拟机要精装很多,不需要虚拟机管理系统和虚拟机操作系统,仅仅包含了我们自己想要的应用程序运行环境,并在 docker 的加持下直接可运行。

镜像又是怎么样的?比如我们现在有一个 Django 的网站应用,部署到服务器上需要的环境和依赖假设有这些:CentOS7、python3.7、Django、uwsgi、nginx、mysql,我们可以在本地通过 docker 创建并运行一个基于 CentOS 镜像的容器,并在该容器中安装 python3.7、Django、uwsgi、nginx、mysql,安装完这些后,再保存该容器为一个新的镜像,该镜像就好像我们平时安装操作系统的那个镜像一样,可以被移植到其他电脑中创建基于该镜像的容器。

而镜像的构建则为 docker 中比较核心的内容。因为 docker 的主要功能之一就是构造出一个个我们想要的镜像,然后发布出来供其他人使用即可实现应用程序环境的自动搭建。

所以很有必要说一下 docker 的牛逼之处——镜像的构建过程:

就拿上面那个 Django 网站应用的例子来说,刚开始,是基于 CentOS镜像创建了一个容器,其实这个容器是分为了两部分,一部分是容器,一部分是镜像,而我们外部看来只是同一个东西——容器。

为什么这样呢?因为在 docker 中,镜像是只读的,也就是不可以修改,要修改镜像里面的内容,则会把镜像里对应的内容复制到容器中,在容器中修改,并在下次访问镜像中该内容前先检查容器中有没有该内容,如果有,则使用容器中的,没有则使用镜像中的,也就等于是容器中的内容覆盖了镜像中的对应内容。这就是大名鼎鼎的——写时复制

然后我们为该容器安装新的应用 python、Django、uwsgi、nginx、mysql等,其实都是在往我们的容器叠加这些程序的镜像,假如修改 nginx 的配置,其实就是复制了 nginx 镜像中有关配置信息的内容到容器后,再在容器中进行修改和引用。所以,我们看到的容器,其实就是一堆不同程序的镜像叠加在一起并加上一个记录我们的修改信息的可写容器。

有了这个容器,我们就可以在容器中运行应用程序。如果想要把这个运行环境移植到其他电脑上,则把这个容器提交为一个镜像(往哪里提交?往 docker 提交就行了,docker 有个守护进程在处理这些工作),再把该镜像保存到某个可以供别人下载的地方即可,比如 docker hub 上的仓库。

除了直接下载这个镜像,docker 还提供了通过 Dockerfile 的方式创建镜像。因为我们在上述创建镜像的过程中,无非就是一行一行的命令使得环境搭建起来了,而我们可以把这些命令写到一个文件——Dockerfile 中,让 docker 再自动按序执行这个 Dockerfile 中的命令就可以构建相同的镜像了。

以上便是 docker 及其使用的最简单的描述。如果某些地方不能理解的,欢迎留言,后续我会补充。

了解 docker 的大致原理后,我们便要开始下载安装 docker 和 学习基本的使用命令了。

下载安装都很简单,看官方文档或者看菜鸟教程就可以了,菜鸟教程差不多就是官方文档的中文版了。

本文分享自微信公众号 - 程序员的碎碎念(gh_53e607dd4782),作者:米国队长

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker入门(一)

    docker是一个用于开发,交付和运行应用程序的开放平台。docker能够将应用程序和基础架构分开,从而实现快速交付软件。通过利用docker的快速交付,测试和...

    故里
  • Docker 入门(一)

    程序明明在我本地跑得好好的,怎么部署上去就出问题了?如果要在同一台物理机上同时部署多个 node 版本并独立运行互不影响,这又该怎么做?如何更快速的将服务部署到...

    凌虚
  • 大白话Docker入门(一)

    老七Linux
  • 大白话Docker入门(一)

    随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍。目前的资料不少,但是由于docker的发...

    marsggbo
  • 大白话Docker入门(一) 原

    随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍。目前的资料不少,但是由于docker的发...

    wuweixiang
  • Docker 入门(一):理解三大核心

    Docker 的前世今生 Docker 的核心理念是 Build, Ship, and Run Any App, Anywher,即一次封装,到处运行。 从前,...

    zhisheng
  • Docker入门(一)-- 基础概念与安装

    Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并...

    CodingDiray
  • Docker入门第一节

    1、  什么是Docker Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以...

    苦咖啡
  • Docker快速入门(一)

    Docker是Go语言开发实现的容器。2013年发布至今,备受推崇。相关文档、学习资料十分详尽。近期公司docker项目要推进,得重新学习一下。博客以笔记。

    用户1432189

扫码关注云+社区

领取腾讯云代金券