目录
前言
一、Docker核心概念
1. 镜像
2. 容器
3.容器 vs 虚拟机
4. 仓库
5. 容器与宿主机文件交互
二、数据卷与挂载
1.挂载
2.数据卷
3.数据卷挂载
4.本地目录挂载
5. 挂载模式对比
三、容器网络
1. 网络模式
2. 自定义网络
3. 端口映射
四、Dockerfile与自定义镜像
1. 关于Dockerfile
2. Dockerfile核心指令
3. 自定义镜像
五、Docker Compose
docker-compose-toc" name="tableOfContents" style="margin-left:80px">1. 关于docker-compose
2. 配置文件示例
3. 常用命令
dockerfile%E5%AF%B9%E6%AF%94-toc" name="tableOfContents" style="margin-left:80px"> 4.run与dockerfile对比
六、run命令详解
1.基础语法
2.常用参数表
3.常用参数详解
4.综合示例
5.注意事项
七、总结
1.核心概念
2.命令大全
前言
容器是一种轻量级的虚拟化技术,用于将应用程序及其依赖环境打包在一起,形成一个独立的运行单元。容器共享宿主机的操作系统内核,但拥有独立的文件系统、网络和进程空间。容器的主要特点是轻量、快速、可移植。
容器技术(如Docker)带来了显著的开发和运维变革,其核心优势体现在以下几个方面:
1. 环境一致性
-
问题:开发、测试、生产环境差异导致「在我机器上能运行」问题。
-
解决:容器将应用代码、依赖库、配置文件等打包成镜像,确保跨环境一致性。
-
示例:开发人员在本地构建镜像后,测试和生产环境可直接运行同一镜像,避免环境差异导致的故障。
2. 资源高效利用
-
传统虚拟机:每个 VM 需运行完整操作系统,占用大量内存和磁盘空间。
-
容器:共享宿主机内核,无需额外操作系统开销;资源占用低,启动速度快。
-
对比:一台物理机可运行数百个容器,而虚拟机通常只能运行数十个。
3. 快速部署与扩展
-
快速启动:容器秒级启动,适合敏捷开发和弹性扩缩容。
-
一键部署:通过镜像和编排工具(如 Docker Compose、Kubernetes)实现自动化部署。
-
示例:电商大促时,通过 Kubernetes 快速扩展 100 个容器实例应对流量高峰。
4. 隔离性与安全性
-
进程隔离:每个容器拥有独立的文件系统、网络和进程空间。
-
资源限制:通过
cgroups
限制 CPU、内存使用,避免单一容器耗尽资源。 -
示例:在同一个宿主机上运行 Java 和 Python 应用,彼此依赖冲突或资源竞争问题被隔离。
5. 支持微服务架构
-
解耦应用:将单体应用拆分为多个独立容器(如订单服务、支付服务)。
-
独立更新:单个服务升级不影响其他服务。
-
示例:使用 Docker 和 Kubernetes 管理数百个微服务,每个服务独立开发、部署和扩展。
6. 持续集成与持续交付(CI/CD)
-
流水线集成:容器镜像作为交付单元,贯穿开发、测试、生产流程。
-
快速回滚:通过镜像版本快速回退到旧版本。
-
示例:GitLab CI 自动构建镜像并推送到仓库,Jenkins 触发 Kubernetes 滚动更新。
7. 跨平台与云原生
-
多云兼容:容器镜像可在任何支持 Docker 的环境中运行(AWS、Azure、本地服务器)。
-
云原生基础:容器是 Kubernetes、Service Mesh 等云原生技术的基石。
-
示例:应用在本地开发后,无需修改即可部署到 AWS EKS 或阿里云 ACK。
8. 简化运维复杂度
-
统一管理:通过编排工具集中管理容器生命周期(启动、停止、监控、日志)。
-
标准化操作:所有应用以容器形式运行,运维流程标准化。
-
示例:使用 Prometheus 监控所有容器的资源使用,Grafana 统一展示仪表盘。
9. 生态系统与工具支持
-
丰富工具链:Docker Hub(镜像仓库)、Kubernetes(编排)、Helm(包管理)、Istio(服务网格)。
-
社区支持:开源社区提供海量镜像和解决方案。
示例:
直接从 Docker Hub 拉取 Redis、MySQL 等官方镜像,无需手动安装配置。
一、Docker核心概念
1. 镜像
定义:
镜像(Image)是一个只读模板,包含运行应用所需的代码、运行时环境、系统工具和依赖库。镜像采用分层存储结构,每一层可复用(如基础操作系统层、依赖库层、应用代码层)。
特点:
-
不可变性:镜像一旦构建完成,内容不可修改。
-
复用性:基于同一基础镜像可衍生多个子镜像。
镜像操作:
# 拉取镜像
docker pull nginx:latest# 列出本地镜像
docker images# 删除镜像
docker rmi <image_id># 构建镜像(需在 Dockerfile 所在目录运行)
docker build -t my-image:1.0 .
2. 容器
定义:
容器(Container)是镜像的运行实例,具有独立的文件系统、网络和进程空间。容器共享宿主机的内核,通过cgroups
和namespaces
实现资源隔离。
特点:
-
轻量级:启动快(秒级)、资源占用低。
-
隔离性:进程、网络、文件系统相互隔离。
容器操作:
# 创建并启动容器(后台运行)
docker run -d --name my-nginx nginx# 启动并进入容器终端
docker run -it --name my-alpine alpine:latest sh# 查看运行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 停止容器
docker stop <container_id># 启动停止的容器
docker start <container_id># 强制停止容器
docker kill <container_id># 删除容器
docker rm <container_id># 查看容器日志
docker logs <container_id># 进入运行中的容器终端
docker exec -it <container_id> /bin/bash
3.容器 vs 虚拟机
特性 | 容器 | 虚拟机 |
---|---|---|
虚拟化层级 | 操作系统级(共享内核) | 硬件级(独立内核) |
启动速度 | 秒级 | 分钟级 |
资源占用 | 低(MB 级内存) | 高(GB 级内存 + Guest OS) |
隔离性 | 进程级隔离 | 完全隔离 |
4. 仓库
定义:
存储和分发镜像的服务,分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor)。
操作:
# 推送镜像
docker push my-image:1.0# 拉取镜像
docker pull my-image:1.0
5. 容器与宿主机文件交互
# 从容器复制文件到宿主机
docker cp <container_id>:/path/to/file /host/path# 从宿主机复制文件到容器
docker cp /host/path <container_id>:/path/to/file
二、数据卷与挂载
1.挂载
在 Docker 中,挂载(Mount) 是将宿主机的目录、文件或数据卷与容器内部路径关联的过程。挂载的核心目的是解决容器数据持久化、跨容器共享数据以及与宿主机文件交互的需求。
为什么需要挂载?
1. 容器文件系统的临时性
-
默认行为:容器的文件系统是临时的,容器被删除后,其内部生成的数据(如数据库文件、日志、配置文件)也会丢失。
-
问题:若直接将数据写入容器内部,重要数据无法持久保存。
-
解决:通过挂载将数据存储在宿主机或数据卷中,确保数据生命周期独立于容器。
2. 开发与生产环境的需求
-
开发调试:在容器中运行应用时,需实时修改代码并查看效果,避免频繁重建镜像。
-
配置管理:动态调整配置文件(如 Nginx、MySQL 配置),无需重新构建镜像。
-
数据共享:多个容器需要访问同一份数据(如上传文件目录、日志目录)。
2.数据卷
定义:
-
数据卷(Volume)是由Docker管理的持久化存储机制,独立于容器的生命周期。
-
数据卷存储在宿主机的
/var/lib/docker/volumes
目录下,由Docker自动创建和管理。
特点:
-
持久化:数据卷的生命周期独立于容器,删除容器不会影响数据卷。
-
共享性:多个容器可以挂载同一个数据卷,实现数据共享。
-
高效性:数据卷通过Docker管理,性能优于本地目录挂载。
使用场景:
-
数据库文件(如MySQL数据目录)。
-
需要持久化的应用数据(如日志、配置文件)。
-
容器间共享数据。
操作示例:
# 创建数据卷
docker volume create my-vol# 查看数据卷列表
docker volume ls# 删除数据卷
docker volume rm my-vol
3.数据卷挂载
定义:
-
数据卷挂载是将数据卷挂载到容器中的指定路径,容器可以读写数据卷中的数据。
特点:
-
自动创建:如果挂载的数据卷不存在,Docker会自动创建。
-
数据持久化:数据卷中的数据在容器删除后仍然保留。
操作示例:
# 挂载数据卷到容器
docker run -d -v my-vol:/app/data nginx:latest# 查看数据卷内容
docker run --rm -v my-vol:/backup busybox ls /backup
4.本地目录挂载
定义:
-
本地目录挂载 是将宿主机的目录或文件直接挂载到容器中,容器可以读写宿主机上的文件。
特点:
-
实时同步:宿主机和容器中的文件实时同步。
-
灵活性:可以挂载任意宿主机目录或文件。
-
依赖宿主机路径:数据存储位置依赖宿主机目录。
操作示例:
# 挂载本地目录到容器
docker run -d -v /host/path:/container/path nginx:latest# 挂载单个文件到容器
docker run -d -v /host/config.json:/app/config.json nginx:latest
5. 挂载模式对比
特性 | 数据卷(Volume) | 本地目录挂载(Bind Mount) |
---|---|---|
存储位置 | Docker 管理目录 | 宿主机指定路径 |
生命周期 | 独立于容器 | 依赖宿主机目录 |
性能 | 高效(Docker 优化) | 依赖宿主机文件系统性能 |
共享性 | 支持多容器共享 | 支持多容器共享 |
适用场景 | 生产环境持久化数据 | 开发环境代码热更新 |
选择挂载方式的依据:
-
生产环境:优先使用数据卷(Volume),保障数据安全和性能。
-
开发环境:使用本地目录挂载(Bind Mount),方便调试。
-
敏感数据:临时文件挂载(tmpfs),确保数据不落盘。
三、容器网络
容器网络用于管理容器之间的通信以及容器与外部网络的连接。
1. 网络模式
模式 | 说明 |
---|---|
bridge | 默认模式,容器通过虚拟网桥 docker0 通信,IP 由 Docker 分配。 |
host | 容器直接使用宿主机网络栈,无独立 IP,性能高但隔离性差。 |
none | 无网络接口,需手动配置网络。 |
自定义网络 | 用户定义的网络,支持容器间 DNS 自动解析 |
2. 自定义网络
自定义网络是 Docker 提供的高级网络功能,用于解决默认网络模式的局限性。
容器名称解析:
-
问题:默认
bridge
模式下,容器间无法通过名称通信。 -
解决:自定义网络支持 DNS 解析,容器间可通过名称通信。
网络隔离:
-
问题:多个容器组需隔离网络流量。
-
解决:通过自定义网络实现容器组的网络隔离。
多容器应用:
-
问题:微服务架构中,多个服务需相互通信。
-
解决:自定义网络支持多容器间的通信和负载均衡。
操作:
# 创建自定义网络
docker network create my-net# 运行容器并加入网络
docker run -d --name web --network my-net nginx
docker run -d --name db --network my-net mysql# 在 web 容器中访问 db 容器
docker exec -it web ping db
3. 端口映射
作用:用于将容器内部的端口映射到宿主机的端口,从而实现外部网络与容器内服务的通信。
外部访问容器服务:
-
问题:容器默认运行在隔离的网络环境中,外部网络无法直接访问容器内的服务。
-
解决:通过端口映射,将容器端口绑定到宿主机端口,外部网络可以通过宿主机访问容器服务。
多容器服务共存:
-
问题:多个容器可能使用相同的端口(如 80、443),导致端口冲突。
-
解决:通过端口映射,将容器端口映射到宿主机的不同端口,避免冲突。
灵活的网络配置:
-
问题:容器内服务需要暴露给特定网络或 IP。
-
解决:通过端口映射,可以指定宿主机 IP 和端口,实现灵活的网络配置。
操作:
# 将容器 3306 端口映射到宿主机 3306 端口
docker run -d -p 3306:3306 mysql# 运行多个 Web 服务,每个服务使用不同的宿主机端口
docker run -d -p 8081:80 nginx:latest
docker run -d -p 8082:80 apache:latest# 指定宿主机 IP
docker run -d -p 192.168.1.100:8080:80 nginx:latest
# 将容器的 80 端口映射到宿主机 192.168.1.100 的 8080 端口
# 只有通过 192.168.1.100:8080 才能访问 Nginx
四、Dockerfile与自定义镜像
1. 关于Dockerfile
Dockerfile 是 Docker 的核心配置文件,用于定义如何构建一个 Docker 镜像。它通过一系列指令描述镜像的构建过程,包括基础环境、依赖安装、文件复制、启动命令等。
2. Dockerfile核心指令
指令 | 作用 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM ubuntu:22.04 |
COPY | 复制宿主机文件到镜像 | COPY app.py /app/ |
RUN | 执行命令(构建阶段) | RUN apt-get install -y python3 |
CMD | 容器启动时的默认命令(可被覆盖) | CMD ["python3", "app.py"] |
ENTRYPOINT | 容器入口命令(与 CMD 结合使用) | ENTRYPOINT ["python3"] |
ENV | 设置环境变量 | ENV APP_HOME=/app |
EXPOSE | 声明容器监听的端口 | EXPOSE 8000 |
WORKDIR | 设置工作目录 | WORKDIR /app |
VOLUME | 定义匿名数据卷 | VOLUME /data |
利用Dockerfile描述镜像结构示例:
# 基础镜像
FROM ubuntu:22.04# 设置环境变量
ENV APP_HOME=/app# 设置工作目录
WORKDIR $APP_HOME# 复制文件(需忽略 .dockerignore 中的文件)
COPY . .# 安装依赖
RUN apt-get update && apt-get install -y python3# 暴露端口
EXPOSE 8000# 容器启动命令(只能有一个 CMD)
CMD ["python3", "app.py"]# 入口点(可结合 CMD 使用)
ENTRYPOINT ["python3"]
3. 自定义镜像
构建自定义镜像的步骤:
-
编写 Dockerfile:定义镜像的构建步骤。
-
准备构建上下文:将 Dockerfile 和相关文件放入一个目录。
-
运行
docker build
:构建镜像并指定标签。 -
验证镜像:使用
docker run
运行容器,测试镜像功能。
示例:
我们可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构,也可以直接基于JDK为基础镜像,省略前面的步骤:
# 基础镜像
FROM openjdk:11.0-jre-buster# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 拷贝jar包
COPY docker-demo.jar /app.jar# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
当编写好了Dockerfile,可以利用下面命令来构建镜像:
docker build -t myImage:1.0 .
- “-t”:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
- 最后面有一个“.”:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."
五、Docker Compose
docker-compose" name="1.%20%E5%85%B3%E4%BA%8Edocker-compose">1. 关于docker-compose
Docker Compose用于定义和运行多容器应用。它通过一个 YAML 文件(通常命名为 docker-compose.yml
)描述应用的服务、网络、数据卷等配置,简化了多容器应用的部署和管理。
简化多容器应用部署:
-
问题:手动管理多个容器(如 Web 服务、数据库、缓存服务)时,需分别运行
docker run
命令,过程繁琐。 -
解决:通过
docker-compose.yml
文件定义所有服务,一键启动整个应用。
环境一致性:
-
问题:开发、测试、生产环境配置不一致,导致「在我机器上能运行」问题。
-
解决:通过 Compose 文件定义统一的环境配置,确保跨环境一致性。
服务依赖管理:
-
问题:多个服务之间存在依赖关系(如 Web 服务依赖数据库),需手动控制启动顺序。
-
解决:Compose 支持服务依赖配置,自动按顺序启动服务。
快速扩展与缩减:
-
问题:手动扩展服务实例数量(如增加 Web 服务副本)效率低。
-
解决:通过 Compose 命令快速扩展服务实例。
2. 配置文件示例
#version: "3.8"services:mysql:image: mysqlcontainer_name: hm_mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hm_hmallports:- "8080:8080"networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: hm_nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- hm-net
networks:hm-net:name: hmall
3. 常用命令
# 启动所有服务(后台运行)
docker-compose up -d# 停止并删除容器、网络
docker-compose down# 查看服务日志
docker-compose logs -f web
dockerfile%E5%AF%B9%E6%AF%94" name="%C2%A04.run%E4%B8%8Edockerfile%E5%AF%B9%E6%AF%94"> 4.run与dockerfile对比
run:
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \--network hmallmysql
- 后台运行容器
- 指定容器名称为 mysql
- 将宿主机的 3306 端口映射到容器的 3306 端口
- 设置容器的时区为 Asia/Shanghai
- 设置 MySQL 的 root 用户密码为 123
- 挂载宿主机的 ./mysql/data 目录到容器的 /var/lib/mysql 目录(用于持久化 MySQL 数据)
- 挂载宿主机的 ./mysql/conf 目录到容器的 /etc/mysql/conf.d 目录(用于自定义 MySQL 配置文件)
- 挂载宿主机的 ./mysql/init 目录到容器的 /docker-entrypoint-initdb.d 目录(用于初始化数据库时执行 SQL 脚本)
- 将容器连接到名为 hmall 的网络
- 使用 mysql 镜像启动容器
dockerfile:
version: "3.8"
services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hmall
- 指定 Docker Compose 文件版本
- 定义服务
- 服务名称为 mysql
- 使用 mysql 镜像
- 指定容器名称为 mysql
- 端口映射
- 将宿主机的 3306 端口映射到容器的 3306 端口
- 设置环境变量
- 设置容器的时区为 Asia/Shanghai
- 设置 MySQL 的 root 用户密码为 123
- 挂载
- 挂载宿主机的 ./mysql/conf 目录到容器的 /etc/mysql/conf.d 目录(用于自定义 MySQL 配置文件)
- 挂载宿主机的 ./mysql/data 目录到容器的 /var/lib/mysql 目录(用于持久化 MySQL 数据)
- 挂载宿主机的 ./mysql/init 目录到容器的 /docker-entrypoint-initdb.d 目录(用于初始化数据库时执行 SQL 脚本)
- 指定网络
- 将容器连接到名为 hmall 的网络
六、run命令详解
1.基础语法
- 功能:docker run 命令用于创建并启动一个新的容器。
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
2.常用参数表
参数 | 作用 |
---|---|
-d | 后台运行容器 |
--name | 指定容器名称 |
-p | 端口映射 |
-e | 设置环境变量 |
-v | 数据卷或目录挂载 |
--network | 指定容器网络 |
-it | 交互模式进入容器 |
--rm | 容器退出后自动删除 |
--restart | 配置重启策略 |
--memory / --cpus | 限制资源使用 |
3.常用参数详解
①容器运行模式
参数 | 说明 |
---|---|
-d , --detach | 后台运行容器(detached 模式),返回容器 ID。 |
-it | 以交互模式运行容器(-i 保持 STDIN 打开,-t 分配伪终端)。常用于进入容器。 |
--rm | 容器退出时自动删除(适用于临时任务,如测试)。 |
# 后台运行 Nginx 容器
docker run -d --name my-nginx nginx:latest# 进入容器终端(退出后容器停止)
docker run -it --name my-alpine alpine:latest sh# 运行临时容器(退出后自动删除)
docker run --rm alpine:latest echo "Hello Docker"
②容器命名与标识
参数 | 说明 |
---|---|
--name <名称> | 为容器指定唯一名称(默认随机生成)。 |
-h <主机名> | 设置容器的主机名(默认与容器 ID 相同)。 |
# 指定容器名称和主机名
docker run -d --name web-server -h web01 nginx:latest
③网络与端口映射
参数 | 说明 |
---|---|
-p <宿主机端口>:<容器端口> | 将容器端口映射到宿主机端口(支持 TCP/UDP)。 |
-P , --publish-all | 自动将容器所有暴露的端口(EXPOSE )映射到宿主机随机端口。 |
--network <网络> | 指定容器加入的网络(如 bridge 、host 、自定义网络 )。 |
# 映射容器 80 端口到宿主机 8080
docker run -d -p 8080:80 nginx:latest# 自动映射所有暴露的端口
docker run -d -P --name nginx-auto nginx:latest# 加入自定义网络
# docker network create my-net
docker run -d --network my-net --name web nginx:latest
④数据卷与目录挂载
参数 | 说明 |
---|---|
-v <宿主机路径>:<容器路径> | 挂载宿主机目录到容器(Bind Mount)。 |
-v <数据卷名>:<容器路径> | 挂载数据卷到容器。 |
--mount | 更灵活的挂载方式(支持指定类型、权限等)。 |
# 挂载本地目录到容器
docker run -d -v /host/data:/app/data nginx:latest# 挂载数据卷到容器
# docker volume create app-data
docker run -d -v app-data:/app/data nginx:latest
⑤环境变量与配置
参数 | 说明 |
---|---|
-e <变量名>=<值> | 设置容器内的环境变量。 |
--env-file <文件路径> | 从文件读取环境变量(每行格式:VAR=value )。 |
示例:
# 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0# 从文件读取环境变量
echo "API_KEY=abc123" > .env
docker run -d --env-file .env my-app:latest
⑥资源限制
参数 | 说明 |
---|---|
--memory=<限制> | 限制容器内存使用(如 --memory=512m )。 |
--cpus=<数量> | 限制容器 CPU 核心数(如 --cpus=1.5 )。 |
--restart=<策略> | 容器退出时的重启策略(no 、on-failure 、always 、unless-stopped )。 |
示例:
# 限制内存和 CPU
docker run -d --memory=1g --cpus=2 nginx:latest# 设置容器自动重启
docker run -d --restart=always my-app:latest
⑦容器健康检查
参数 | 说明 |
---|---|
--health-cmd=<命令> | 定义健康检查命令。 |
--health-interval=<间隔> | 检查间隔时间(如 5s )。 |
--health-retries=<次数> | 连续失败次数后标记为不健康。 |
示例:
docker run -d \--health-cmd="curl -f http://localhost/ || exit 1" \--health-interval=30s \--health-retries=3 \nginx:latest
4.综合示例
运行一个完整的 Web 服务:
docker run -d \--name web \-p 80:80 \-v /opt/web/html:/usr/share/nginx/html \-e TZ=Asia/Shanghai \--restart=unless-stopped \--memory=512m \--cpus=1 \nginx:latest
-
功能:启动一个 Nginx 容器,映射宿主机 80 端口,挂载本地 HTML 目录,设置时区,限制资源,并配置自动重启。
5.注意事项
-
端口冲突:若宿主机端口被占用,需修改映射端口或停止占用端口的进程。
-
数据持久化:重要数据务必使用数据卷或目录挂载,避免容器删除后丢失。
七、总结
1.核心概念
Docker 通过容器化技术实现了应用与环境的解耦,核心概念包括:
-
镜像与容器:构建和运行应用的基础单元。
-
数据管理:通过数据卷和本地挂载实现持久化。
-
Dockerfile:定义镜像构建流程,支持多阶段优化。
-
网络互联:自定义网络简化容器间通信。
-
Docker Compose:编排多容器应用,提升部署效率。
2.命令大全
镜像相关命令:
- docker search:用于在Docker Hub或其他注册表中搜索镜像。
- docker pull:从Docker注册表(例如Docker Hub)中拉取(下载)镜像到本地。
- docker push:将本地构建的Docker镜像推送(上传)到Docker注册表(如Docker Hub或私有注册表)。
- docker images:列出本地的Docker镜像。
- docker rmi:删除不再需要的镜像。
- docker tag:创建本地镜像的别名(tag)。
- docker build:从Dockerfile构建Docker镜像。
- docker history:查看指定镜像的历史层信息。
- docker save:将一个或多个Docker镜像保存到一个tar归档文件中。
- docker load:从由docker save命令生成的tar文件中加载Docker镜像。
- docker import:从一个tar文件或URL导入容器快照,从而创建一个新的Docker镜像。
容器相关命令:
- docker run:创建并启动一个新的容器。
- docker start/stop/restart:这些命令主要用于启动、停止和重启容器。
- docker kill:立即终止一个或多个正在运行的容器。
- docker rm:用于删除一个或多个已经停止的容器。
- docker pause/unpause:暂停和恢复容器中的所有进程。
- docker create:创建一个新的容器,但不会启动它。
- docker exec:在运行中的容器内执行一个新的命令。
- docker rename:重命名容器。
- docker ps:列出Docker容器。
- docker inspect:获取Docker对象(容器、镜像、卷、网络等)的详细信息。
- docker top:显示指定容器中的正在运行的进程。
- docker attach:允许用户附加到正在运行的容器并与其交互。
- docker events:获取Docker守护进程生成的事件。
- docker logs:获取和查看容器的日志输出。
- docker wait:允许用户等待容器停止并获取其退出代码。
- docker export:将容器的文件系统导出为tar归档文件。
- docker port:显示容器的端口映射信息。
- docker stats:实时显示Docker容器的资源使用情况。
- docker update:更新Docker容器的资源限制,包括内存、CPU等。
网络相关命令:
- docker network ls:列出所有网络。
- docker network create:创建一个新的网络。
- docker network rm:删除指定的网络。
- docker network connect:连接容器到网络。
- docker network disconnect:断开容器与网络的连接。
数据卷相关命令:
- docker volume ls:列出所有卷。
- docker volume create:创建一个新的卷。
- docker volume rm:删除指定的卷。
- docker volume inspect:显示卷的详细信息。
Docker Compose相关命令:
- docker compose run:启动一个新容器并运行一个特定的应用程序。
- docker compose rm:启动一个新容器并删除一个特定的应用程序。
- docker compose ps:从docker compose检查docker容器状态。
- docker compose build:构建docker compose文件。
- docker compose up:运行docker compose文件。
- docker compose ls:列出docker compose服务。
- docker compose start:启动docker compose文件创建的容器。
- docker compose restart:重启docker compose文件创建的容器。