文章目录
- 一、Docker 简介
- 二、Docker 核心概念
- 三、Docker 安装
- Linux 系统安装步骤:
- 四、Docker 基本操作
- 镜像操作
- 容器操作
- 五、Dockerfile 编写
- 六、Docker 网络管理
- 网络类型
- 网络操作
- 七、Docker 存储管理
- 数据卷(Volumes)
- 八、Docker 性能优化
- 九、Docker 容器化应用
- 单体应用容器化
- 微服务架构
- 十、Docker 容器化趋势
- 十一、总结
一、Docker 简介
Docker 是一个开源的容器化平台,允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中,从而实现快速、可靠的应用部署。容器是一种轻量级的虚拟化技术,与传统的虚拟机相比,它具有更高的资源利用率和更快的启动速度。
二、Docker 核心概念
- 镜像(Image):Docker 镜像是一个只读的模板,包含了运行一个应用程序所需的所有内容,如代码、运行时环境、库和配置文件等。
- 容器(Container):基于镜像创建的运行实例,可以在不同的环境中快速启动和停止。
- 仓库(Repository):用于存储和分发镜像的地方,类似于代码仓库。
- Dockerfile:定义镜像构建过程的文本文件。
- Docker 引擎:Docker 的核心组件,负责容器的创建、管理和运行。
三、Docker 安装
Linux 系统安装步骤:
- 更新 apt 包索引:
sudo apt-get update
- 安装依赖包:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置 Docker 稳定版的源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 更新 apt 包索引并安装 Docker CE(社区版):
sudo apt-get update sudo apt-get install docker-ce
- 启动 Docker 服务并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker
- 检查 Docker 是否正常工作:
docker --version
四、Docker 基本操作
镜像操作
- 查看镜像:
docker images
- 拉取镜像:
docker pull <image_name>
- 删除镜像:
docker rmi <image_name>
容器操作
- 创建并启动容器:
docker run -d --name mycontainer <image_name>
- 查看正在运行的容器:
docker ps
- 进入容器:
docker exec -it mycontainer /bin/bash
- 停止容器:
docker stop mycontainer
- 删除容器:
docker rm mycontainer
五、Dockerfile 编写
Dockerfile 是用来定义容器镜像的脚本,包含了所有容器构建的步骤。以下是一个简单的 Node.js 应用的 Dockerfile 示例:
# 使用官方 Node.js 镜像作为基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制 package.json 并安装依赖
COPY package*.json ./
RUN npm install
# 复制应用代码
COPY . .
# 暴露应用运行的端口
EXPOSE 3000
# 启动应用
CMD ["npm", "start"]
构建镜像:
docker build -t my-node-app .
运行容器:
docker run -d -p 3000:3000 --name my-container my-node-app
六、Docker 网络管理
网络类型
- 桥接网络:默认网络,容器可以通过桥接接口与宿主机通信。
- 自定义网络:可以创建自定义网络,实现容器之间的隔离和通信。
网络操作
- 创建自定义网络:
docker network create my-network
- 查看网络:
docker network ls
- 连接容器到网络:
docker network connect my-network mycontainer
七、Docker 存储管理
数据卷(Volumes)
容器中的数据是短暂的,容器停止或删除时数据会丢失。因此,持久化数据需要使用 Docker 卷(Volumes)。挂载卷的命令如下:
docker run -d -v /host/logs:/container/logs -p 3000:3000 --name my-container my-node-app
八、Docker 性能优化
- 选择正确的基础图像:从仅包含应用程序必需的依赖项的最小基础映像开始,这有助于减少容器的整体大小并缩短启动时间。
- 优化容器大小和图层:最大限度地减少 Docker 镜像中的层数并保持每层较小,这减少了图像拉取期间的开销并提高了缓存效率。
- 管理环境变量和配置:避免在容器映像内硬编码环境特定的配置,使用环境变量或配置文件。
九、Docker 容器化应用
单体应用容器化
- 编写 Dockerfile:
FROM alpine LABEL maintainer="nigelpoulton@hotmail.com" RUN apk add --update nodejs nodejs-npm COPY . /src WORKDIR /src RUN npm install EXPOSE 8080 ENTRYPOINT ["node", "./app.js"]
- 构建镜像:
docker build -t my-app .
- 运行容器:
docker run -p 8080:8080 my-app
微服务架构
Docker 容器的轻量级特性使得每个微服务可以在独立的容器中运行,确保了服务的高可用性、可扩展性和易管理性。
十、Docker 容器化趋势
- 容器原生云平台的兴起:Docker 将更加紧密地与云平台结合,提供高度集成的云服务。
- 多云和混合云环境下的容器化管理:Docker 将继续强化跨云平台和跨数据中心的容器编排能力。
十一、总结
Docker 通过容器化技术,简化了应用的开发、部署和运行过程,极大地提高了开发效率和系统的可维护性。掌握 Docker 的基本概念、安装方法、基本使用、Dockerfile 的编写、Docker Compose 的使用,以及如何将一个简单的应用封装成 Docker 容器并进行部署,可以在实际项目中发挥其强大的优势。