3.1.4 Frame-工程化-Docker学习指南

98 阅读6分钟

前端Docker学习指南

1. 什么是Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 宣器解决方案。

Docker 将应用程序与其依赖项打包在一个文件中。运行这个文件时,会生成一个虚拟容器,程序在其中运行,就像在真实的物理机上运行一样。有了 Docker,就不用担心环境配置问题。

总的来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,将自己的应用放入容器中。容器还可以进行版本管理、复制、分享和修改,就像管理普通代码一样。

2. Docker的核心优势

使用 Docker 有以下几个主要优势:

  1. 环境一致性:开发、测试、生产环境保持一致,避免"在我机器上能运行"的问题
  2. 快速部署:容器启动速度快,可实现秒级部署应用
  3. 资源利用率高:相比虚拟机,容器更轻量,单机可运行更多容器
  4. 易于扩展:支持快速水平扩展,适合微服务架构

3. Docker的主要应用场景

  • 提供一次性的环境:比如本地测试他人软件、持续集成时提供单元测试和构建环境
  • 提供弹性的云服务:Docker 容器可以随开随关,很适合动态扩容和缩容
  • 组建微服务架构:通过多个容器,一台机器可以运行多个服务,在本机就能模拟微服务架构

4. Docker的核心概念

理解 Docker 的整个生命周期,需要掌握三个基本概念:镜像、容器和仓库。

4.1 镜像(Image)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

4.2 容器(Container)

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立命名空间。容器可以被创建、启动、停止、删除和暂停等。镜像与容器之间的关系,可以类比面向对象程序设计中的类和实例。

4.3 仓库(Repository)

镜像构建完成后,可以很容易在当前宿主机上运行。但如果需要在其他服务器上使用这个镜像,就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库;每个仓库可以包含多个标签;每个标签对应一个镜像,标签可以理解为镜像的版本号。

5. Docker安装指南

根据您的操作系统选择相应的安装方式:

安装完成后,运行以下命令验证是否安装成功:

docker version

6. 常用Docker命令

6.1 环境信息查看命令

docker info              # 查看当前 Docker 运行环境
docker history 镜像名     # 查看镜像历史Layer层级信息
docker stats 容器名       # 查看容器资源占用状态
docker logs 容器名       # 查看容器stdout日志,加上 -f 持续输出
docker cp 容器名:路径 本地路径  # 在容器和本地文件系统中拷贝文件

6.2 镜像管理命令

docker images           # 查看本地镜像列表
docker rmi 镜像名        # 删除镜像,-f表示强制删除
docker pull 镜像名       # 从仓库拉取镜像
docker push 镜像名:标签   # 推送镜像到仓库
docker search 镜像名     # 搜索仓库中的镜像
docker image prune -a   # 删除所有未被任何容器引用的镜像(即使它们有标签)
docker image prune      # 清理本地所有未被使用的镜像 没有标签(tag)且未被任何容器引用的镜像

6.3 容器管理命令

docker ps                # 查看正在运行的容器
docker ps -a             # 查看所有容器(包括已停止的)
docker run 镜像名        # 根据镜像创建并运行容器
docker rm 容器名         # 删除容器,-f表示强制删除
docker exec -it 容器名 bash  # 进入容器终端
docker start 容器名      # 启动已停止的容器
docker restart 容器名    # 重启容器
docker stop 容器名       # 停止容器
docker pause 容器名      # 暂停容器
docker unpause 容器名    # 恢复暂停的容器

6.4 认证相关命令

docker login             # 登录到镜像仓库
docker logout            # 登出镜像仓库

7. Dockerfile语法详解

Dockerfile 是一个文本文件,包含了一系列指令,用于创建 Docker 镜像。

7.1 基础指令

  • FROM:指定基础镜像,通常是 Dockerfile 中的第一条指令
  • RUN:在镜像中执行命令,每条 RUN 指令会创建一个新的镜像层
  • COPY:将文件复制到镜像中,作为新的层
  • EXPOSE:声明容器运行时监听的端口
  • ENTRYPOINT:指定容器启动时执行的命令
  • WORKDIR:设置工作目录
  • CMD:指定容器启动时执行的命令(可被 docker run 后面的命令覆盖)

7.2 示例Dockerfile

# 使用官方Node.js 16版本作为基础镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 复制package.json和package-lock.json(如果存在)
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 复制项目其他文件
COPY . .

# 构建项目
RUN npm run build

# 暴露端口
EXPOSE 3000

# 容器启动时执行的命令
CMD ["npm", "start"]

7.3 构建和运行命令

# 构建镜像
docker build -t my-app:latest .

# 运行容器
docker run -d -p 3000:3000 --name my-app-container my-app:latest

参数说明:

  • -d:后台运行容器
  • -p 3000:3000:端口映射(主机端口:容器端口)
  • --name:为容器指定名称
  • my-app:latest:使用的镜像名称和标签

8. 最佳实践建议

  1. 合理使用 .dockerignore 文件:排除不必要的文件,减小镜像体积
  2. 优化镜像层数:合并相关的 RUN 命令,减少镜像层数
  3. 选择合适的基础镜像:使用官方镜像或轻量级镜像(如 alpine)
  4. 及时清理无用镜像和容器:定期运行 docker system prune 清理系统
  5. 使用多阶段构建:减小最终镜像的大小

9. 参考资料