Docker 使用学习笔记
Docker - Build, Ship, and Run Any App, Anywhere
Docker 是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议 开源。
Docker 基于 Linux 内核的 cgroup, namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker 的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
Docker 的优点
相比传统的虚拟机(Virtual Machine),Docker 具有以下优点
- 系统资源占用少
- 启动速度快
- 简化配置运行环境
- 保持运行环境的一致性
- 更轻松的迁移
- 更轻松的维护和拓展
Docker 基本概念
Docker 使用客户端 - 服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
镜像(Image)
Docker 镜像是用于创建 Docker 容器的模板。
容器(Container)
容器是独立运行的一个或一组应用。
仓库(Repository)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub 提供了庞大的镜像集合供使用。
或通过国内的镜像仓库下载。
客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。
主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
其中企业版包含了一些收费服务,普通开发者一般用不到。使用社区版即可。
Docker CE 的安装请参考官方文档。
安装完成后,运行以下命令,检查是否安装成功
1 | $ docker --version |
Hello, World
使用 docker run [image]
命令来在容器内运行一个应用程序。
简单实验
1 | $ docker run hello-world |
查看镜像与容器
列出下载到本地的
hello-world
镜像:1
$ docker image ls
列出已创建的容器
1
2
3$ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS
9c3729544f4e hello-world "/hello" 10 seconds ago Exited (0) 9 seconds ago
运行说明
Docker run hello-world
包含了以下步骤:- 检查本地是否有镜像文件(Image)