docker常用指令汇总
常用指令
安装
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.在多个设备驱动上执行管理员操作。