docker知识
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。通过 Docker,开发者可以轻松地在不同的环境中运行应用程序,而无需担心环境差异导致的问题。以下是关于 Docker 的一些核心概念和知识点:
一、Docker 的核心概念
-
容器(Container)
- 容器是 Docker 的核心单元,它是一个轻量级的、独立的、可执行的软件包,包含了运行应用程序所需的所有内容(代码、运行时、库、环境变量等)。
- 容器与虚拟机不同,它共享主机操作系统的内核,因此更加高效。
-
镜像(Image)
- 镜像是容器的基础模板,类似于虚拟机的快照。镜像是只读的,包含应用程序及其运行环境。
- 容器是由镜像启动的,镜像可以通过 Dockerfile 构建。
-
Dockerfile
- Dockerfile 是一个文本文件,包含了一系列指令,用于定义如何构建一个 Docker 镜像。
- 常见的指令包括
FROM
(指定基础镜像)、RUN
(执行命令)、COPY
(复制文件)、CMD
(指定默认命令)等。
-
仓库(Repository)
- 仓库是用来存储和分发镜像的地方,类似于代码托管平台(如 GitHub)。
- Docker Hub 是官方的公共镜像仓库,用户也可以搭建私有仓库。
-
网络(Network)
- Docker 提供了多种网络模式(如桥接模式、主机模式、无网络模式等),用于容器之间的通信。
- 可以通过自定义网络实现容器间的隔离或互联。
-
卷(Volume)
- 卷是 Docker 中用于持久化数据的机制,独立于容器的生命周期。
- 数据卷可以挂载到容器中,确保即使容器被删除,数据仍然保留。
二、Docker 的架构
Docker 的架构基于客户端-服务器模型,主要包括以下组件:
-
Docker Client
- 用户通过命令行工具(CLI)与 Docker Daemon 进行交互。
-
Docker Daemon
- Docker 的后台服务,负责管理镜像、容器、网络和卷等资源。
-
Docker Registry
- 存储和分发镜像的服务,默认使用 Docker Hub。
-
Docker Engine
- 包括 Docker Daemon 和容器运行时,是 Docker 的核心引擎。
三、常用 Docker 命令
1. 镜像相关
- 查看本地镜像:
docker images
- 拉取镜像:
docker pull <image_name>:<tag>
- 删除镜像:
docker rmi <image_id>
2. 容器相关
-
启动容器:
docker run [options] <image_name> [command]
常用选项:
-d
:后台运行-p
:端口映射(主机端口:容器端口)-v
:挂载数据卷(主机路径:容器路径)--name
:指定容器名称
-
查看运行中的容器:
docker ps
-
查看所有容器(包括停止的):
docker ps -a
-
停止容器:
docker stop <container_id>
-
删除容器:
docker rm <container_id>
3. 网络相关
- 查看网络:
docker network ls
- 创建自定义网络:
docker network create <network_name>
4. 日志与调试
- 查看容器日志:
docker logs <container_id>
- 进入容器内部:
docker exec -it <container_id> /bin/bash
四、Docker Compose
Docker Compose 是一个工具,用于定义和运行多容器的 Docker 应用程序。通过一个 YAML 文件(docker-compose.yml
),可以配置多个服务的镜像、网络、卷等。
示例 docker-compose.yml
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
常用命令
- 启动服务:
docker-compose up -d
- 停止服务:
docker-compose down
五、Docker 的优势
- 轻量化:容器比虚拟机更轻量,启动速度快,资源占用少。
- 一致性:开发、测试和生产环境保持一致,避免“在我机器上能运行”的问题。
- 隔离性:每个容器相互隔离,互不干扰。
- 可移植性:镜像可以在任何支持 Docker 的平台上运行。
- 生态丰富:Docker Hub 提供了大量现成的镜像,方便快速部署。
六、Docker 的应用场景
- 微服务架构:为每个服务创建独立的容器,便于管理和扩展。
- 持续集成/持续交付(CI/CD):通过 Docker 实现自动化的构建、测试和部署流程。
- 开发环境标准化:团队成员使用相同的容器环境,减少环境差异带来的问题。
- 快速部署:通过镜像快速部署应用,提升效率。
- 实验环境:快速搭建和销毁实验环境,节省资源。
七、常见问题与解决方案
-
镜像体积过大
- 使用多阶段构建(Multi-stage Build)优化镜像大小。
- 示例:
FROM node:16 AS build WORKDIR /app COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html
-
容器无法访问外部网络
- 检查 Docker 的网络配置,确保容器使用桥接模式。
- 使用
--network host
参数让容器共享主机网络。
-
数据丢失
- 使用数据卷(Volume)或绑定挂载(Bind Mount)持久化数据。