Docker 初级新手教程:从零开始掌握容器化

举报
yd_214313748 发表于 2026/11/02 17:42:51 2026/11/02
【摘要】 Docker 初级新手教程:从零开始掌握容器化适用人群:刚接触容器技术、想快速上手 Docker 的开发者。读完本文,你能理解 Docker 的核心概念,并独立完成镜像拉取、容器运行、自定义镜像构建与简单编排。一、Docker 是什么Docker 是一个开源的容器化平台。它把应用程序及其依赖(代码、运行时、系统库、配置)打包成一个标准化的单元——容器,让应用在任意环境里都能以相同的方式运行。...

Docker 初级新手教程:从零开始掌握容器化

适用人群:刚接触容器技术、想快速上手 Docker 的开发者。读完本文,你能理解 Docker 的核心概念,并独立完成镜像拉取、容器运行、自定义镜像构建与简单编排。

一、Docker 是什么

Docker 是一个开源的容器化平台。它把应用程序及其依赖(代码、运行时、系统库、配置)打包成一个标准化的单元——容器,让应用在任意环境里都能以相同的方式运行。

一句话概括:Docker 让“在我电脑上能跑”变成“在哪里都能跑”。

二、为什么需要 Docker

传统部署常遇到这些问题:

  • 开发环境和生产环境不一致,出现“本地正常、上线报错”。

  • 安装依赖繁琐,版本冲突难以排查。

  • 一台服务器上部署多个应用,互相影响、资源隔离差。

Docker 带来的价值:

  • 环境一致:镜像里固定了运行所需的一切。

  • 轻量高效:容器共享宿主机内核,启动通常在秒级。

  • 易于交付:镜像可以像代码一样被版本化管理、分发和回滚。

  • 隔离性好:每个容器拥有独立的文件系统和进程空间。

三、四个核心概念

理解这四个词,就理解了 Docker 的地基。

  1. 镜像(Image):一个只读模板,包含运行应用所需的文件系统和配置。可以把它理解成“安装包”。

  2. 容器(Container):镜像的运行实例。可以把它理解成“正在运行的程序”。同一个镜像可以启动多个容器。

  3. 仓库(Registry):存放和分发镜像的地方,最常用的是 Docker Hub。

  4. Dockerfile:一份文本文件,描述如何从基础镜像一步步构建出自己的镜像。

它们的关系是:Dockerfile 构建镜像,镜像运行成容器,镜像存放在仓库中。

四、安装 Docker

Windows / macOS

推荐安装 Docker Desktop,从官网下载后按提示安装即可。安装完成后启动 Docker Desktop,等待右下角(或菜单栏)图标变为运行状态。

Linux(以 Ubuntu 为例)

可以使用官方脚本快速安装:

curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker

安装后把当前用户加入 docker 组,避免每次都要 sudo:

sudo usermod -aG docker $USER

该操作需要重新登录终端后生效。

验证安装

无论哪个平台,执行下面的命令验证:

docker version
docker info

能看到客户端和服务端版本信息,说明安装成功。

五、运行第一个容器

执行:

docker run hello-world

你会看到一段欢迎信息。这条命令背后发生了什么?

  1. Docker 先在本地查找 hello-world 镜像,没有找到。

  2. 自动从 Docker Hub 拉取该镜像。

  3. 基于镜像创建并启动一个容器。

  4. 容器执行完毕后退出。

一个容器完整的生命周期,往往就是这几步。

六、最常用的命令

# 查看本地镜像
docker images
​
# 拉取镜像
docker pull nginx:latest
​
# 运行容器(-d 后台运行,-p 端口映射,--name 命名)
docker run -d --name my-nginx -p 8080:80 nginx:latest
​
# 查看运行中的容器
docker ps
​
# 查看全部容器(含已停止)
docker ps -a
​
# 查看容器日志
docker logs -f my-nginx
​
# 进入容器内部
docker exec -it my-nginx bash
​
# 停止 / 启动 / 删除容器
docker stop my-nginx
docker start my-nginx
docker rm my-nginx
​
# 删除镜像
docker rmi nginx:latest

