常用命令
通过ssh挂载到远程主机的目录
1 | |
通过nfs挂载远程主机的目录
1 | |
首次启动并挂载到本地的空目录
1 | |
删除所有未被使用的数据卷
1 | |
修改docker安装目录
docker默认安装的目录是在/var/lib/docker目录下,如果需要修改到其他目录,可以做如下方法
- 将/var/lib/docker内容复制到其他目录,然后建个软连接
- 对于版本大于 v17.05.0,修改/etc/docker/daemon.json,加入”data-root”: “/store/software/docker”
然后重启docker服务
打包并导入镜像
1 | |
Dockerfile
1 | |
在使用Dockerfile构建镜像的时候,默认会将当前目录中的所有内容复制到docker中的builder文件夹中,所以尽量在一个新目录中新建镜像
配置btrfs文件驱动
-
将docker的安装目录移动到btrfs问价系统上的目录上
-
在/etc/docker/daemon.json文件中添加配置
1 | |
重启docker服务,通过docker info查看Storage Driver的类型是btrfs
在容器里面可以使用btrfs的子卷和快照功能,但是无法查看和删除子卷,但是在容器外面却可以
在容器外面查看子卷的情况
btrfs subvolume list ./

可以看到,如果配置了btrfs驱动,每次启动一个容器docker就会自动新建对应的subvolume,图中最后俩个subvolume是在容器内部新建的
1 | |
将正在运行的容器打包成镜像
1 | |
搭建内网harbor
- 安装docker-compose,harbor对docker-compose的版本都要求,尽量使用最新的吧,
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
- 按装pip
apt-get install python-pip
- 下载Harbor包,版本可以换成新的,然后解压
https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.6.1.tgz
-
修改配置文件,可能叫harbor.yml,修改hostname为自己的ip,还是http的port,其他的配置可自行百度
-
执行
./install.sh,没什么问题就可以看见在下载相关镜像并且使用docker-compose启动容器 -
在节点上 ,需要配置daemon.json中
"insecure-registries":["ip:port"]
限制资源
–cpu 4 4个进程
–cpus 1.5 1.5个cpu核数
–cpuset-cpus=0,1 使用第0和第1个核
-m 最小值是4m,
–memory-swap 使用的swap大小,如果为-1,不限制swap大小,为0或者和-m相同,那么可以使用俩倍与-m大小的swap,如果比-m大,那么可以使用–memory-swap减去-m值的swap大小
–memory-swappiness 主机包容器使用的匿名也swap出来,这个是个比例
–memory-reservation 设置一个内存使用的soft limit,是OOM的阈值,必须小于-m的值
–kernel-memory 内核内存的大小
–oom-kill-disable 是否在OOM的时候杀死容器,只有设置了-m,这个才能设置为false
–device-read-bps 磁盘的读速度
–device-write-bps 磁盘的写速度
–device-read-iops 磁盘每秒io读操作的上限
–device-write-iops 磁盘每秒的IO写操作上限
目前不支持限制单个容器的磁盘空间占用,但是可以使用lvm做逻辑分卷,挂载卷的方式限制挂载的空间的大小
在docker里面运行docker
启动容器时,加上参数--privileged,保证足够的权限
在由于在容器里面运行容器时,其默认网段可能会与宿主容器冲突,需要修改宿主容器的容器网段配置
1 | |
修改daemon.json,添加如下行
1 | |
重启docker服务
修改容器网段
上面的修改网段的方法需要重启服务,比较麻烦,但是如果容器已经在运行,并且不能重新用docker run启动一个容器,那么就不得不用上面的方法这么做了。
但是如果在容器启动的时候就规划好网段,可以使用以下方法
1 | |
这样就可以指定容器的ip了
如果同一个宿主机的不同容器在不同的网段,即在启动容器的时候指定不同的bridge,那么需要如下的操作让这些容器联通
1 | |
启动docker engine api
通过service docker status找到docker的service文件,ubuntu中一般是在/lib/systemd/system/docker.service,修改这个文件,注释掉原来的ExecStart行,改成ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock,然后systemctl daemon-reload && service docker restart,即可,访问主机的2375端口,就可以获取主机的docker相关信息
官网上有对应的api使用方法介绍,比如1.39版本的api使用地址https://docs.docker.com/engine/api/v1.39/
buildkit
这个是docker官方推出的新的构建镜像工具,当前属于测试阶段,需要docker的版本大于18.09才可以使用。
-
需要
docker/dockerfile:experimental镜像 -
需要
moby/buildkit镜像 -
安装命令如下
1 | |
- Dockerfile中的首行需要添加
1 | |
-
环境变量中
export DOCKER_BUILDKIT=1 -
在Dockerfile中
1 | |
表示将ubnutu:16.04中的镜像中的/etc目录挂载到本次构建镜像的/myetc目录中
docker export import
1 | |
网络模式
-
host模式,主机模式,直接使用宿主机的ip和端口
-
container模式,容器模式,和指定的容器共享ip和端口
-
bridge模式,网桥模式,容器使用独立的network namespace,创建虚拟网卡,然后给容器分配ip和端口,然后在iptables配置DNAT,实现端口转发
-
none,无网络