Docker 教程

Docker 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

为什么要使用 Docker?

  • 更高效的利用系统资源

  • 更快速的启动时间

  • 一致的运行环境

  • 持续交付和部署

  • 更轻松的迁移

  • 更轻松的维护和扩展

Docker 与传统虚拟化的区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,而容器内的应用直接运行在宿主机的操作系统上。

  • 容器不需要进行硬件虚拟以及操作系统虚拟,因此容器的性能开销极小。

  • Docker 属于操作系统层面的虚拟化技术。

容器与虚拟机的区别

  • 容器是用户态的进程,而虚拟机是内核态的进程。

  • 容器是不需要虚拟出一套硬件,不需要进行硬件虚拟以及操作系统虚拟,因此容器的性能开销极小。

  • 容器是直接运行在宿主机的操作系统上,而虚拟机是运行在虚拟机监控器(VMM)上。

Docker 基本原理和概念

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

Docker 安装

  • Docker 官网

  • Docker 官方文档

  • Docker Hub

注意:Docker for Windows 要求系统打开 Hyper-V,而 VMware Workstation 和 VirtualBox 等虚拟机软件也需要使用到虚拟化技术,因此这些软件不能在同一台机器上同时运行。详见链接:Windows 下 Docker 与 VMware 共存

这里我选择在 Windows 系统下安装 VMware Workstation 虚拟机,然后在虚拟机中安装 Ubuntu 系统,再在 Ubuntu 系统中安装 Docker。套娃了属于是

1
2
3
4
5
6
7
8
9
10
11
12
Ubuntu 22.04.2 LTS
The latest LTS version of Ubuntu, for desktop PCs and laptops. LTS stands for long-term support — which means five years of free security and maintenance updates, guaranteed until April 2027.

Ubuntu 22.04 LTS release notes

Recommended system requirements:

2 GHz dual-core processor or better
4 GB system memory
25 GB of free hard drive space
Internet access is helpful
Either a DVD drive or a USB port for the installer media

容器化和 Dockerfile

容器化是指将应用程序及其依赖,打包成一个镜像,运行时再通过这个镜像来创建容器,这样就实现了应用程序的容器化。

Dockerfile 是一个文本文件,用来配置镜像,Docker 根据 Dockerfile 的配置信息来构建镜像。

  1. 编写 Dockerfile 文件

  2. 执行 docker build 命令来构建镜像

  3. 执行 docker run 命令来创建并启动容器

实践

  1. 创建项目目录 HelloDocker

  2. 在项目目录下创建 index.js 文件

1
conslone.log('Hello Docker!');
  1. 使用命令 node index.js 来运行 index.js 文件,输出 Hello Docker!

  2. 在项目目录下创建 Dockerfile 文件

1
2
3
4
FROM node:14.17.0-alpine3.13
COPY index.js /app/index.js
WORKDIR /app
CMD node index.js
  1. 使用命令 docker build -t hello-docker . 来构建镜像

  2. 使用命令 docker image ls 来查看镜像列表

  3. 使用命令 docker run hello-docker 来创建并启动容器

  4. (可选) 使用命令 docker ps -a 来查看容器列表

  5. (可选) 使用命令 docker rm -f <container-id> 来删除容器

  6. (可选) 使用命令 docker rmi <image-id> 来删除镜像

  7. (可选) 上传镜像到 Docker Hub

  8. (可选) 在线运行镜像,使用 Docker Playground

DockerCompose

DockerCompose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务,然后使用一个命令,即可从 YML 文件配置中创建并启动所有服务。
Compose 可以在所有环境中工作:生产、阶段、开发、测试等。

docker-compose.yml 文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis

Compose 有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的常用命令:

  • docker-compose up:创建并启动所有容器。

  • docker-compose up -d:创建并启动所有容器,后台运行。

  • docker-compose up --build:创建并启动所有容器,强制重新构建镜像。

  • docker-compose up -d --build:创建并启动所有容器,后台运行,强制重新构建镜像。

  • docker-compose ps:查看项目中的容器。

  • docker-compose logs:查看容器日志。

  • docker-compose logs -f:查看容器日志,实时输出。

参考链接:

  • Docker Compose

  • docker compose 配置文件 .yml 全面指南