Docker技术入门与实战(附电子书资料)
概述
- Docker 是一种开源的容器化平台,它能让开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何支持 Docker 的环境中,实现“一次构建,到处运行”。
- 电子书资料:
https://pan.quark.cn/s/ce24aeed066c
一、Docker 核心概念
-
镜像(Image)
- 是一个只读的模板,包含运行应用所需的代码、库、环境变量和配置文件。例如,一个 Python 镜像包含了 Python 运行环境。
- 类比:可以看作是一个“安装包”,里面预装了应用运行的所有东西。
-
容器(Container)
- 是镜像的运行实例,是一个独立的可执行单元。容器可以被创建、启动、停止、删除等。
- 类比:镜像相当于“类”,容器相当于“对象”,一个镜像可以生成多个容器。
-
仓库(Repository)
- 用于存放和分发 Docker 镜像的地方,分为公有仓库和私有仓库。
- 类比:类似代码仓库(如 GitHub),但存储的是镜像。
二、Docker 安装
根据操作系统选择对应安装方式:
- Windows:推荐使用 Docker Desktop(支持 Windows 10 专业版/企业版及以上,需开启 Hyper-V 或 WSL2)。
- macOS:使用 Docker Desktop(支持 Intel 和 M1 芯片)。
- Linux:通过包管理器安装(如 Ubuntu 用
apt-get install docker-ce
),需注意添加用户到docker
组以避免每次用sudo
。
安装完成后,运行 docker --version
验证是否成功。
三、Docker 常用命令
1. 镜像相关
docker pull [镜像名:标签]
:从仓库拉取镜像(如docker pull ubuntu:20.04
)。docker images
:查看本地所有镜像。docker rmi [镜像ID/名称]
:删除镜像(若有容器依赖需先删除容器)。docker build -t [镜像名:标签] [Dockerfile路径]
:根据 Dockerfile 构建镜像。
2. 容器相关
-
docker run [选项] 镜像名 [命令]
:创建并启动容器
常用选项:-d
:后台运行(守护模式)。-p 主机端口:容器端口
:端口映射(如-p 8080:80
将容器 80 端口映射到主机 8080)。-v 主机路径:容器路径
:挂载数据卷(持久化数据,如-v /data:/app/data
)。--name 容器名
:指定容器名称。
示例:docker run -d -p 80:80 --name mynginx nginx
(启动一个 Nginx 容器)。
-
docker ps
:查看正在运行的容器(加-a
查看所有容器,包括停止的)。 -
docker start/stop/restart [容器ID/名称]
:启动/停止/重启容器。 -
docker exec -it [容器ID/名称] /bin/bash
:进入运行中的容器(交互模式)。 -
docker rm [容器ID/名称]
:删除容器(加-f
强制删除运行中的容器)。
四、Dockerfile:构建自定义镜像
Dockerfile 是一个文本文件,包含构建镜像的指令。通过编写 Dockerfile,可以定制符合需求的镜像。
基本指令示例:
# 基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制当前目录文件到容器 /app
COPY . .# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 暴露端口
EXPOSE 5000# 容器启动时执行的命令
CMD ["python", "app.py"]
构建镜像:docker build -t mypythonapp:1.0 .
(.
表示当前目录的 Dockerfile)。
五、数据持久化:数据卷(Volume)
容器删除后,内部数据会丢失,通过数据卷可将数据持久化到主机:
docker volume create myvolume
:创建数据卷。docker run -v myvolume:/app/data 镜像名
:将数据卷挂载到容器。- 查看数据卷:
docker volume ls
,删除:docker volume rm 卷名
。
六、Docker Compose:管理多容器应用
当应用需要多个容器(如前端、后端、数据库)时,用 Docker Compose 可通过 YAML 文件定义并一键启动所有服务。
示例 docker-compose.yml
:
version: '3'
services:web:build: .ports:- "5000:5000"depends_on:- dbdb:image: mysql:8.0environment:- MYSQL_ROOT_PASSWORD=root- MYSQL_DATABASE=mydbvolumes:- mysql_data:/var/lib/mysqlvolumes:mysql_data:
常用命令:
docker-compose up
:启动所有服务(加-d
后台运行)。docker-compose down
:停止并删除容器、网络。docker-compose logs
:查看服务日志。
七、进阶知识
-
Docker 网络
- 容器间通信通过网络实现,默认有
bridge
(桥接,默认)、host
(共享主机网络)、none
(无网络)等模式。 - 可自定义网络:
docker network create mynet
,容器加入网络:docker run --network mynet 镜像名
。
- 容器间通信通过网络实现,默认有
-
镜像优化
- 使用轻量级基础镜像(如
alpine
版本)。 - 合并
RUN
指令,清理缓存(如apt-get clean
)。 - 使用
.dockerignore
文件排除不必要文件。
- 使用轻量级基础镜像(如
-
Docker 安全
- 避免用
root
用户运行容器。 - 限制容器资源(CPU、内存):
docker run --cpus 0.5 --memory 512m 镜像名
。
- 避免用
通过以上内容,你可以从基础操作逐步深入到实战应用。建议多动手实践,比如拉取镜像、创建容器、编写 Dockerfile,遇到问题时结合官方文档排查,很快就能掌握 Docker 的核心用法。