- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
docker是什么:Docker 是完整的一套容器管理系统,所以想要搞懂 Docker 的概念,我们必须先从容器开始说起.
什么是容器?
- [x] 容器是用来装东西的,Linux 里面的容器是用来装应用的; 。
- [x] 容器就是将软件打包成标准化单元,以用于开发、交付和部署; 。
- [x] 容器技术已经成为应用程序封装和交付的核心技术; 。
容器原理:容器技术的核心,由以下几个内核技术组成:
- [x] Cgroups (Control Groups) — 资源管理 。
- [x] SELinux — 安全 (是针对于文件系统,文件的管理措施) 。
- [x] NameSpace — 命名空间 。
命名空间:
#是指可以对系统资源空间进行 分割隔离 的技术,例如:创建一个虚拟机,在虚拟机里的所有操作,都不会对真实机造成影响.
#命名空间分为六大类,可以从各个方面来对系统资源空间进行隔离; 。
Linux 的 NameSpace 。
- [x] UTS、NETWORK、MOUNT、USER、PID、IPC 。
UTS:
#主机名命名空间,作用:分割主机名,即在容器内修改主机名,不会对宿主机的系统造成影响,实现主机名的隔离; 。
没有隔离前,修改主机名为zhangsan,重新打开一个终端,主机名也被修改为zhangsan 。
[root@localhost ~]# hostname zhangsan #临时设置主机名
[root@localhost ~]# bash #立刻生效
[root@zhangsan ~]#
使用unshare命令模拟主机名的命名空间,修改主机名为namespace,重新打开一个终端,主机名没有发生变化,还是zhangsan 。
[root@zhangsan ~]# unshare -u /bin/bash
[root@zhangsan ~]# hostname namespace #临时设置主机名
[root@zhangsan ~]# bash #立刻生效
[root@namespace ~]#
NETWORK:网络命名空间,作用:分割网络,即容器内的网络配置和宿主机相互之间不受干扰的; 。
例如:
#在真实机器上的网卡名为eth0,IP地址为192.168.1.10/24; 。
#而在容器内的网卡名可以为ens33,ip地址为10.10.10.10/24; 。
MOUNT
#挂载命名空间,作用:隔离文件系统,在容器内挂载的光盘或nfs共享目录,宿主机是无法看到里面的内容的; 。
例如:
#在linux系统上,创建一个虚拟机,在真机的/var/lib/ftp中挂载了一个光盘文件,但是在虚拟机的/var/lib/ftp中是没有光盘内容的,这就是MOUNT隔离; 。
USER
#用户命名空间,作用:隔离用户,即容器内创建的用户不能用于登录宿主机,真机机里创建的用户也不能作用于容器; 。
PID
#进程命名空间,作用:为了防止容器和宿主机中的进程冲突; 。
例如:
#在真实机中,有一个服务: nfs,PID为2250; 。
#在容器内,也有一个服务: chrony,PID为2250; 。
#真实机中用户,杀死(kill) PID号为2250的进程时,并不会对容器内的进程2250产生影响; 。
#而容器内的用户,杀死(kill) PID号为2250的进程时,也并不会对真实机内的进程2250产生影响; 。
IPC
#信号向量命名空间,作用:通常和PID一起使用; 。
#用户杀死一个进程时,实际上是向进程发送一个信号(IPC),进程接收到这个信号后会执行对应的操作; 。
docker 的优缺点 。
优点 。
- [x] 相比于传统的虚拟化技术,容器更加简洁高效 。
- [x] 传统虚拟机需要给每个 VM 安装操作系统 。
- [x] 容器使用的共享公共库和程序 。
缺点 。
- [x] 容器的隔离性没有虚拟机强 。
- [x] 共用Linux内核,安全性有先天缺陷 。
docker 与传统虚拟化的对比 。
虚拟化
#例如:虚拟机的使用,每一个虚拟机都要安装独立的操作系统; 。
容器
#不需要安装独立的操作系统,只有一个Docker进程,和宿主机共享操作系统; 。
#容器没有操作系统,启动容器就跟开启一个进程一样,简单高效; 。
容器的高效性:
#启动虚拟机中的应用程序,需要先启动虚拟机的操作系统,然后再启动应用程序; 。
#启动容器内的应用程序,直接启动应用程序即可; 。
卸载防火墙和selinux(以kube-node1为例,kube-node2类似操作) 。
[root@localhost ~]# yum -y remove firewalld-*
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled
配置IP地址和主机名(以kube-node1为例,kube-node2类似操作) 。
[root@localhost ~]# echo kube-node1 > /etc/hostname
使用nmcli命令配置IP地址,网关,dns(以kube-node1为例,kube-node2类似操作) 。
[root@kube-node1 ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.11.148/24 ipv4.gateway 192.168.11.254 ipv4.dns 114.114.114.114 connection.autoconnect yes
[root@kube-node1 ~]# nmcli connection up eth0
[root@kube-node1 ~]# reboot
最后此篇关于Docker原理的文章就讲到这里了,如果你想了解更多关于Docker原理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用以下dockerfile: FROM ubuntu:14.04 MAINTAINER xxx xxx # SSH RUN apt-get update && apt-get install
我运行了docker-compose build celery,(经过数小时的尝试,我的连接不良)成功了。 app Dockerfile的前80%是相同的,但不会重复使用缓存。从我可以浏览的内容来看,
我可以使用以下命令成功创建 Docker 注册表 v2 服务:docker service create 然后我使用 docker Push 将一些图像推送到该服务。 当我通过 curl localh
我正在尝试使用 gitlab 构建 CI,我从 docker 的 docker 镜像开始,我的前端存储库没有任何问题,但现在使用相同的 gitlab-ci 配置文件,我有此守护程序错误。 这是构建的输
用例: 我们在 Jenkins 中有几个“发布作业”build 和 push 应用程序的 Docker 镜像到 docker registry,更新各种文件中的项目版本,最后将发布标签推送到相应的 G
当我尝试构建我的 docker 文件时,docker 返回以下错误: [+] Building 0.0s (1/2)
docker-in-docker 的作者在此博客中建议不要将此图像用于 CI 目的: jpetazzo/Using Docker-in-Docker for your CI or testing en
我创建了一个 Dockerfile 来在 Docker 中运行 Docker: FROM ubuntu:16.04 RUN apt-get update && \ apt-get in
我尝试为 Docker 镜像定位一个特定标签。我怎样才能在命令行上做到这一点?我想避免下载所有图像,然后删除不需要的图像。 在 Ubuntu 官方版本中,https://registry.hub.do
我正在尝试在docker中运行docker。唯一的目的是实验性的,我绝不尝试实现任何功能,我只想检查docker从另一个docker运行时的性能。 我通过Mac上的boot2docker启动docke
docker-compose.yml version: "3" services: daggr: image: "docker.pvt.com/test/daggr:stable"
我有一个非常具体的开发环境用例。在一些代码中,我启动了一个容器来抓取页面并检索在容器中运行的服务(Gitlab)的 token 。 现在,我希望 Dockerize 运行它的代码。具体来说,类似: o
之前已经问过这个问题,但我不确定当时是否可以使用docker-compose文件完成docker堆栈部署。 由于最新版本支持使用compose将服务部署到堆栈,因此,我无法理解dab文件的值。 我检查
我在一次采访中被问到这个问题,但无法回答。也没有找到任何相关信息。 最佳答案 正如 Docker 文档中所述,Docker 注册表是: [...] a hosted service containin
有没有一种方法可以将具有给定扩展名的所有文件复制到Docker中的主机?就像是 docker cp container_name:path/to/file/in/docker/*.png path/o
我的日志驱动程序设置为journald。使用日志记录驱动程序时,daemon.json文件中的日志级别配置会影响日志吗?使用docker logs 时仅会影响容器日志? 例如,docker和journ
我最近开始使用Docker + Celery。我还共享了full sample codes for this example on github,以下是其中的一些代码段,以帮助解释我的观点。 就上下文
运行docker build .命令后,尝试提交构建的镜像,但收到以下错误 Step 12 : CMD activator run ---> Using cache ---> efc82ff1ca
我们有docker-compose.yml,其中包含Kafka,zookeeper和schema registry的配置 当我们启动docker compose时,出现以下错误 docker-comp
我是Docker的新手。是否可以在Docker Hub外部建立Docker基本镜像存储库?假设将它们存储在您的云中,而不是拥有DH帐户?谢谢。 最佳答案 您可以根据需要托管自己的注册表。可以在Depl
我是一名优秀的程序员,十分优秀!