docker新手教程
这是一个非常全面的 Docker 新手入门指南,从核心概念到常用命令,再到实战流程,帮你快速上手。
一、 Docker 核心概念
在学命令之前,先理解三个关键概念:
-
镜像
-
类比:一个软件的安装包(比如
mysql.msi)。它是一个只读的模板,包含了运行软件所需的所有内容(代码、运行时、库、环境变量和配置文件)。 -
例如:
nginx:latest、mysql:8.0、ubuntu:20.04。
-
-
容器
-
类比:一个软件的运行实例。它是镜像运行时的实体。
-
容器可以被创建、启动、停止、删除。每个容器都是相互隔离、安全的平台。
-
镜像 和 容器 的关系,就像 类 和 对象实例 的关系。
-
-
仓库
-
类比:手机的应用商店。用于存放镜像的地方。
-
Docker Hub 是官方的公共仓库,任何人都可以下载上面的镜像。你也可以搭建私有的仓库。
-
二、 Docker 安装
1、Windows / macOS:
访问 Docker 官网 https://www.docker.com/ 下载并安装 Docker Desktop。
安装后,在终端(Windows 上用 CMD 或 PowerShell,macOS 上用 Terminal)输入 docker --version 验证是否成功。
2、Linux (以 Ubuntu 为例):
# 更新软件包索引
sudo apt update# 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装 Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker# 将当前用户加入 docker 用户组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 执行后需要**重新登录**终端才能生效
三、 常用 Docker 命令
1. 镜像相关
搜索镜像:docker search <镜像名>
docker search nginx
拉取(下载)镜像:docker pull <镜像名>[:标签]
docker pull nginx:latest
docker pull ubuntu:20.04
列出本地镜像:docker images 或 docker image ls
删除本地镜像:docker rmi <镜像ID或名称>
docker rmi nginx:latest
# 强制删除(如果镜像正在被容器使用)
docker rmi -f nginx:latest
2. 容器相关
创建并启动容器:docker run [选项] <镜像名> [命令]
这是最核心、最复杂的命令。
# 最基本运行(前台运行)
docker run nginx# -d: 后台运行(守护进程)
docker run -d --name my_nginx nginx# -p: 端口映射 [主机端口]:[容器端口]
docker run -d -p 8080:80 --name my_web nginx# -v: 数据卷映射 [主机目录]:[容器目录] (持久化数据)
docker run -d -p 8080:80 -v /home/user/html:/usr/share/nginx/html --name my_web nginx# -e: 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw --name my_mysql mysql:8.0# --rm: 容器停止后自动删除(常用于测试)
docker run --rm -it ubuntu:20.04 /bin/bash# -it: 交互式终端(进入容器)
docker run -it ubuntu:20.04 /bin/bash
列出容器:
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器(包括已停止的)
启动/停止/重启容器:
docker start <容器名或ID>
docker stop <容器名或ID> # 优雅停止
docker restart <容器名或ID>
docker kill <容器名或ID> # 强制立即停止
进入正在运行的容器:docker exec [选项] <容器名或ID> <命令>
# 在容器中执行一个命令
docker exec my_nginx ls /etc/nginx# -it: 进入容器的交互式终端(最常用)
docker exec -it my_nginx /bin/bash
查看容器日志:docker logs <容器名或ID>
docker logs my_nginx
docker logs -f my_nginx # -f: 持续跟踪日志输出(类似 tail -f)
删除容器:docker rm <容器名或ID>
docker rm my_nginx
# 强制删除运行中的容器
docker rm -f my_nginx
# 删除所有已停止的容器
docker container prune
查看容器信息:docker inspect <容器名或ID>
四、 实战流程:以 Nginx 为例
假设你想在宿主机(你的电脑)的 8080 端口运行一个 Nginx 服务器,并且用你本地的网页文件替换 Nginx 默认的首页。
1、拉取镜像
docker pull nginx:latest
2、准备本地文件
在宿主机上创建一个目录,比如 /home/user/my_website,在里面放一个 index.html 文件。
3、运行容器(关键步骤)
docker run -d \--name my_nginx_container \-p 8080:80 \-v /home/user/my_website:/usr/share/nginx/html \nginx:latest
-d: 后台运行。
--name: 给容器起个好记的名字。
-p 8080:80: 将宿主机的 8080 端口映射到容器的 80 端口。
-v ...: 将宿主机的 /home/user/my_website 目录挂载到容器的 Nginx 默认网页目录。
4、测试访问
打开浏览器,访问 http://localhost:8080,你应该能看到你写的 index.html 内容。
5、查看和管理
docker ps # 查看容器是否在运行
docker logs my_nginx_container # 查看 Nginx 访问日志
docker exec -it my_nginx_container /bin/bash # 进入容器内部看看
6、停止和清理
docker stop my_nginx_container # 停止容器
docker rm my_nginx_container # 删除容器
# 镜像可以保留,下次可以直接使用
五、 使用 Dockerfile 构建自定义镜像
当官方镜像不能满足需求时,你需要自己构建镜像。
1、创建一个项目目录,并进入。
2、创建一个名为 Dockerfile 的文件(无后缀)。
3、编写 Dockerfile 内容:
# 使用官方 Python 运行时作为父镜像
FROM python:3.9-slim# 设置工作目录为 /app
WORKDIR /app# 将当前目录内容复制到容器的 /app 下
COPY . /app# 安装 requirements.txt 中指定的任何所需包
RUN pip install --no-cache-dir -r requirements.txt# 使端口 80 可供此容器外的环境使用
EXPOSE 80# 定义环境变量
ENV NAME World# 在容器启动时运行 app.py
CMD ["python", "app.py"]
4、构建镜像:
docker build -t my-python-app .
# -t: 给镜像打标签,命名为 my-python-app
# . : 表示当前目录是构建上下文
5、运行自定义镜像:
docker run -d -p 4000:80 --name my-running-app my-python-app
六、 使用 docker-compose 管理多容器应用
当你的应用需要多个服务(如 Web 服务器 + 数据库)时,使用 docker-compose 可以简化管理。
1、安装 Docker Desktop 自带 docker-compose。Linux 用户可能需要单独安装。
2、创建 docker-compose.yml 文件:
version: '3.8'
services:web:image: nginx:latestports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmldepends_on:- dbdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: secretMYSQL_DATABASE: myapp
3、启动所有服务:
docker-compose up -d
4、停止并移除所有服务:
docker-compose down
总结
-
安装 Docker。
-
从
docker pull和docker run开始,这是最常用的命令。 -
理解 镜像(模板)和 容器(实例)的区别。
-
掌握三个核心概念:端口映射 (
-p)、数据卷 (-v)、环境变量 (-e)。 -
需要自定义环境时,学习 Dockerfile。
-
需要管理复杂应用时,学习 docker-compose。
