西贝的代码宇宙

Back

Docker 入门

Docker 的基本概念,以及容器解决的部署与隔离问题。

Docker 是什么?解决了什么问题?#

每次给电脑安装开发环境的时候都非常折腾,甚至还会遇到多版本管理的问题;软件开发好后部署到服务器,也会遇到类似的问题。程序员们觉得,程序开发好后,如果能直接把程序和运行环境都打包好,发到服务器上运行,就很方便了。

当然,实现这个思路也有很多种方法。最传统的思路是:把程序和运行环境做成安装包,直接在服务器上安装。不过,这个方法很可能导致多版本环境冲突,因此我们需要让环境与环境之间相互隔离。学过计算机操作系统的同学应该在课堂上摸过 Linux 虚拟机:那能不能把程序和环境打包在一个虚拟机镜像中,服务器上直接运行这个虚拟机镜像?这个方法是可行的,但也出现了一个非常严重的问题:虚拟机镜像中也包含完整的 Linux 操作系统,每一个虚拟机都会占用大量硬件资源去执行进程管理、文件管理,导致资源浪费。

Docker 也觉得虚拟机太重了,于是他们自己实现了一套虚拟系统:程序和环境(不再包含 Linux 系统内核)可以打包成 Docker image,镜像运行起来的每个实例叫做 Docker container。

所以可以先用一句话概括:

Docker 是一个轻量级的容器化技术,它把应用程序及其依赖打包成镜像,并在隔离的容器中运行。

为什么 Docker 现在广泛应用于云原生、Self-Hosted?可以想一想:只要你的电脑安装了 Docker,别人打包好的应用就可以在你的电脑上部署,你自己打包好的应用也可以在各处运行。Build once, run everywhere,确实很美好。