一、docker基本认识

1、docker基本概念:docker是一种容器技术,它可以对软件及其依赖进行标准化的打包;容器之间相对独立,基于容器运行的应用之间也是相互隔离的;

并且容器之间是共享一个OS kernel的,充分利用服务器资源,容器可以运行在很多主流的操作系统之上,简单来说,容器就是将软件打包成标准化单元,以用于开发、交付和部署;

dokcer是基于namespace与cgroup技术实现的。

 

2、容器与虚拟机的区别

(1)容器是在linux上运行,并与其它容器共享主机的内核,它运行一个独立的进程,不占用其它任何可执行文件的内存,非常轻量。

(2)虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

如图是容器与虚拟机的区别点:

二、namespace 技术与cgroup介绍

  docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作,可以说namespace与cgroup是容器的基石。

(一)namespace名称空间

1、namespace是什么?

namespace 是 Linux 内核的一项特性,它可以对内核资源进行分区,使得一组进程可以看到一组资源;而另一组进程可以看到另一组不同的资源,简单来说 namespace 是由 Linux 内核提供的,用于进程间资源隔离的一种技术。

2、namespace的六项隔离:namespace的隔离一共有6种实现方式

namepace
系统调用参数
隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
NEWWORD CLONE_NEWNET 网络设备、网络栈、端口等
MOUNT CLONE_NEWNS 挂载点(文件系统)
USER CLONE_NEWUSER 用户和用户组(3.8以后的内核才支持)

(二)cgroup

1、cgroup是什么?

cgroup是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制。

cgroup 的全称是control group,cgroup为每种可以控制的资源定义了一个子系统,我们可以在/sys/fs/cgroup/这个路径下面查看相关信息。

2、cgroup典型的子系统

子系统
作用
cpu 主要限制进程的 cpu 使用率
memory  限制进程的 memory 使用量
devices  可以控制进程能够访问某些设备
ns 可以使不同 cgroups 下面的进程使用不同的 namespace
blkio  可以限制进程的块设备 io
net_cls  可以标记 cgroups 中进程的网络数据包,使用 tc 模块(traffic control)对数据包进行控制

 

三、docker三要素

1、镜像(Image):镜像就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

2、容器(Container):容器是用镜像创建的运行实例,我们可以把容器理解为一个精简版的linux操作系统,包括root用户权限,进程空间,用户空间和网络空间等等这些,然后加上再它之上运行的应用程序。

3、仓库(Repository):仓库是集中存放镜像文件的场所,仓库分为公开仓库和私有仓库,比较常见的是harbor,Docker Hub。

四、dokcer基本安装

(一)CentOS安装docker之二进制安装

1、下载最新版本:Docker官网下载地址: https://download.docker.com/linux/static/stable/x86_64/,我这里下载docker-20.10.9.tgz版本

2、解压安装包:tar -zxvf docker-20.10.9.tgz

3、创建docker.service

vim /usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

4、运行docker并加入开机自启动

# 重新加载服务配置文件

systemctl daemon-reload

# 启动docker 

start docker

# 设置开机启动

systemctl enable docker

5、添加docker配置文件

vim /etc/docker/daemon.json

{
“insecure-registries”: [“xx.xx.xx.xx”], #远程仓库
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”,  #存储引擎
“live-restore”: true,
“graph”:”/apps/docker”,        #存储位置
“exec-opts”: [“native.cgroupdriver=systemd”] #cgroups驱动方式
}

6、查看docker安装时候成功

systemctl status docker

 五、Docker 数据卷介绍

Docker的镜像是分层设计的,镜像层是只读的,通过镜像启动的容器添加了一层可读写的文件系统,用户写入的数据都保存在这一层当中。如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录,目前

Docker的数据类型分为两种:

一、是数据卷(datavolume),数据卷实际上就是宿主机上的目录或者是文件,可以被直接mount到容器当中作为容器的本地文件系统使用,实际生产环境中,需要针对不同类型的服务、不同类型的数据存储要求做相应的规划,最终保证服务的可扩展性、稳定性以及数据的安全性。基于数据卷通过将

宿主机的文件或目录挂载到容器的指定目录,当容器中的挂载目录产生的新数据即可间接的保存到宿主机以实现持久化的目的。

二、是数据卷容器(Datavolumecontainer),数据卷容器是将宿主机的目录挂载至一个专用的数据卷容器,然后让其他容器通过数据卷容器继承挂载的目录或文件,以实现将新产生的数据持久化到宿主机的目的。

 (一)数据库卷

1、特点:

(1)数据卷是宿主机的目录或者文件,并且可以在多个容器之间共同使用。

(2)在宿主机对数据卷更改数据后会在所有容器里面会立即更新。

(3)数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不影响。

(4)在容器里面的写入数据不会影响到镜像本身。

2、使用场景:

(1)容器数据持久化(mysql数据、nginx日志等类型)。

(2)静态web页面挂载应用配置文件挂载。

(3)多容器间的目录或文件共享。

3、常见命令:

#创建数据卷

docker volume create nginx-data

#查看数据卷

dockervolumels

#使用数据卷

dockerrun-it-d-p80:80-vnginx-data:/datanginx:1.20.2

注意:创建容器的时候指定参数会删除/var/lib/docker/containers/的容器数据目录,但是不会删除数据卷的内容。

(二)数据卷容器

数据卷容器功能是可以让数据在多个docker容器之间共享,即先要创建一个后台运行的A容器作为Server,之后创建的B容器、C容器等都可以同时访问A容器的内容,因此数据卷容器用于为其它容器提供卷的挂载继承服务,数据卷为其它

容器提供数据读写服务,A容器称为server端、其它容器成为client端。

1、特点:

(1)适用于同类服务的数据卷共享

(2)client会继承卷server挂载和挂载权限

(3)停止卷server,也不影响已经运行的容器、甚至也不影响新建容器删除卷server,不影响已经运行的容器,但是不能新建容器

2、使用:

创建数据卷容器:docker run -d –name volume-server -v /data/testapp:/usr/share/nginx/html/testapp nginx:1.19.0

client1:dockerrun-d–name web1 –volumes-from volume-server -p80:80 nginx:1.20.2

client2::dockerrun-d–name web2 –volumes-from volume-server -p81:80 nginx:1.20.2

六、Docker网络介绍

docker网络模式一共有4种:bridge模式、host模式、none模式、container模式

(一)bridge模式:

docker的默认模式即不指定任何模式就是bridge模式,也是目前使用比较多的网络模式,此模式创建的容器会为每一个容器分配自己的网络IP等信息,并将容器连接到一个虚拟网桥与外界通信。

(2)container模式:

Container模式即容器模式,使用参数–net=container:目标容器名称/ID指定,使用此模式创建的容器需指定和一个已经存在的容器共享一个网络namespace,而不会创建独立的namespace,即新创建的容器不会创建自己的网卡也不会配置

自己的IP,而是和一个已经存在的被指定的目标容器共享对方的IP和端口范围,因此这个容器的端口不能和被指定的目标容器端口冲突,除了网络之外的文件系统、用户信息、进程信息等仍然保持相互隔离,两个容器的进程可以通过lo网

卡及容器IP进行通信。

使用:

#docker run -it -d–name nginx-container-p80:80 –net=bridge nginx:1.22.0-alpine

#docker run -it -d–name php-container–net=container:nginx-container php:7.4.30-fpm-alpine

分别进入容器就可以验证IP信息,查看IP是否相同。 

原文地址:http://www.cnblogs.com/zhengsk/p/16858530.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性