docker新手教程

这是一个非常全面的 Docker 新手入门指南,从核心概念到常用命令,再到实战流程,帮你快速上手。

一、 Docker 核心概念

在学命令之前,先理解三个关键概念:

  1. 镜像

    • 类比:一个软件的安装包 (比如 mysql.msi)。它是一个只读的模板,包含了运行软件所需的所有内容(代码、运行时、库、环境变量和配置文件)。

    • 例如:nginx:latestmysql:8.0ubuntu:20.04

  2. 容器

    • 类比:一个软件的运行实例。它是镜像运行时的实体。

    • 容器可以被创建、启动、停止、删除。每个容器都是相互隔离、安全的平台。

    • 镜像容器 的关系,就像 对象实例 的关系。

  3. 仓库

    • 类比:手机的应用商店。用于存放镜像的地方。

    • Docker Hub 是官方的公共仓库,任何人都可以下载上面的镜像。你也可以搭建私有的仓库。


二、 Docker 安装

1、Windows / macOS:

访问 Docker 官网 https://www.docker.com/ 下载并安装 Docker Desktop

安装后,在终端(Windows 上用 CMD 或 PowerShell,macOS 上用 Terminal)输入 docker --version 验证是否成功。

2、Linux (以 Ubuntu 为例):

bash 复制代码
# 更新软件包索引
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 <镜像名>

bash 复制代码
docker search nginx

拉取(下载)镜像docker pull <镜像名>[:标签]

bash 复制代码
docker pull nginx:latest
docker pull ubuntu:20.04

列出本地镜像docker imagesdocker image ls

删除本地镜像docker rmi <镜像ID或名称>

bash 复制代码
docker rmi nginx:latest
# 强制删除(如果镜像正在被容器使用)
docker rmi -f nginx:latest
2. 容器相关

创建并启动容器docker run [选项] <镜像名> [命令]

这是最核心、最复杂的命令。

bash 复制代码
# 最基本运行(前台运行)
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

列出容器

bash 复制代码
docker ps          # 查看正在运行的容器
docker ps -a       # 查看所有容器(包括已停止的)

启动/停止/重启容器

bash 复制代码
docker start <容器名或ID>
docker stop <容器名或ID>     # 优雅停止
docker restart <容器名或ID>
docker kill <容器名或ID>     # 强制立即停止

进入正在运行的容器docker exec [选项] <容器名或ID> <命令>

bash 复制代码
# 在容器中执行一个命令
docker exec my_nginx ls /etc/nginx

# -it: 进入容器的交互式终端(最常用)
docker exec -it my_nginx /bin/bash

查看容器日志docker logs <容器名或ID>

bash 复制代码
docker logs my_nginx
docker logs -f my_nginx  # -f: 持续跟踪日志输出(类似 tail -f)

删除容器docker rm <容器名或ID>

bash 复制代码
docker rm my_nginx
# 强制删除运行中的容器
docker rm -f my_nginx
# 删除所有已停止的容器
docker container prune

查看容器信息docker inspect <容器名或ID>

四、 实战流程:以 Nginx 为例

假设你想在宿主机(你的电脑)的 8080 端口运行一个 Nginx 服务器,并且用你本地的网页文件替换 Nginx 默认的首页。

1、拉取镜像

bash 复制代码
docker pull nginx:latest

2、准备本地文件

在宿主机上创建一个目录,比如 /home/user/my_website,在里面放一个 index.html 文件。

3、运行容器(关键步骤)

bash 复制代码
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、查看和管理

bash 复制代码
docker ps                      # 查看容器是否在运行
docker logs my_nginx_container # 查看 Nginx 访问日志
docker exec -it my_nginx_container /bin/bash # 进入容器内部看看

6、停止和清理

bash 复制代码
docker stop my_nginx_container # 停止容器
docker rm my_nginx_container   # 删除容器
# 镜像可以保留,下次可以直接使用

五、 使用 Dockerfile 构建自定义镜像

当官方镜像不能满足需求时,你需要自己构建镜像。

1、创建一个项目目录,并进入。

2、创建一个名为 Dockerfile 的文件(无后缀)。

3、编写 Dockerfile 内容

bash 复制代码
# 使用官方 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、构建镜像

bash 复制代码
docker build -t my-python-app .
# -t: 给镜像打标签,命名为 my-python-app
# . : 表示当前目录是构建上下文

5、运行自定义镜像

bash 复制代码
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 文件

bash 复制代码
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: myapp

3、启动所有服务

bash 复制代码
docker-compose up -d

4、停止并移除所有服务

bash 复制代码
docker-compose down

总结

  1. 安装 Docker

  2. docker pulldocker run 开始,这是最常用的命令。

  3. 理解 镜像 (模板)和 容器(实例)的区别。

  4. 掌握三个核心概念:端口映射 (-p)数据卷 (-v)环境变量 (-e)

  5. 需要自定义环境时,学习 Dockerfile

  6. 需要管理复杂应用时,学习 docker-compose

相关推荐
给算法爸爸上香5 分钟前
模型部署在docker中对外提供服务
docker·容器·模型部署·模型推理
可可苏饼干1 小时前
TOMCAT
java·运维·学习·tomcat
刘延林.1 小时前
树莓派 5 上 Ubuntu 24.04 LTS 自带 RDP 远程桌面重启密码就变
linux·运维·ubuntu
我不是醉忧1 小时前
RedHat系统搭建DNS主从服务器
linux·运维·服务器
正在努力的小河1 小时前
Linux SPI 驱动实验
linux·运维·服务器
adnyting1 小时前
【Linux日新月异(九)】CentOS 7其他常用命令大全:系统操作与管理必备技巧
linux·运维·centos
-dcr1 小时前
39.华为云运维类服务
运维·服务器·华为云·lts·cts·ces·smn
木易 士心2 小时前
Protocol Buffers (Protobuf) 详解
运维·服务器
百***24132 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway