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

相关推荐
鬼火儿7 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin7 小时前
缓存三大问题及解决方案
redis·后端·缓存
yoke菜籽7 小时前
面试150——字典树
面试·职场和发展
赵文宇(温玉)8 小时前
构建内网离线的“github.com“,完美解决内网Go开发依赖
开发语言·golang·github
间彧8 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧8 小时前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
牛奶咖啡138 小时前
利用Github与Hexo搭建属于自己的在线个人博客
github·hexo创建静态博客·免费部署博客到公网上·创建自定义静态博客·将静态博客上传到github·将自己的网站发布到网上
散峰而望8 小时前
C++入门(一)(算法竞赛)
c语言·开发语言·c++·编辑器·github
零雲8 小时前
java面试:有了解过RocketMq架构么?详细讲解一下
java·面试·java-rocketmq
间彧8 小时前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端