Docker 命令速查手册

在低版本的服务器或存在共用关系的大组环境里,Docker 是个好东西。Docker 可以提供独立的运行时环境,以免受其他服务和人的干扰。

GitHub 项目地址:docker-command

一、什么是 Docker

Docker 是一种容器技术。它通过轻量级的虚拟化,将程序及其依赖打包到一个被称为 容器 的独立运行环境里,从而保证应用在不同环境中的一致性。

容器与虚拟机,在功能上类似,但更加轻量化。容器提供的是操作系统级别的虚拟化;而虚拟机提供的是硬件级别的虚拟化。不同于虚拟机要为每个实例运行完整的操作系统,容器共享操作系统内核,因此更轻量、更高效。不过,轻量化的设计也带来了一些限制,例如 systemctl 等服务管理工具通常在容器中不可用。

1.1 核心组件

在上手 Docker 前,有必要了解它的核心组件:

  1. 镜像 (Image): 镜像拥有运行应用所需的一切,包括操作系统、代码、依赖等
  2. 容器 (Container): 容器由镜像创建,每个容器拥有独立的运行环境

你无法直接运行镜像,必须由镜像创建对应的容器才能运行。可以认为容器是镜像的实例。镜像负责存储与分发,容器负责提供服务。

1.2 主要用途

Docker 的主要用途包括:

  1. 轻量级虚拟化:可以当成虚拟机使用
  2. 支持微服务架构:每个服务运行在独立容器中,易于扩展和管理
  3. 支持 CI/CD 流水线:一次打包,即可在所有环境中运行
  4. 保证环境的一致性:确保测试、开发、生产环境一致

如果你还不了解 Docker,可访问以下资源:

二、常用命令

2.1 基础操作

命令 描述
docker info 查看 docker 系统信息
docker version 查看 docker 版本信息
docker --version 查看 docker 简略版本信息
docker login 登录 DockerHub
docker login nvcr.io 登录 nvcr.io

2.2 镜像管理

命令 描述
docker images 查看镜像
docker pull [IMAGE] 拉取镜像
docker rmi [IMAGE] 删除镜像
docker commit [CONTAINER] [IMAGE]:[TAG] 将容器保存为新的镜像
docker save -o myimage.tar [IMAGE] 将镜像保存到指定路径
docker load -i path/to/myimage.tar 从 tar 文件中加载镜像

2.3 容器管理

命令 描述
docker create [IMAGE] 创建容器
docker run [IMAGE] 创建并运行容器
docker start [CONTAINER] 启动容器
docker stop [CONTAINER] 停止容器
docker restart [CONTAINER] 重启容器
docker ps 列出运行容器
docker ps -a 列出所有容器
docker exec -it [CONTAINER] /bin/bash 启动交互模式
docker rm [CONTAINER] 删除容器
docker port [CONTAINER] 查看端口映射
docker top [CONTAINER] 查看容器内进程
docker stats [CONTAINER] 查看资源使用情况
docker cp [CONTAINER]:[PATH] [LOCAL_PATH] 拷贝文本到本地
docker cp [LOCAL_PATH] [CONTAINER]:[PATH] 拷贝文件到容器
docker export -o mycontainer.tar [CONTAINER] 将容器存成文件
docker import path/to/mycontainer.tar [IMAGE]:[TAG] 文件加载成镜像

2.4 容器运行

命令 描述
docker run --name [NAME] [IMAGE] 创建运行并命名容器
docker run -d [IMAGE] 创建容器并在后台运行
docker run -p [LOCAL_PORT]:[CONTAINER_PORT] [IMAGE] 创建容器并指定端口映射
docker run -v [LCOAL_PATH]:[CONTAINER_PATH] [IMAGE] 创建容器并将本地目录挂载到容器目录
docker run -it [IMAGE] /bin/bash 创建容器并启动交互式 shell

三、Docker 的简单使用

Docker 是客户端 / 服务端分离的,因此使用前,通常需要检查一下服务端和客户端是否都在运行:

docker info

3.1 获取镜像的两种方法

3.1.1 从 Docker Hub 获取镜像

可以用 docker pull 命令从 Docker Hub 拉取镜像。例如,以下命令可拉取带有 Nginx 服务的镜像:

docker pull nginx:stable-alpine-perl
3.1.2 用 Dockerfile 构建镜像

可以用 Dockerfile 定义一个镜像的构建过程,包括基础镜像、安装软件、环境变量等。

