Docker快速入门(ubuntu环境下)

1.docker安装

官方获取教程:getDocker

bash 复制代码
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.设置镜像站

bash 复制代码
# 配置镜像站
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 参数查看具体命令的详细选项,例如:

bash 复制代码
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.常用组合示例

bash 复制代码
# 后台运行一个 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 账号。

    bash 复制代码
    docker login
  2. 打标签 (Tag) :推送镜像前,必须按照 用户名/镜像名:版本 的格式给镜像重命名。

    bash 复制代码
    docker tag myapp:latest your-dockerhub-username/myapp:latest
  3. 推送 (Push) :将打完标签的镜像推送到云端。

    bash 复制代码
    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 服务和数据库)通过名字直接通信,需要创建一个自定义的桥接网络。

bash 复制代码
# 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 模式 - 共享宿主机网络

bash 复制代码
# 启动容器时指定 --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 (如果未安装)

bash 复制代码
# 通常 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 的简单应用:

yaml 复制代码
# 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 仅重新构建镜像,不启动容器。

总结

相关推荐
猿与禅11 小时前
Linux(Ubuntu)入门到实战:系统管理、常用命令与权限体系完整指南
linux·ubuntu·apt·进程管理·系统运维·用户权限·vi/vim
莫陌尛.11 小时前
Docker MySQL 删表卡死、执行超时(MDL锁阻塞)问题复盘与根治方案
mysql·docker·容器
星辰徐哥16 小时前
本地视频预览别只自己看:把Remotion动效项目发给客户远程验收
docker·ai·node.js·html·音视频·react·remotion
正仪18 小时前
kubernetes中list-watch机制
云原生·容器·kubernetes
cui_hao_nan19 小时前
从零搭建 Kubernetes 集群:Ubuntu + kubeadm 完整实战
ubuntu·容器·kubernetes
fb_1234520 小时前
Docker入门-第3章-容器镜像深度解析
运维·docker·容器
IT摆渡者21 小时前
基于 Docker 部署 Nextcloud 私有云盘(外挂 Windows 共享)项目实践
运维·docker·容器
墨香幽梦客1 天前
Kubernetes+Istio实现CRM系统弹性伸缩:服务网格下的流量治理与熔断策略
容器·kubernetes·istio
新时代牛马1 天前
单机 docker run 管不住了?从编排需求、期望状态到调度/自愈闭环讲透
运维·docker·容器
binqian1 天前
Docker Desktop(WSL2 后端)三层网络互通技术文档
网络·docker·容器