docker使用进阶

docker不太常用的命令

  • docker ps -s #查看容器所占的磁盘大小
  • docker rm ${docker ps -q -a} # 删除全部非运行态的容器
  • docker system df #查看docker存储的使用情况
  • docker system prun #清理无用的容器、网络、数据集
  • docker rmi $(docker images | awk ‘/^/ { print $3 }’) #删除的镜像repositry为none的镜像
  • 删除 未被使用的镜像 docker rmi $(docker images | awk ‘ { print $3 }’)

docker配置参数

  1. –iptables ,该参数用于控制是否允许docker去管理iptables,当设置为true时,允许docker去管理iptbales表
    • 通常在docker单独使用时,需要这样配置,如果配置为false,iptables被清空后,是无法自动创建的
    • 在基于Kubernetes等管理docker时,可以配置iptables=false
  2. –ip-forward,该参数用于控主机容器与外部网络之间的相互通信,当设置为true时,允许容器被外部访问,当设置为false时,外部是无法访问到容器
    • 当宿主机设置了ip_forward参数为1时,会以宿主机的配置为准,docker的改配置参数无效

迁移docker存储方式一

若docker已经运行一段时间,并存在运行的容器,可以采用以下方法进行容器存储的迁移

  1. 停止全部容器
  2. 停止docker:systemctl stop docker
  3. mkdir -p /sl/docker/
  4. 移动docker存储:mv /var/lib/docker/* /sl/docker/
  5. 建立软连接:ln -s /sl/docker /var/lib/
  6. systemctl start docker

==注意删除软连接是 rm /var/lib/docker 后面不能有斜杠,否则是删除整个目录)==

迁移docker存储方式二

  1. 停止全部容器
  2. 停止docker:systemctl stop docker
  3. cd /sl
  4. mkdir dockerdaemon
  5. cd /sl/dockerdaemon
  6. tar -czvpf docker.tar.gz /var/lib/docker
  7. tar zxvf docker.tar.gz -C /sl/dockerdaemon
  8. cd /sl/dockerdaemon/var/lib/
  9. mv docker/ ../../
  10. mv /var/lib/docker /sl/backup
  11. ln -s /sl/dockerdaemon/docker /var/lib/

基于操作系统制作docker镜像

执行以下操作

  1. tar –exclude=/usr/lib32 -cPvf fedora21-base.tar /home

将本机运行的操作系统打成一个fedora21-base.tar包,其中–exclude参数是将不需要的目录排除,可以使用–exclude多个参数排除多个目录。

  1. cat fedora21-base.tar | docker import - fedora21-base

将tar包使用docker import编译导入镜像

  1. docker run -i -t fedora21-base /bin/bash

启动镜像。-i 代表打开标准输入 -t 虚拟一个窗口 /bin/bash启动镜像执行的命令

进入容器命名空间

获取容器的init pid
cat /run/containerd/io.containerd.runtime.v1.linux/moby/7208ab53697925439605bca93718c6158db354909fedbe7a1f96ddcd5d5563db/init.pid
18399
进入mount 命名空间,可以直接查看容器的目录空间
nsenter -t 18399 -m
进入

获取节点全部镜像push

docker images|grep iamgetag |awk ‘{print $1}’|while read image_id;do docker push $image_id; done

docker NET_ADMIN 权限

允许在容器内进行一些网络的操作权限,在某些情况下如果容器具有该权限后,会操作宿主机的网络(为容器设置–net=host时,会对宿主机网络带来安全隐患)

1
2
For interacting with the network stack, instead of using --privileged they should use --cap-add=NET_ADMIN to modify the network interfaces.
CAP_NET_ADMIN lets you use the SIOCETHTOOL ioctl() on any network device inside the namespace. This includes commands like ETHTOOL_FLASHDEV, i.e. ethtool -f
1
2
3
4
5
6
7
8
9
Perform various network-related operations:
- interface configuration;
- administration of IP firewall, masquerading, and accounting
- modify routing tables;
- bind to any address for transparent proxying;
- set type-of-service (TOS)
- clear driver statistics;
- set promiscuous mode;
- enabling multicasting;