docker基础操作

Posted by shensunbo on February 6, 2026

Docker 使用说明

基本概念

  • Image(镜像):Docker 镜像是一个只读的模板,包含了运行应用所需的所有内容(代码、库、依赖、环境等)。可以理解为操作系统的快照。
  • Container(容器):容器是镜像的运行实例。它是一个隔离的进程环境,可以启动、停止、删除。容器基于镜像创建,但可以有自己的数据和状态。
对比项 镜像(Image) 容器(Container)
作用 模板/快照 运行时实例
状态 静态 动态
可变性 不可变 可变
生命周期 长久 临时/可持久

镜像构建

1
2
# 构建镜像(-f 指定 Dockerfile,-t 指定标签)
sudo docker build -f Dockerfile -t my-app:dev .

容器启动

1
2
3
4
5
6
7
8
# 以默认方式启动容器
docker run my-app:dev

# 以交互模式启动并进入 bash
docker run -it --name mywork my-app:dev /bin/bash

# 启动后自动删除容器
docker run --rm -it my-app:dev /bin/bash

容器操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看所有容器(包括已停止)
docker ps -a

# 停止容器
sudo docker stop <container_id>

# 删除容器
sudo docker rm <container_id>

# 保存容器为新镜像
sudo docker commit <container_id> my-app:saved

# 重启容器
sudo docker start <container_id>

# 进入已运行的容器
sudo docker exec -it <container_id> /bin/bash

镜像管理

1
2
3
4
5
# 查看本地镜像
docker images

# 删除镜像
docker rmi <image_id>

文件拷贝

1
2
3
4
5
# 从主机拷贝文件到容器
sudo docker cp /path/on/host/file.txt <container_id>:/path/in/container/

# 从容器拷贝文件到主机
sudo docker cp <container_id>:/path/in/container/file.txt /path/on/host/

清理与空间管理

1
2
3
4
5
6
7
8
9
10
11
# 清理所有已停止的容器
docker container prune

# 清理未被使用的镜像
docker image prune

# 清理所有未被使用的镜像、容器、网络、缓存等(慎用)
docker system prune -a

# 查看磁盘空间占用
docker system df

网络与 DNS 问题

1
2
3
4
# 修改 DNS 以解决网络问题
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
sudo apt-get update

常见问题

1
2
3
Extracting Bazel installation...
Starting local Bazel server (8.1.1) and connecting to it...
ERROR: Error computing the main repository mapping: Error accessing registry https://bcr.bazel.build: Failed to fetch registry file https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel: Unknown host: bcr.bazel.build

建议检查 DNS 设置,或使用上文的 DNS 配置命令。


docker 中模拟opengl渲染,使用libosmesa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 使用官方 Ubuntu 基础镜像
FROM ubuntu:22.04

# 避免安装过程中交互式提示
ENV DEBIAN_FRONTEND=noninteractive

# 安装必要的依赖库
RUN apt-get update && apt-get install -y \
    libosmesa6 \
    libgl1 \
    libgles2 \
    libstdc++6 \
    libglapi-mesa \
    libllvm15 \
    zlib1g \
    zstd \
    libdrm2 \
    libgcc-s1 \
    libglx0 \
    libgl1-mesa-dri \
    libffi8 \
    libedit2 \
    libtinfo6 \
    libxml2 \
    libx11-6 \
    libbsd0 \
    libicu70 \
    liblzma5 \
    libxcb1 \
    libmd0 \
    libxau6 \
    libxdmcp6 \
    && rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y \
    mesa-utils \
    mesa-common-dev \
    libosmesa6-dev \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

# 将你的可执行文件和任何必要的文件复制到容器中
COPY mesaTest /app/mesaTest

# 设置可执行权限
RUN chmod +x /app/mesaTest

# 设置容器启动时运行的命令
# CMD ["/app/mesaTest"]