目录
前言
记录在docker中常用的一些命令,便于以后查询使用,以下内容为大模型生成,使用时请注意判断对错。
一、镜像操作
1. 列出本地镜像
docker images
-
输出内容:
-
REPOSITORY:镜像的仓库名称。
-
TAG:镜像的标签。
-
IMAGE ID:镜像的唯一标识符。
-
CREATED:镜像的创建时间。
-
SIZE:镜像的大小。
-
2. 列出所有镜像(包括悬挂的镜像)
docker images -a
-
功能:列出所有镜像,包括没有标签的悬挂镜像(dangling images)。
-
悬挂镜像:是指那些没有被任何标签引用的镜像,通常是通过构建镜像时产生的中间镜像。
3. 仅显示镜像的ID
docker images --format "{{.ID}}"
-
功能:仅显示镜像的ID,方便在脚本中使用。
4. 显示镜像的详细信息
docker inspect <image_id>
-
功能:显示指定镜像的详细信息,包括配置、层信息等。
-
参数:
-
<image_id>:镜像的ID或名称。
-
5. 删除镜像
docker rmi <image_id>
-
功能:删除指定的镜像。
-
参数:
-
<image_id>:镜像的ID或名称。
-
-
注意:如果镜像正在被一个或多个容器使用,需要先停止并删除这些容器。
6. 删除所有未使用的镜像
docker image prune
-
功能:删除所有未被使用的镜像。
-
选项:
-
-a:删除所有未被使用的镜像(包括悬挂的镜像)。 -
-f:强制删除,不提示确认。
-
7. 删除悬挂的镜像
docker image prune -f
-
功能:删除所有悬挂的镜像(没有标签的镜像)。
-
选项:
-
-f:强制删除,不提示确认。
-
8. 按标签过滤镜像
docker images <repository>:<tag>
-
功能:列出指定仓库和标签的镜像。
-
参数:
-
<repository>:镜像仓库名称。 -
<tag>:镜像标签。
-
9. 按仓库过滤镜像
docker images <repository>
-
功能:列出指定仓库的所有镜像。
-
参数:
-
<repository>:镜像仓库名称。
-
10. 按大小排序镜像
docker images --format "{{.Size}} {{.Repository}}:{{.Tag}}" | sort -h
-
功能:按镜像大小排序。
-
说明:使用
sort -h命令对镜像大小进行排序。
11. 保存镜像到文件
docker save image_id > file_name.tar
docker save image_id -o file_name.tar
docker save image_name:tag -o file_name.tar
-
功能:将镜像保存为一个 tar 文件。
-
参数:
-
<image_id>:镜像的ID或名称。 -
<file_name>:保存的文件名。
-
12. 从文件加载镜像
docker load < file_name.tar
docker load -i file_name.tar
-
功能:从 tar 文件加载镜像。
-
参数:
-
<file_name>:保存的文件名。
-
13. 然后为镜像添加标签
docker tag <IMAGE_ID> your-repository:your-tag
14. 从容器导出.tar文件,并加载
docker export [容器ID] > [导出文件名].tar
docker save方式可能会保存一些无用数据。
注意,这种方式只导出容器的文件系统,不包括容器的运行状态、配置等信息。导出的容器文件可以使用以下命令导入为一个新的镜像,然后通过 docker run 命令基于该镜像启动新的容器。
docker import [导出文件名].tar my_new_image
二、容器操作
1、创建容器
docker run [选项] <镜像名称>:<标签>
选项
| 选项 | 解释 | 例子 |
| --name | 为容器指定一个名称 | docker run --name my-container my-image |
| --label 或 -l | 为容器添加标签,用于分类或标记容器 | 例:docker run --label project=myproject my-image |
| -d | 在后台(守护模式)运行容器 | docker run -d my-image |
| -it | 以交互模式运行容器,通常用于启动一个终端 | docker run -it my-image /bin/bash |
| --rm | 容器退出后自动删除,避免容器堆积 | docker run --rm my-image |
| -p 或 --publish | 将容器的端口映射到宿主机的端口 | docker run -p 8080:80 my-image |
| --network | 指定容器连接到的网络 | docker run --network my-network my-image |
| --ip | 为容器指定一个静态 IP 地址(仅在自定义网络中有效) | docker run --network my-network --ip 192.168.1.100 my-image |
| -v 或 --volume | 挂载宿主机的目录或文件到容器中 | docker run -v /host/path:/container/path my-image |
| --mount | 更灵活地挂载卷或绑定挂载 | docker run --mount type=bind,source=/host/path,target=/container/path my-image |
| -e 或 --env | 设置环境变量 | docker run -e VAR_NAME=value my-image |
| --env-file | 从文件中加载环境变量 | docker run --env-file my-env-file.env my-image |
| --cpus | 限制容器可以使用的 CPU 数量 | docker run --cpus 2.0 my-image |
| --memory 或 -m | 限制容器可以使用的内存大小 | docker run --memory 2g my-image |
| --memory-swap | 设置容器的总内存限制(内存 + 交换区) | docker run --memory 2g --memory-swap 4g my-image |
| --entrypoint | 覆盖镜像的默认入口点 | docker run --entrypoint /bin/bash my-image |
| --log-driver | 指定日志驱动程序 | docker run --log-driver json-file my-image |
| --log-opt | 设置日志选项 | docker run --log-opt max-size=10m my-image |
| --privileged | 以特权模式运行容器,授予容器更高的权限 | docker run --privileged my-imagexxx |
| --cap-add 和 --cap-drop | 添加或移除容器的 Linux 权限 | docker run --cap-add SYS_ADMIN my-image |
| --user 或 -u | 指定容器运行的用户 | docker run -u 1000:1000 my-image |
| --restart | 设置容器的重启策略 | docker run --restart always my-image |
| --read-only | 将容器的根文件系统设置为只读 | docker run --read-only my-image |
| --hostname 或 -h | 设置容器的主机名 | docker run --hostname my-host my-image |
| --workdir 或 -w | 设置容器的工作目录 | docker run -w /app my-image |
| <command> | 指定容器启动时运行的命令 | docker run my-image /bin/bash -c "echo Hello, World!" |
| --gpus all | 这个选项用于启用容器对 GPU 的访问。all 表示容器可以使用所有可用的 GPU。这通常用于加速计算密集型任务,如 3D 重建。如果你的系统没有安装支持 Docker 的 GPU 驱动或 NVIDIA Docker runtime,这个选项可能会导致错误 | docker run --gpus all my-image |
docker ps
2、列出运行状态的容器
-
选项:
-
-a或--all:显示所有容器(包括未运行的)。 -
-l或--latest:显示最近创建的容器。 -
-n:显示最近创建的N个容器。 -
-s或--size:显示容器的大小。 -
-q或--quiet:仅显示容器的ID。 -
--format:自定义输出格式。
-
3、查看所有的容器
docker ps -a
4、启动容器
docker start<容器ID 或 容器名称>
5、关闭容器
docker stop <容器ID 或 容器名称>
6、重启容器
docker restart <容器ID 或 容器名称>
7、查看容器详细信息
docker inspect [选项] <容器ID 或 容器名称>
8、暂停容器
docker pause <容器ID 或 容器名称>
9、恢复容器
docker unpause <容器ID 或 容器名称>
10、主机与容器之间复制文件或目录
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
-
功能:将文件或目录从主机复制到容器。
-
参数:
-
SRC_PATH:主机上的源文件或目录路径。 -
CONTAINER:容器的ID或名称。 -
DEST_PATH:容器中的目标路径。
-
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
-
功能:将文件或目录从容器复制到主机。
-
参数:
-
CONTAINER:容器的ID或名称。 -
SRC_PATH:容器中的源文件或目录路径。 -
DEST_PATH:主机上的目标路径。
-
11、删除容器
docker rm <容器ID 或 容器名称>
-
选项:
-
-f或--force:强制删除正在运行的容器。 -
-v:删除与容器关联的卷。
-
12、进入容器
例如:docker exec -it <容器ID 或 容器名称> /bin/bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-
参数:
-
CONTAINER:容器的ID或名称。 -
COMMAND和ARG:要在容器中执行的命令及其参数。
-
-
选项:
-
-d或--detach:在后台运行命令。 -
-i或--interactive:保持STDIN打开。 -
-t或--tty:分配一个伪终端。 -
-e或--env:设置环境变量。
-
13、查看容器中的进程
docker top <容器ID 或 容器名称>
14、查看容器的资源使用情况
docker stats <容器ID 或 容器名称>
-
功能:实时显示一个或多个容器的资源使用情况(CPU、内存、网络等)。
-
选项:
-
-a或--all:显示所有容器的资源使用情况。 -
-n:显示最近的N个容器的资源使用情况。 -
-t或--no-stream:仅显示一次资源使用情况,不持续更新。
-
15、查看容器日志
docker logs [OPTIONS] CONTAINER
-
参数:
-
CONTAINER:容器的ID或名称。
-
-
选项:
-
-f或--follow:实时跟踪日志输出。 -
-t或--timestamps:显示日志的时间戳。 -
--since:显示从指定时间戳之后的日志。 -
--until:显示到指定时间戳为止的日志。 -
-n:显示最近的N条日志。
-
16、更新容器的资源限制
docker update [OPTIONS] CONTAINER [CONTAINER...]
-
功能:更新一个或多个容器的资源限制(如CPU、内存等)。
-
选项:
-
--cpu-period:限制CPU周期。 -
--cpu-quota:限制CPU配额。 -
--cpus:限制CPU数量。 -
--memory:限制内存使用量。 -
--memory-swap:限制内存和交换空间的总使用量。
-
17、提交容器为新的镜像
docker commit mycontainer my-new-image
-
mycontainer是容器的名称 -
my-new-image是新镜像的名称
三、colmap_3.10 + docker安装运行
1、拉取镜像
docker pull colmap/colmap:20240723.601
2、安装NVIDIA Container Toolkit,参考:https://blog.csdn.net/zhngyue123/article/details/146036967
3、运行
xhost +
sudo docker run -itd \
--name colmap310 \
-p 6789:22 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--ipc=host \
--privileged=true \
--gpus all \
colmap/colmap:20240723.601 \
/bin/bash
colmap gui
4、不需要可视化界面的情况
命令行运行colmap
(1) 特征提取
colmap feature_extractor --database_path xxx/database.db --image_path xxx --ImageReader.single_camera=1 --ImageReader.camera_model OPENCV --SiftExtraction.use_gpu=1
(2) 特征匹配
colmap exhaustive_matcher --database_path xxx/database.db --SiftMatching.use_gpu=1
(3) 稀疏建图
colmap mapper --database_path xxx/database.db --image_path xxx --output_path xxx/sparse --Mapper.ba_global_function_tolerance=0.000001
(4) 二进制文件转TXT
colmap model_converter --input_path xxx/sparse/0 --output_path xxx --output_type TXT
5、在没有显卡的机器上运行
在docker中一步一步安装
1、创建 ubuntu:20.04 的容器
2、换国内源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
chmod 777 /etc/apt/sources.list
echo -n "" > /etc/apt/sources.list
echo "下面的国内源" > /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
3、安装colmap
apt-get update && apt-get install -y \
git \
cmake \
build-essential \
vim
apt-get update && apt-get install -y \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-regex-dev \
libboost-system-dev \
libboost-test-dev \libflann-dev \
libmetis-dev \
libeigen3-dev \
libsuitesparse-dev \
libfreeimage-dev \
libgoogle-glog-dev \
libgflags-dev \
libglew-dev
apt-get update && apt-get install -y \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libcgal-qt5-dev
apt-get update && apt-get install -y libatlas-base-dev libsuitesparse-dev
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
# 禁用cuda
cmake -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF ..
make -j$(nproc)
sudo make install
git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
注意安装ceres的时候要禁用cuda,如果eigen、glog报错,就卸载从源码安装。
4、命令行运行colmap
(1) 特征提取
colmap feature_extractor --database_path xxx/database.db --image_path xxx --ImageReader.single_camera=1 --ImageReader.camera_model OPENCV --SiftExtraction.use_gpu=0
(2) 特征匹配
colmap exhaustive_matcher --database_path xxx/database.db --SiftMatching.use_gpu=0
(3) 稀疏建图
colmap mapper --database_path xxx/database.db --image_path xxx --output_path xxx/sparse --Mapper.ba_global_function_tolerance=0.000001
(4) 二进制文件转TXT
colmap model_converter --input_path xxx/sparse/0 --output_path xxx --output_type TXT

5279

被折叠的 条评论
为什么被折叠?



