关于DockerOverlay应用部署和dockeroverlay2的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于/var/lib/docker/overlay2占用很大,清理Docke
关于Docker Overlay 应用部署和docker overlay2的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间、/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录、Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、docker image overlayfs等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- Docker Overlay 应用部署(docker overlay2)
- /var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间
- /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
- Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库
- docker image overlayfs
Docker Overlay 应用部署(docker overlay2)
Docker Overlay 部署条件
要想使用 Docker 原生 Overlay 网络,需要满足以下任意条件:
1、Docker 运行在 Swarm 模式
2、使用键值存储的 Docker 主机集群
本次部署使用键值存储的 Docker 主机集群,需要满足以下条件:
1. 集群中主机连接到键值存储,Docker 支持 Consul、Etcd 和 Zookeeper;
2. 集群中主机运行一个 Docker 守护进程;
3. 集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员;
4. 集群中 Linux 主机内核版本 3.12+,支持 VXLAN 数据包处理,否则可能无法通信。
5. Docker 通过 overlay 网络驱动程序支持多主机容器网络通信。
内核版本升级方案:https://www.cnblogs.com/xiangsikai/p/9899844.html
Docker Overlay 应用部署
- 节点 1 / 键值存储:192.168.1.77
- 节点 2:192.168.1.78
节点 1 节点 2 操作
# 修改两个测试端主机名,并退出终端生效
hostname overlay-01
hostname overlay-02
一、部署 Consul 并运行服务
1.1 节点 1 操作:下载 Consul 二进制包并启动
- 百度云:https://pan.baidu.com/s/1MsVJtYUDJ8LzBqVxwmdc8A
- 密码:g5jd
- 命令行下载:wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_amd64.zip
# 1、解压Consul压缩包
unzip consul_0.9.2_linux_amd64.zip
# 2、将consul移动到/bin/目录下并添加执行权限
mv consul /usr/bin/consul && chmod +x /usr/bin/consul
# 3、启动consul并指定本机IP
nohup consul agent -server -bootstrap -ui -data-dir /var/lib/consul -client=192.168.1.77 -bind=192.168.1.77 &>/var/log/consul.log &
1.2 节点 1 操作:查看日志启动情况
tail /var/log/consul.log -f


2018/10/29 15:17:39 [INFO] agent: Started HTTP server on 192.168.1.77:8500
2018/10/29 15:17:45 [WARN] raft: Heartbeat timeout from "" reached, starting election
2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Candidate] entering Candidate state in term 2
2018/10/29 15:17:45 [INFO] raft: Election won. Tally: 1
2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Leader] entering Leader state
2018/10/29 15:17:45 [INFO] consul: cluster leadership acquired
2018/10/29 15:17:45 [INFO] consul: New leader elected: localhost.localdomain
2018/10/29 15:17:45 [INFO] consul: member ''localhost.localdomain'' joined, marking health alive
2018/10/29 15:17:45 [INFO] agent: Synced node info
==> Newer Consul version available: 1.3.0 (currently running: 0.9.2)
二、部署 Docker 配置文件
2.1 节点 1 操作:配置 Docker 守护进程连接 Consul
# 添加 ExecStart 如果已有则注释添加下面案例
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.77:2375


# 为docker监听
tcp://0.0.0.0:2375
2.2 节点 1 操作:重启 docker 服务
# 1.修改配置文件重新加载
systemctl daemon-reload
# 2.重启docker服务
systemctl restart docker
2.3 节点 2 操作:修改配置文件
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375


# 通告信息需要改为本机IP
--cluster-advertise 192.168.1.78:2375
2.4 节点 2 操作:重启 docker 服务
# 1.修改配置文件重新加载
systemctl daemon-reload
# 2.重启docker服务
systemctl restart docker
三、创建 Overlay 网络
3.1 节点 1 操作:创建 overlay 网络
# 创建网络 -d 指定网络驱动程序为 overlay multi_host
docker network create -d overlay multi_host
注:再任意节点创建后会通过 overlay 同步到已连接的节点下创建网络。


命令:docker network ls
4abe591cdf50 multi_host overlay global


