GVKun编程网logo

Docker Overlay 应用部署(docker overlay2)

6

关于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)

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 占用的磁盘空间

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

转:

/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间

今天收到一个磁盘告警,告警的原因是一台 Jenkins 机器上某个磁盘空间满了。

马上使用 df -h 命令看下使用情况

/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间

上图是我优化后的截图,告警的时候磁盘使用量已经接近 100%。

上图中看到的 overlay 分区是 Docker 的虚拟文件系统,其真实的文件系统是 /dev/vda1。所以我们要找到是什么原因大量占据了 /dev/vda1。

一般有两种情况。

无用的镜像和容器太多

我们可以使用以下命令大致看下情况

docker system df -v

/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间

# 用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无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 目录

/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 私有仓库

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

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的相关知识,请在本站寻找。

本文标签: