Docker 入门教程

主要结论:Docker 是一种轻量级的容器化技术,可让开发者在任何环境中快速部署、隔离和管理应用。本教程将通过实际示例,带你一步步理解 Docker 的核心概念与常用操作,帮助你在本地环境中动手构建、运行和发布容器化应用。

一、为什么要使用 Docker?

在传统开发模式中,环境差异往往导致"在我机器上能跑"却无法在服务器上正常运行的问题。Docker 将应用及其依赖打包到一个标准化的容器中,解决了"环境不一致"难题,并带来以下好处:

  • 轻量与高效:容器共享主机内核,启动速度快,资源开销小。
  • 可移植性:同一个镜像可在开发、测试、生产环境无差异运行。
  • 隔离性:每个容器相互独立,避免依赖冲突。
  • 易维护:通过 Dockerfile 定义镜像,便于版本管理和自动化构建。

二、核心概念

  1. 镜像(Image)
    镜像是一种只读模板,包含应用运行所需的文件系统和配置。可以从公共仓库(Docker Hub)拉取,也可以自定义构建。
  2. 容器(Container)
    容器是镜像的可运行实例,拥有独立的进程空间和网络接口,启动即运行,停止即销毁。
  3. Dockerfile
    用于定义如何构建自定义镜像的脚本文件。通过一系列指令(如 FROM、COPY、RUN)描述镜像构建过程。
  4. 仓库(Registry)
    镜像存储和分发的服务。Docker Hub 是官方公共仓库,也可搭建私有仓库。

三、环境准备

  1. 安装 Docker Desktop(Windows/macOS)或 Docker Engine(Linux)。
  2. 完成安装后,运行 docker --version,确认输出类似 Docker version 20.10.x 即可。

四、第一个 Docker 镜像与容器

1. 拉取官方镜像

复制代码
bash
docker pull hello-world

Docker 会从 Docker Hub 下载 hello-world 镜像。

2. 运行容器

arduino 复制代码
bash
docker run hello-world

输出"Hello from Docker!"即代表容器启动成功。

五、自定义镜像:构建一个简单的 Nginx 站点

1. 创建项目目录

perl 复制代码
bash
mkdir my-nginx
cd my-nginx

index.html 中添加:

xml 复制代码
xml
<!DOCTYPE html>
<html>
<head><title>My Nginx</title></head>
<body><h1>欢迎使用 Docker Nginx!</h1></body>
</html>

2. 编写 Dockerfile

my-nginx 目录下创建 Dockerfile,内容如下:

bash 复制代码
text
# 选择基础镜像
FROM nginx:latest

# 将本地 index.html 复制到容器网页目录
COPY index.html /usr/share/nginx/html/index.html

3. 构建镜像

perl 复制代码
bash
docker build -t my-nginx:1.0 .
  • -t my-nginx:1.0:为镜像打标签。

4. 运行容器

arduino 复制代码
bash
docker run -d -p 8080:80 --name test-nginx my-nginx:1.0
  • -d:后台运行
  • -p 8080:80:将主机 8080 端口映射到容器 80 端口
  • --name test-nginx:容器名称

浏览器访问 http://localhost:8080,即可看到自定义页面。

六、常用命令速览

操作 命令示例 说明
查看镜像 docker images 列出本地镜像
查看容器 docker ps(运行中) docker ps -a(所有) 列出容器
停止容器 docker stop <容器ID或名称> 停止运行中的容器
删除容器 docker rm <容器ID或名称> 删除已停止容器
删除镜像 docker rmi <镜像ID或名称> 删除本地镜像
查看日志 docker logs <容器ID或名称> 查看容器输出日志
进入容器 docker exec -it <容器ID> /bin/bash 以交互模式进入容器终端

七、进阶技巧

  • 镜像层缓存:Docker 会缓存每一步,如果 Dockerfile 修改后重建,仅重做变动层,提升效率。
  • 多阶段构建:在构建复杂应用时,使用多阶段构建减小最终镜像体积。
  • Compose 编排 :使用 docker-compose.yml 同时管理多个服务,实现"一键启动"应用栈。

八、总结与下一步

通过以上步骤,你已经掌握了 Docker 的基本概念和操作流程。接下来可以尝试:

  • 学习 Docker Compose 以编排多服务应用。
  • 了解 Docker 网络模型,配置自定义网络。
  • 探索 Kubernetes,实现容器编排与自动化运维。

Docker 是现代云原生开发的基石,深入学习后将极大提高开发、测试和部署效率。愿你在容器化道路上越走越远!

相关推荐
David爱编程3 分钟前
happens-before 规则详解:JMM 中的有序性保障
java·后端
小张学习之旅4 分钟前
ConcurrentHashMap
java·后端
PetterHillWater25 分钟前
阿里Qoder的Quest小试牛刀
后端·aigc
程序猿阿伟29 分钟前
《支付回调状态异常的溯源与架构级修复》
后端·架构
uhakadotcom44 分钟前
NPM与NPX的区别是什么?
前端·面试·github
dreams_dream1 小时前
django错误记录
后端·python·django
Tony Bai1 小时前
泛型重塑 Go 错误检查:errors.As 的下一站 AsA?
开发语言·后端·golang
猿java2 小时前
Elasticsearch有哪几种分页方式?该如何选择?
后端·elasticsearch·架构
绝无仅有2 小时前
服务器Docker 安装和常用命令总结
后端·面试·github