命令:docker network inspect ID/KEY
[
{
"Name": "multi_host",
"Id": "4abe591cdf504c1f15f563e4c8516c22b7d037268e6975e9491a417d2da83e8a",
"Created": "2018-11-01T10:42:00.117452769+08:00",
"Scope": "global",
# 驱动为overlay
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
# 网段信息
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
四、测试通信
4.1 节点 1 与 2 操作:运行测试容器
# 指定连接网络类型 --net=multi_host
docker run -it --net=multi_host busybox
注:如果报错则可在配置文件中 ExecStart 添加加如下参数
--default-runtime=docker-runc


建议添加 多个参数
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
如下
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375 --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json
4.2 节点 1 与 2 操作:测试通信
overlay-01
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:03
inet addr:10.0.0.3 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:906 (906.0 B) TX bytes:586 (586.0 B)
overlay-02
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:02
inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1136 (1.1 KiB) TX bytes:656 (656.0 B)
测试是否通信 overlay-02 ping overlay-01
/ # ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.960 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.355 m
注:通信成功。
/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间

转:
/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间
今天收到一个磁盘告警,告警的原因是一台 Jenkins 机器上某个磁盘空间满了。
马上使用 df -h 命令看下使用情况
上图是我优化后的截图,告警的时候磁盘使用量已经接近 100%。
上图中看到的 overlay 分区是 Docker 的虚拟文件系统,其真实的文件系统是 /dev/vda1。所以我们要找到是什么原因大量占据了 /dev/vda1。
一般有两种情况。
无用的镜像和容器太多
我们可以使用以下命令大致看下情况
docker system df -v
# 用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无tag的镜像。
docker system prune
# 可以将没有容器使用 Docker 镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了
docker system prune -a
日志、大文件占用了 /dev/vda1 分区
还有一种情况就是 一些日志文件,大文件占用了 /dev/vda1 分区。这个分区一般是挂载在 “/” 下面。
所以我们可以重点关注下面几个目录:
- /var/tmp
- /var/log
- /root
转:
/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间
--Posted from Rpc
/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
0 du -hs /var/lib/docker/ 命令查看磁盘使用情况。
linlf@dacent:~$ sudo du -hs /var/lib/docker/
237G /var/lib/docker/
1 docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
linlf@dacent:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 2 122.2GB 79.07GB (64%)
Containers 2 2 61.96GB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
2 docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
linlf@dacent:~$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
3 docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker 镜像。
4 迁移 /var/lib/docker 目录。
4.1 停止docker服务。
systemctl stop docker
4.2 创建新的docker目录,执行命令df -h,找一个大的磁盘。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:
mkdir -p /home/docker/lib
4.3 迁移/var/lib/docker目录下面的文件到 /home/docker/lib:
rsync -avz /var/lib/docker /home/docker/lib/
4.4 配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在,就新建。
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo vi /etc/systemd/system/docker.service.d/devicemapper.conf
4.5 然后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在 /home/docker/lib/docker )
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
4.6 重新加载 docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
4.7 为了确认一切顺利,运行
# docker info
命令检查Docker 的根目录.它将被更改为 /home/docker/lib/docker
...
Docker Root Dir: /home/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
...
4.8 启动成功后,再确认之前的镜像还在:
linlf@dacent:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
AAA/AAA v2 7331b8651bcc 27 hours ago 3.85GB
BBB/BBB v1 da4a80dd8424 28 hours ago 3.47GB
4.9 确定容器没问题后删除/var/lib/docker/目录中的文件。
https://blog.csdn.net/qq_37674858/article/details/79976751
https://blog.csdn.net/cmrsautomation/article/details/52857791
Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库
MySQL 部署
拉取 mysql 镜像 docker pull centos/mysql-57-centos7
创建 MySQL 容器 docker run -di --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=320512 centos/mysql-57-centos7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登录密码
Tomcat 部署
拉取镜像 docker pull tomcat:7-jre7
创建容器 创建容器 -p 表示地址映射
docker run ‐di ‐‐name=mytomcat ‐p 9000:8080
‐v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7‐jre7
Nginx 部署
拉取镜像 docker pull nginx
创建容器 docker run ‐di ‐‐name=mynginx ‐p 80:80 nginx
Redis 部署
拉取镜像 docker pull redis
创建容器 docker run ‐di ‐‐name=myredis ‐p 6379:6379 redis
迁移与备份
容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit 容器名称 镜像名称
镜像备份
我们可以通过以下命令将镜像保存为 tar 文件
docker save -o tar 文件名称 镜像名称
恢复镜像
docker load -i tar 文件名称
Dockerfile
Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是 Dockerfile 的核心部分 (可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和 ADD 相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
使用脚本创建镜像
步骤:
(1)创建目录
mkdir –p /usr/local/dockerjdk8
(2)下载 jdk-8u171-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录
(3)创建文件 Dockerfile vi Dockerfile
#依赖镜像名称和 ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径 jar, 把 java 添加到容器中
ADD jdk‐8u171‐linux‐x64.tar.gz /usr/local/java/
#配置 java 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
(4)执行命令构建镜像(注意后边的空格和点,不能省略)
docker build ‐t=''jdk1.8'' .
参看镜像是否建立完成
docker images
Docker 私有仓库
私有仓库搭建与配置
(1)拉取私有仓库镜像(此步省略)
docker pull registry
(2)启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
(3) 打开浏览器输入地址 http://ip:5000/v2/_catalog,看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。
(4) 修改 daemon.json vi /etc/docker/daemon.json
添加以下内容,保存退出,这是为了让 docker 信任私有仓库地址 {"insecure-registries":["ip:5000"]}
重启 docker 服务
systemctl restart docker
镜像上传到私有仓库
标记此镜像为私有仓库的镜像 docker tag jdk1.8 ip:5000/jdk1.8
再次启动私服容器
docker start registry
上传标记的镜像
docker push ip:5000/jdk1.8
docker image overlayfs
学习了linux的 namespace之后,知道了docker是如何将机器的资源进行隔离的,那么docker中的镜像分层技术的原理是什么呢?
答案是联合文件系统
对,就是aufs, device mapper, btrfs, overlay, overlay2 当然我今天就演示一下overlay怎么实现镜像分层的原理
先看看overlay的架构图也许就明白了一半了
原理:overlayfs在linux主机上只有两层,一个目录在下层,用来保存镜像(docker),另外一个目录在上层,用来存储容器信息。
在overlayfs中,底层的目录叫做lowerdir,顶层的目录称之为upperdir,对外提供统一的文件系统为merged。当需要修改一个文件时,
使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container
关于Docker Overlay 应用部署和docker overlay2的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间、/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录、Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、docker image overlayfs的相关知识,请在本站寻找。
本文标签: