Docker(2013)
关键词:容器化、隔离、镜像
Docker 本质是:轻量级虚拟机(容器)。
- Docker 核心之一,借助 Linux Namespace 技术实现了视图隔离。
- Docker 另一个核心功能,基于 Linux Cgroups 技术实现的资源限制。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
- Docker 的第三个核心功能:容器镜像(rootfs),将运行环境打包成镜像,从而避免环境问题导致应用无法运行。
bash
docker run nginx核心思想:一次构建,到处运行。
TODO List
- [ ] docker ps
- [ ] docker-compose up -d
- [ ] restart always
- [ ] logs

使用 Docker 有什么局限?
Docker 本身能够管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供诸如网络、安全和遥测等服务。于是,Kubernetes 应运而生。
Dockerfile


bash
# 基础镜像
FROM node:14
# 工作目录
WORKDIR /app
# 复制文件
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制文件
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD [ "npm", "run", "dev" ]Docker Compose
容器编排:容器管理工具,管理多个容器。
bash
docker-compose up -d
Docker 常见命令
bash
docker ps
docker logs -f --tail 100 <container_id>
docker exec -it <container_id> /bin/bash
docker pull <image_name>
docker run -d -p 80:80 --name <container_name> <image_name>
docker stop <container_name>
docker rm <container_name>
docker rmi <image_name>
docker images
docker build -t <image_name> .
docker run -d -p 80:80 --name <container_name> <image_name>

Docker 相关概念
端口映射
将容器端口映射到宿主机端口。
具体操作如下:
bash
docker run -d -p 80:80 --name <container_name> <image_name>挂载卷
将宿主机目录挂载到容器目录。
为什么要挂载卷?
- 容器删除后,数据丢失。
- 容器间数据共享。
具体操作如下:
bash
docker run -d -p 80:80 -v /data:/app --name <container_name> <image_name>容器互联
容器间通过容器名进行通信。
为什么需要容器互联?
- 容器间需要通信。
- 容器间需要共享数据。
具体操作如下:
bash
docker run -d -p 80:80 --name <container_name> <image_name>
docker run -d --name <container_name2> --link <container_name>:<container_name2> <image_name2>

Docker 容器运行

OCI 标准 (Open Container Initiative)
OCI 是由 Docker、CoreOS 等组织对容器格式及运行时建立统一的行业标准。 OCI 主要定义两个规范:
- 镜像规范(image-spec)定义了镜像的主要格式及内容
- 运行时规范(runtime-spec) 运行时规范定义镜像文件运行的管理, 而 runC 则是 目前使用最广泛的 Low-Level 容器运行时(runC 包含 libcontainer,包括对 namespace 和 cgroup 的调用操作)。

