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

相关推荐
TG_yunshuguoji5 小时前
亚马逊云渠道商:本地SSD缓存如何保障数据安全?
运维·服务器·安全·云计算·aws
mi20065 小时前
银河麒麟v10 sp1更改data目录挂载
linux·运维
着迷不白6 小时前
华为堡垒机
linux·运维·服务器·centos
妮妮喔妮6 小时前
linux:查看某个文件下开启的进程占用的是哪个端口?
linux·运维·服务器
FJW0208147 小时前
【Linux】输入输出管理
linux·运维·服务器
莫陌尛.7 小时前
docker安装中间件
docker·中间件·容器
遇见火星7 小时前
Aiops探索:基于Ansible的Dify版本运维智能体落地思路
运维·服务器·ansible
TG_yunshuguoji9 小时前
亚马逊云渠道商:如何通过配置自动替换构建故障自愈的云架构?
运维·服务器·架构·云计算·aws
tuokuac9 小时前
虚拟机挂起,重启后主机连接不上虚拟机docker中的mysql?(docker网络状态假死)
网络·mysql·docker