下面这个 DockerfileUbuntu 22.04 为基础镜像,安装了 Miniconda 和 Jupyter Lab,并将 Jupyter Lab 日志写入工作目录的 jupyter_lab.log 文件。

# Dockerfile 文件

# 使用 Ubuntu 22.04 LTS 作为基础镜像
FROM ubuntu:22.04

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive

# 更新 apt-get 并安装必要的依赖
RUN apt-get update && apt-get install -y \
    wget \
    bzip2 \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

# 安装 Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \
    bash miniconda.sh -b -f -p /opt/conda && \
    rm miniconda.sh && \
    /opt/conda/bin/conda init bash

# 设置 conda 环境路径
ENV PATH=/opt/conda/bin:$PATH

# 安装 Jupyter Lab
RUN conda install -y jupyterlab

# 创建工作目录
WORKDIR /workspace

# 暴露 Jupyter Lab 默认端口
EXPOSE 8888

# 启动 Jupyter Lab,设置根目录为工作目录,禁用浏览器,禁用 token
CMD ["sh", "-c", "nohup jupyter lab --ip=0.0.0.0 --allow-root --notebook-dir=/ --no-browser > /workspace/jupyter_lab.log 2>&1"]

使用以下命令构建镜像:

# 1. 检查 docker 环境是否正常
docker info

# 2. 构建镜像
docker build -t jupyter_server_image .

镜像构建完成后,可以在客户端中查看镜像信息:

docker-app

3.2 如何启动容器

一旦镜像完成构建,可以通过以下命令启动容器:

# 3. 测试容器
docker run \
    --rm \
    --gpus all \
    -it \
    --name jupyter_server_app \
    jupyter_server_image /bin/bash

# 4. 运行容器
docker run \
    --gpus all \
    --name jupyter_server_app \
    -d \
    -p 9999:8888 \
    -v $(pwd)/jupyter_workspace:/workspace \
    jupyter_server_image

运行选项说明:

  • --rm: 当容器退出时自动删除容器,常用于测试
  • --gpus all: 启用所有可用的 GPU 资源
  • -it: 启动交互式终端
  • --name: 为容器指定名字
  • -d: 以后台模式运行容器
  • -p <local-port>:<container-port>: 将主机端口映射到容器端口
  • -v <local-path>:<container-path>: 将主机路径挂载到容器路径

3.3 GPU 机器配置

1)检查 NVIDIA 驱动程序

确保你的系统上已经安装了 NVIDIA 驱动程序。你可以通过 nvidia-smi 命令来检查是否已安装并输出版本信息。

nvidia-smi

2)安装 NVIDIA Container Toolkit

如果还没有安装 NVIDIA Container Toolkit,可以通过以下命令安装(以 Ubuntu 为例):

# 1. 添加 NVIDIA 软件包列表
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 2. 更新 apt 缓存,并安装 NVIDIA Container Toolkit
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

# 3. 重启Docker服务
sudo systemctl restart docker

3)检查 CUDA 和 PyTorch

CUDA 和 PyTorch 通常在 NVIDIA 官方容器中已经安装好了。运行以下命令验证是否已安装:

# 输出 CUDA 版本
nvcc --version

# 输出 PyTorch 版本
pip show torch

四、Docker Compose 的简单使用

Docker Compose 是一个用于运行多容器 Docker 应用的工具。通过 YAML 文件 (docker-compose.yml) 可定义多个服务及其配置,使用 docker-compose 命令可以快速部署和管理这些服务。

4.1 安装 Docker Compose

对于 MacOS 和 Linux:

curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o ~/docker-compose
chmod +x ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose

4.2 常用命令

命令 描述
docker-compose version 显示版本信息
docker-compose up 创建并启动容器
docker-compose up -d 以后台模式启动容器
docker-compose down 停止并移除容器和网络
docker-compose restart 重启容器
docker-compose start 启动容器
docker-compose stop 停止容器
docker-compose rm 移除容器
docker-compose logs 查看容器日志
docker-compose top 显示容器进程
docker-compose build 构建镜像
docker-compose ps 列出容器及其状态信息
docker-compose config 检查 Compose 文件是否有语法错误
docker-compose exec 在运行中的容器执行命令
docker-compose kill 强制终止容器
docker-compose pause 暂停服务容器
docker-compose unpause 恢复已暂停的服务容器
docker-compose images 列出使用的镜像
docker-compose port 显示端口绑定
docker-compose help 查看帮助信息

附录

资源列表:

参考: