本文最后更新于:2025年4月30日 下午
本文简要介绍Docker,记录Docker常用命令使用方法。
Docker 简介
**Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。**Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
Docker 使用流程
安装docker
创建Image
从Image创建Container
在Container中工作
将在Container中做的修改提交给Image
销毁Container
安装docker
1 sudo apt-get install -y ca-certificates curl gnupg
运行下列命令添加 Docker 的官方 GPG 密钥:
1 2 3 sudo install -m 0755 -d /etc/ apt/keyrings curl -fsSL https:// download.docker.com/linux/u buntu/gpg | sudo gpg --dearmor -o / etc/apt/ keyrings/docker.gpg sudo chmod a+r /etc/ apt/keyrings/ docker.gpg
1 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME " ) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker
这里带了 docker compose 命令的插件安装(与 docker-compose 是不一样的)
1 sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
安装成功后如果需要方便地运行 docker 命令,需要把对应用户添加到 docker 组内
1 usermod -a -G docker user
之后重新登录即可使用 docker 命令,也可以执行命令:
安装 Docker-Compose
1 curl -SL https://gi thub.com/docker/ compose/releases/ download/v2.30.1/ docker-compose-linux-x86_64 -o /usr/ local/bin/ docker-compose
下载下来直接放到 bin 里就行。
验证 Docker 服务
查看已安装的 Docker 版本
镜像命令
拉取 image
1 docker image pull [docker-url]
获取docker images 列表
1 2 3 docker images 或 docker image ls
重命名镜像
如果在 commit 容器到镜像时,没有填写 TAG 则会生成仓库\tag 为 None的镜像
1 2 3 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE<none> <none> b55ab710941a 21 minutes ago 15.9 GB
1 docker tag [镜像ID ] [镜像名称]
例如 $ docker tag b55 vvd
此时镜像名称为
1 2 3 4 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE vvd latest b55ab710941a 27 minutes ago 15.9 GB nvidia/cuda 11.0 -base 2 ec708416bb8 2 years ago 122M B
1 docker tag [镜像ID ] [新镜像名称]:[旧镜像名称]
如果我不想容器名称为 latest
运行 $ docker tag b55 vvd:cu113-torch111
则此时容器名称:
1 2 3 4 5 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE vvd cu113-torch111 b55ab710941a 28 minutes ago 15.9 GB vvd latest b55ab710941a 28 minutes ago 15.9 GB nvidia/cuda 11.0 -base 2 ec708416bb8 2 years ago 122M B
删除镜像 / 删除 tag
或
支持的子命令如下:
-f, -force
: 强制删除镜像,即便有容器引用该镜像;
-no-prune
: 不要删除未带标签的父镜像;
在刚刚的例子中如果删掉 vvd: latest
镜像则仅仅删除了他的名称,实体镜像还在,因为还有一个引用指向他
1 2 3 4 5 6 $ docker rmi vvd:latest Untagged: vvd:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE vvd cu113-torch111 b55ab710941a 37 minutes ago 15.9 GB nvidia/cuda 11.0 -base 2 ec708416bb8 2 years ago 122M B
查看镜像\容器占用磁盘大小
容器命令
建立容器(nvidia docker)
1 NV_GPU=[gpu_num] nvidia-docker run -it --name [container_name] --shm-size =[shm_size] --rm -v [current_dir] :[container_dir] -p [current_port] :[container_port] [image_name] :[image_tag] [command]
参数
含义
NV_GPU
container中可见的GPU,如果不设置可见所有GPU,Nvidia docker 专用
-it
将容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
--name
容器名称,如果不设置会随机分配一个名字
--shm-size
容器共享内存大小设置。如果不设置默认大小64M,对于需要使用共享内存的情况往往是不够用的,如果设置为10g,这样配置: --ssh-size="10g"
--rm
容器关闭后自动删除,如果不设置容器不会自动删除
-v
驱动器映射,将本机的目录映射到容器的指定文件夹中;需要说明的是,在主机文件夹中的挂载目录在容器中是可见的;需要再说明的是容器启动时主机挂载的目录容器是见不到的;最后说明,容器关闭再打开就可以看到主机挂载的所有文件夹了。
-p
暴漏容器的端口到本机的端口上,例如用于ssh连接容器时需要将容器的22端口暴露到主机的端口上(比如3721),则可以设置 -p 3721:22
[image_name, image_tag]
这是docker镜像的名称与标记,如果使用本机镜像可以在docker images列表中查询到
command
启动容器后内部执行的第一个命令,一般为 /bin/bash
-d
后台运行
--restart=<value>
容器是否自动启动<value>
可选: no - 容器退出时,不重启容器 on-failure - 只有在非0状态退出时才从新启动容器 always - 无论退出状态是如何,都重启容器,可以依此设置容器开启自动启动;
–privileged
容器是否具有root权限,值默认为false,此时容器内虽然是root用户,但事实上仅为宿主机的普通用户权限,无法使用 mount 等命令,如果需要在容器中挂载如 nfs、samba 等磁盘,需要在建立容器时将该值设置为 true, 该值无法使用 docker update 更新 –privileged=true
更新容器选项
如果创建容器时选项没有添加完,可以通过update命令设置
查询容器
1 docker container ls --all
–all: 加上该参数会显示没有在运行的容器,不加的话仅显示运行中的容器
也可以运行
1 2 3 docker ps docker ps -a
输出所有容器 id
1 docker port container_name
1 docker inspect container_name
容器控制
1 2 docker container kill docker stop
docker container kill
命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。docker container stop
命令相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。
1 docker start [container_name/containerID]
1 docker restart [container_name/containerID]
1 docker stop [container_name/containerID]
可以结合 docker ps -aq
停止所有容器
1 docker stop $ (docker ps -aq )
1 2 3 docker container rm [container_name/containerID] docker rm [container_name/containerID]
可以结合 docker ps -aq
删除所有容器
1 docker rm $ (docker ps -aq )
1 docker exec -it [containerID] /bin/bash
此种方法启动的终端,即使退出也不会关闭容器
相反 - 如果直接通过端口映射连接 docker 建立的ssh链接,窗口退出后该终端的工作也会一同停止
1 docker attach [containerID]
连接到容器的主终端,该终端退出后容器关闭。
如果不希望退出后关闭,可以加入选项 --sig-proxy=false
可以在退出终端的同时保持终端继续工作
在容器中运行此命令
1 docker commit -a [name] -m [comments] -p [containerID[:TAG] ]
-a: 提交的镜像作者
-m: 提交时的说明文字
-p: 在 commit 时,将容器暂停
参考资料
文章链接:
https://www.zywvvd.com/notes/tools/docker/docker-usage/