1.docker安装

官方获取教程:getDocker

curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh
# 下载失败可以使用阿里云镜像
sudo sh install-docker.sh --mirror Aliyun
docker version

2.设置镜像站

# 配置镜像站
sudo vi /etc/docker/daemon.json

# 把以下内容放进去
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.1panel.live",
        "https://hub.rat.dev"
    ]
}
# 重启docker
sudo service docker restart

3.常用docker命令

这些命令覆盖了 90% 以上的日常使用场景。建议结合 --help 参数查看具体命令的详细选项,例如:

docker run --help

3.1.镜像(Image)管理

命令说明
docker images列出本地所有镜像
docker pull <image>从仓库拉取镜像(如 docker pull nginx
docker build -t <name:tag> .从当前目录的 Dockerfile 构建镜像
docker rmi <image>删除本地镜像
docker tag <src> <target>给镜像打标签(如 docker tag myapp:latest myapp:v1
docker history <image>查看镜像构建历史

docker的pull命令详解


docker pull docker.io/library/nginx:latest
repository(镜像库/存放一个镜像的不同版本):docker.io/library/nginx
registry(仓库地址):docker.io
namespace(命名空间/作者名):library,library是官方仓库命名空间
tag(标签/版本号):latest
官方仓库和最新版本可以省略不写,省略为:docker pull nginx

3.2.容器(Container)管理

命令说明
docker ps查看正在运行的容器
docker ps -a查看所有容器(包括已停止的)
docker run [OPTIONS] <image>启动新容器常用选项:-d 后台运行-p 8080:80 端口映射-v /host:/container 挂载卷--name mycontainer 指定名称-it 交互式终端
docker start <container>启动已停止的容器
docker stop <container>停止运行中的容器(优雅停止)
docker kill <container>强制终止容器
docker restart <container>重启容器
docker rm <container>删除已停止的容器(加 -f 可强制删除运行中容器)
docker logs <container>查看容器日志(加 -f 实时跟踪)
docker exec -it <container> /bin/bash进入运行中的容器执行命令
docker inspect <container/image>查看容器或镜像的详细信息(JSON 格式)

3.3.批量操作与清理

命令说明
docker system df查看 Docker 磁盘使用情况
docker system prune清理未使用的容器、网络、镜像(不包括 volume)
docker system prune -a清理所有未使用的镜像(包括悬空和未被容器引用的)
docker container prune删除所有已停止的容器
docker image prune删除悬空(dangling)镜像
docker volume prune删除未使用的数据卷

3.4.其他实用命令

命令说明
docker version查看 Docker 客户端和服务器版本
docker info显示 Docker 系统信息(存储驱动、容器数量等)
docker login登录 Docker Hub 或私有仓库
docker logout退出登录
docker push <image>推送镜像到仓库(需先 docker tag 打好仓库前缀)

3.5.常用组合示例

# 后台运行一个 Nginx 容器,映射 8080 端口
docker run -d -p 8080:80 --name web nginx

# 查看容器实时日志
docker logs -f web

# 进入容器内部
docker exec -it web /bin/bash

# 删除所有已停止的容器
docker rm $(docker ps -aq)

# 删除所有未被使用的镜像
docker image prune -a

3.6. 镜像推送 (Push) 到 Docker Hub

如果你想把自己构建的镜像分享给别人或者部署到服务器上,需要推送到镜像仓库(如 Docker Hub)。

操作步骤:

  1. 登录仓库:首先需要在终端登录你的 Docker Hub 账号。
    docker login
    
  2. 打标签 (Tag):推送镜像前,必须按照 用户名/镜像名:版本 的格式给镜像重命名。
    docker tag myapp:latest your-dockerhub-username/myapp:latest
    
  3. 推送 (Push):将打完标签的镜像推送到云端。
    docker push your-dockerhub-username/myapp:latest
    

3.7. Docker 网络模式 (Network)

“桥接模式”和“Host 模式”是 Docker 最常用的两种网络驱动。它们决定了容器如何与外界通信。

3.7.1.核心概念解析

模式名称驱动名称 (--driver)特点适用场景
Bridge (桥接)bridge (默认)容器通过虚拟网桥连接宿主机,拥有独立的 Network Namespace 和 IP。容器间可通过 容器名 互相访问(需在同用户自定义网络中)。开发环境、微服务架构(服务间需要通信)。
Host (主机)host容器直接复用宿主机的 Network Namespace,不隔离网络。容器没有独立 IP,直接使用宿主机 IP 和端口。对网络性能要求极高、端口冲突较少的场景。

3.7.2.常用命令示例

1. 桥接模式 (Bridge) - 构建子网
如果你想让多个容器(例如 Web 服务和数据库)通过名字直接通信,需要创建一个自定义的桥接网络。

# 1. 创建一个自定义的桥接网络 (推荐,比默认 bridge 网络支持自动 DNS 解析)
docker network create my-web-network

# 2. 启动容器时指定网络和名字
# 容器 A
docker run -d --name web-server --network my-web-network nginx

# 容器 B (例如 MySQL)
docker run -d --name mysql-db --network my-web-network mysql:8

# 结果:在 web-server 容器里可以直接 ping 通 mysql-db,无需知道具体 IP。

2. Host 模式 - 共享宿主机网络

# 启动容器时指定 --network host
docker run -d --network host --name my-host-app nginx

# 结果:容器内的 80 端口直接映射到宿主机 80 端口,无需使用 -p 参数映射。
# 注意:此时如果宿主机 80 端口被占用,容器会启动失败。

3.8. Docker Compose (多容器应用)

对于复杂的项目,通常包含 Web 服务、数据库、缓存等多个容器。手动一个个启动非常麻烦。Docker Compose 允许你通过一个 YAML 文件(通常命名为 docker-compose.yml)来定义和运行整个应用。

3.8.1. 安装 Docker Compose (如果未安装)

# 通常 Docker Desktop 已包含,Linux 用户可单独安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3.8.2. 编写 docker-compose.yml 示例

假设我们要部署一个包含 Nginx 和 Redis 的简单应用:

# docker-compose.yml
version: '3.8' # Docker Compose 文件版本

services: # 定义服务 (即容器)
  # 服务 1: Web 服务
  web:
    image: nginx:alpine # 使用的镜像
    ports:
      - "8080:80"       # 端口映射: 宿主机:容器
    volumes:
      - ./html:/usr/share/nginx/html # 挂载静态文件目录
    networks:
      - app-network     # 加入自定义网络

  # 服务 2: 缓存服务
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    networks:
      - app-network

# 定义网络
networks:
  app-network:
    driver: bridge # 使用桥接模式,让 web 和 redis 可以通过服务名互相访问

# 定义数据卷 (如果需要持久化数据)
volumes:
  # 这里可以声明命名卷,或者使用默认的匿名卷

3.8.3. 常用 Compose 命令

在存放 docker-compose.yml 的目录下执行:

命令说明
docker-compose up -d后台启动所有服务 (-d),并自动构建镜像(如果需要)。
docker-compose down停止并删除所有服务容器、网络。
docker-compose ps查看当前项目中所有容器的状态。
docker-compose logs -f查看所有服务的日志(-f 实时跟踪)。
docker-compose build仅重新构建镜像,不启动容器。

总结

更多推荐