建议先记住 run、ps、logs、exec、stop、rm 这几个,日常使用频率最高。

七、实践一:运行一个 Nginx

docker run -d --name web -p 8080:80 nginx:latest

打开浏览器访问 http://localhost:8080,就能看到 Nginx 默认欢迎页。

这里 -p 8080:80 的含义是:把宿主机的 8080 端口映射到容器内的 80 端口。访问宿主机 8080,就相当于访问容器里的 80。

八、实践二:运行 MySQL 并持久化数据

容器删除后,容器内的数据也会随之消失。要保存数据,需要使用数据卷(Volume):

docker run -d --name mysql-demo \
 -e MYSQL_ROOT_PASSWORD=123456 \
 -p 3306:3306 \
 -v mysql-data:/var/lib/mysql \
mysql:8

关键参数说明:

  • -e:设置环境变量,这里指定 root 密码。

  • -v mysql-data:/var/lib/mysql:把命名卷 mysql-data 挂载到容器的数据目录,实现数据持久化。

即使删除容器,只要卷还在,数据就不会丢失。

九、用 Dockerfile 构建自己的镜像

创建一个目录,准备一个简单的静态页面和应用镜像:

# 基于官方 nginx 镜像
FROM nginx:alpine
​
# 将本地页面复制到容器内的默认站点目录
COPY index.html /usr/share/nginx/html/index.html
​
# 声明容器对外暴露的端口
EXPOSE 80
​
# 容器启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]

准备一个 index.html,然后在同一目录执行构建:

docker build -t my-web:v1 .

运行自己构建的镜像:

docker run -d --name my-web -p 8081:80 my-web:v1

访问 http://localhost:8081,看到的就是你自己的页面。

-t my-web:v1 表示给镜像打上“名称:标签”,标签用于区分版本。

十、Docker Compose 入门

当应用包含多个服务(例如 Web + 数据库)时,逐个 docker run 会很繁琐。Docker Compose 可以用一个 YAML 文件描述整套服务。

新建 docker-compose.yml:

services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db

db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- db-data:/var/lib/mysql

volumes:
db-data:

在文件所在目录执行:

docker compose up -d

一条命令即可启动全部服务;需要停止时执行:

docker compose down

这就是微服务时代非常常见的本地开发与部署方式。

十一、常见问题

1. 拉取镜像很慢怎么办? 可以为 Docker 配置镜像加速器,在 Docker 的配置文件中添加 registry-mirrors 后重启服务。

2. 容器启动后马上退出了? 用 docker logs <容器名> 查看日志。多数是因为启动命令执行完就结束了,或配置有误。

3. 端口被占用? 把宿主机的映射端口换一个,例如把 8080:80 改成 8090:80。

4. 容器里的数据会丢吗? 容器删除后,未挂载到卷的数据会随容器一起被删除。重要数据务必使用数据卷。

十二、给你的最佳实践

  • 镜像尽量使用精简的基础镜像(如 alpine),减小体积与攻击面。

  • 不要把密码等敏感信息写死在 Dockerfile 中,使用环境变量或密钥管理。

  • 为镜像打上明确的版本标签,避免长期使用 latest。

  • 数据一定要挂载到数据卷,不要把状态留在容器内部。

  • 定期清理不再使用的容器、镜像和卷,避免磁盘被占满。

总结

到这里,你已经完成了 Docker 的入门闭环:

  1. 理解了镜像、容器、仓库、Dockerfile 四个核心概念。

  2. 学会了安装与验证 Docker。

  3. 掌握了运行、查看、进入、停止、删除容器的常用命令。

  4. 能运行 Nginx、MySQL 等常见服务,并实现端口映射与数据持久化。

  5. 能编写 Dockerfile 构建自己的镜像。

  6. 能用 Docker Compose 编排多服务应用。

接下来最好的学习方式,就是把你自己的一个小项目用 Docker 跑起来。动手一次,胜过读十遍。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。