Docker

镜像 image

  • 构建
# Dockerfile同级目录下
docker build -t Name:1.0 .
  • 删除
# 列出本地所有镜像

docker images -a

# 或只显示短 ID

docker images -q

# ① 停并删光用该镜像的容器(<IMAGE> 可以是 ID 或 仓库:标签)

docker ps -a --filter ancestor=<IMAGE> -q | xargs docker rm -f

# ② 再删镜像

docker rmi <IMAGE>

# 强制删除(已没容器在用)
docker rmi -f <IMAGE>

# 支持一次删多个

docker rmi -f id1 id2 repo:tag

容器 container

  • 容器启动

    docker run --gpus all -d -it --name isaaclab_v210 --network host --hostname isaaclab_v210 --volume /home/noah/zhengli/scripts:/home/zhengli/ isaaclab:v210 /bin/bash
    

    这个Docker命令用于启动一个新的Docker容器并运行一个交互式shell。以下是命令的各个部分的解释:

    • docker run: 这是Docker的运行命令,用于创建并启动一个新的容器。
    • --gpus all: 这个参数允许容器访问所有的GPU设备。
    • -d: 这个参数表示在后台运行容器。
    • -it: 这个参数使得标准输入、输出和错误都被连接到容器的stdin,并且将容器的标准输出发送到终端。
    • --name isaaclab_v210: 这个参数为新的容器指定了一个名字,名字是isaaclab_v210。
    • --network host: 这个参数将容器的网络栈与宿主机的网络栈合并,使得容器使用宿主机的网络。
    • --hostname isaaclab_v210: 这个参数设置容器的主机名为isaaclab_v210。
    • --volume /home/noah/zhengli/scripts:/home/zhengli/: 这个参数创建一个数据卷,将宿主机的目录/home/noah/zhengli/scripts映射到容器的/home/zhengli/目录。
    • isaaclab:v210: 这是容器的镜像名称和标签。
    • /bin/bash: 这是容器启动时要运行的命令,使用bash解释器启动一个shell。
      总的来说,这个命令将在宿主机的/home/noah/zhengli/scripts目录下找到所有的脚本,并在一个具有所有GPU的环境中运行一个交互式的bash shell。
  • 查看容器

    # 列出正在运行的所有容器
    docker ps
    
    # 列出所有的容器
    docker ps -a
    
  • 进入容器

    docker exec -it <container-id> /bin/bash
    
  • 关闭容器

    # 先停 → 再删(两条命令)
    
    docker stop <容器ID或名字>
    docker rm   <容器ID或名字>
    
    # 一条命令强制停+删
    
    docker rm -f <容器ID或名字>
    
  • 容器生成镜像

数据卷 volume

网络 network

  1. 构建docker时指定### **--network**参数

    docker build --network=host -t myimage .
    

    支持选项

    • bridge:默认的桥接网络(Docker 默认行为)。
    • host:使用宿主机的网络栈(无需端口映射,性能更高)。
    • none:无网络(完全隔离)。
    • 自定义网络名:使用 docker network create 创建的网络。
  2. 通过 BuildKit 高级配置

    如果使用 BuildKit(DOCKER_BUILDKIT=1),可以通过 -- network 参数或 DockerfileRUN --network 语法控制网络:

    # Dockerfile
    FROM alpine
    RUN --network=host apk add --no-cache curl
    

    然后构建:

    DOCKER_BUILDKIT=1 docker build --network=host -t 		myimage .
    

Dockerfile

使用 Dockerfile 构建镜像

  • 示例
# 基础镜像
FROM nvcr.io/nvidia/isaac-lab:2.2.0

# 设置工作目录
WORKDIR /ws

ENV CUDA_HOME=/usr/local/cuda \
TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0 7.5 8.0 8.6+PTX" \
SETUPTOOLS_USE_DISTUTILS=stdlib
ENV http_proxy http://127.0.0.1:3128
ENV https_proxy http://127.0.0.1:3128
ENV no_proxy "127.0.0.1, localhost, mirrors.tools.huawei.com"

RUN sed -i 		"s@http://.*archive.ubuntu.com@http://mirrors.tools.huawei.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://mirrors.tools.huawei.com@g" /etc/apt/sources.list
COPY apt.conf /etc/apt/apt.conf
COPY .condarc .condarc

# 复制当前目录下的所有文件到工作目录
# COPY . /ws

# 安装必要的依赖
RUN apt-get -y update && apt-get install -y --no-install-recommends \
curl \
    zsh \
    libxtst6 \
    sudo \
    wget \
    build-essential \
    git \
    python3-opencv \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# 设置环境变量
ENV ACCEPT_EULA=Y
ENV PRIVACY_CONSENT=Y

# 启用 GPU 支持
RUN apt-get install -y nvidia-driver nvidia-container-toolkit

# 设置默认命令
CMD ["zsh"]

其他

  • 系统信息 docker system df / info

更多推荐