Yuhang Zheng

docker常用指令汇总

N 人看过

常用指令

安装

sudo apt install docker docker-ce

搜索想要安装的镜像

sudo docker search debian

选择一个镜像下载

普通下载,默认为最新版本
sudo docker pull itscaro/debian-ssh
指定版本下载
sudo docker pull itscaro/debian-ssh:latest

查看已经下载的镜像

sudo docker images

使用镜像创建容器并运行

sudo docker run -it --privileged=true --cap-add=SYS_ADMIN -v /data/home/zyh/10xx_source:/home/zyh/workspace -v /data/home/lixinguo/10xx_source:/home/lixinguo/workspace -p 54110:22 ad2a3f85fe12 bin/bash

--privileged=true    :    使用该参数,container内的root拥有真正的root权限
                        否则,container内的root只是外部的一个普通用户权限。
--cap-add=SYS_ADMIN    :    为容器授予一小部分功能,具体内容参照下面详解
-v                    :    将宿主机目录挂载到docker容器内部位置
-p                    :    将宿主机外部端口连接docker容器端口
-i                    :    以交互模式运行容器,通常与 -t 同时使用
-t                    :    为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d                    :    后台运行容器,并返回容器ID
sudo docker run -itd \
  -v /mnt/data/ttnode:/mnts \
  --name ttnode \
  --hostname ttnode1 \
  --net=host \
  --privileged=true \
  --restart=always \
  ericwang2006/ttnode    此处可以写镜像名称或者是镜像id号

退出容器

按住 CTRL+P  CTRL+Q 两次组合按键就退出了
注意:终端退出了之后容器依然还在运行,可以看一下容器状态

查看正在运行的容器

sudo docker ps

查看已经存在的容器,包括已经运行的和没有运行的

sudo docker ps -a

进入容器

docker exec -it ttnode /bin/bash    此处可以写镜像名称或者是镜像id号

提交新的容器内容到一个新的镜像,可以使用sudo docker images查看到

sudo docker commit bb2aa908b94b debian_ssh_rootlogin:9

删除镜像

sudo docker image rm ttnode        此处可以写镜像名称或者是镜像id号

删除容器

sudo docker rm 370652940a5d        此处可以写容器名称或者是容器id号

分析 Docker 空间分布

sudo docker system df -v

常见问题:

一、解决删除镜像时image is referenced in multiple repositories

1、查看镜像 docker images

rt@123:~# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.0.1/jii/jenkins                    1.0.1              3391ef1391f6        18 hours ago        206 MB
192.168.0.1/you/tom                        1.0.8              f8ab12e03d53        22 hours ago        276 MB
192.168.0.1/you/tom                        1.0.9              f8ab12e03d53        22 hours ago        276 MB

2、删除镜像,会报错

rt@123:~# docker rmi f8ab12e03d53
Error response from daemon: conflict: unable to delete f8ab12e03d53 (must be forced) - image is referenced in multiple repositories

仔细观察,发现f8ab12e03d53这个镜像id指向了两个repository,因此无法删除

3、删除时可以用repository和tag的方式来删除

rt@123:~# docker rmi 192.168.0.1/you/tom:1.0.8
Untagged:192.168.0.1/you/tom:1.0.8

4、再次查看镜像,1.0.8的就被删除了。

rt@123:~# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.0.1/jii/jenkins                    1.0.1              3391ef1391f6        18 hours ago        206 MB
192.168.0.1/you/tom                        1.0.9              f8ab12e03d53        22 hours ago        276 MB

二、docker文件存放位置

pi@raspberrypi:/media $ sudo ls /var/lib/docker/
builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes

三、CAPABILITIES的SYS_ADMIN介绍

CAP_SYS_ADMIN功能,是CAPABILITIES内众多参数中提供系统管理员操作的一个配置项。 官网介绍如下: 它可以提供以下权限:

1.多个系统管理员的命令的权限,例如 quotactl(2), mount(2), umount(2), swapon(2),setdomainname(2)等。
2.特权syslog操作。
3.执行VM86_REQUEST_IRQ vm86命令。
4.对系统的IPC对象执行IPC_SET and IPC_RMID操作。
5.覆盖RLIMIT_NPROC 资源限制。
6.执行XATTR对信任安全模块进行额外的属性操作。
7.使用lookup_dcookie
8.使用ioprio_set给IOPRIO_CLASS_RT赋值。
9.通过socket认证时伪造PID。
10.操作/proc/sys/fs/file-max,修改全系统范围内的打开文件个数限制。例如使用 accept(2), execve(2), open(2), pipe(2)方式打开文件。
11.在创建新namespace的时候应用CLONE_*标签。
12.调用 perf_event_open(2)
13.获取特权perf事件消息。
14.调用 setns(2)。
15.调用fanotify_init(2)。
16.调用bpf。
17.执行特权 KEYCTL_CHOWN和KEYCTL_SETPERM 等操作。
18.使用ptrace做一些跟踪dump的操作。
19.进行madvise操作。
20.应用ioctl来插入字符到终端。
21.应用nfsservctl系统调用。
22.应用bdflush系统调用。
23.执行特权块设备ioctl。
24.执行特权文件系统ioctl。
25.执行对/dev/random设备的特权ioctl。
26.在多个设备驱动上执行管理员操作。