1.预热

内核运行在内核空间,进程运行在用户空间,linux进程特性:父进程负责子进程的创建和回收,白发人送黑发人.容器就是为了保护它里面的内容物,不受其他容器干扰,也不去干扰其他容器.容器让进程认为自己的用户空间是当前系统上唯一的.

CPU:可压缩性资源,进程来申请,如果没有空闲cpu,进程就挂起,等cpu空闲了,就给你;memory:非可压缩性资源,进程来申请,如果没有空余内存,进程就会被kill.

主机级虚拟化(各主机用的不是同一个内核):在创建伊始,可以限制其使用的资源;

容器级虚拟化(各主机用的是同一个内核):Control Groups(cgroups):实现对用户空间的资源分配.内核通过chroot、namespaces、cgroups等核心技术实现虚拟化.

LXC:LinuX Container,容器是linux内核技术,docker是将LXC封装并且有自己特色的容器技术,后来不用LXC了.LXC->libcontainer->runC(CNCF让docker指定容器标准,叫runC).将容器当成进程,所以容器就有了生命周期,可以随时被杀掉,因为数据在硬盘上.

容器编排:machine+swarm+compose;mesos+marathon;kubernetes->k8s.

docker hub上一个仓库通常只放一种应用程序的镜像,仓库名就是应用程序名,镜像的标识是标签,镜像是静态的,类似于程序;容器是动态的,类似于进程.

extras中的docker镜像版本比较老,用清华的镜像:https://mirrors.tuna.tsinghua.edu.cn

2.下载docker

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum provides docker
yum provides docker-ce
# 替换源
vim docker-ce.repo
:%s#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#g
我先升级内核到4.20,然后下载docker-ce,接着给docker添加加速器
yum -y install docker-ce
mkdir /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jh4x39ut.mirror.aliyuncs.com"]
}
EOF
systemctl enable docker.service
systemctl start docker.service
docker version

下载完成之后发现CentOS7.4之前的版本,在Storage Driver这方面不行,最少得7.4,所以目前实验的版本是7.6,docker rm 删的是容器,rmi删的是镜像.

3.镜像管理基础

docker初始网段为172.17.0.1/24,docker network ls查看所有Docker网络,docker start可以将停止的容器给启动.在容器中跑任何程序,都要将其放在前台运行.

镜像是只读的,不允许改变,镜像的构建机制:分层构建,联合挂载.

位于下层的镜像称为父镜像,最底层的称为基础镜像(Base Image),比如此时安装了一个vim,那就多了一层,又安装了一个nginx,那就又多了一层,这些镜像都是不可写的,在启动nginx时,会把所有镜像从下往上全部挂载,最上层的为"可读写"层,其余的均为"只读"层.

# 下载其他站点的镜像
docker pull quay.io/coreos/flannel:v0.10.0-amd64 # 可以给一个镜像打很多标签
docker tag 某镜像ID mowang/httpd:v0.1.1
docker tag mowang/httpd:v0.1.1 mowang/httpd:latest
# 基于busybox更改默认命令
运行一个镜像mowang/httpd:v0.1.1,--name b1,这个镜像的默认命令是sh,想要改变其默认命令,用-c参数
docker commit -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 mowang/httpd:v0.2
-f:don't daemonize不前台启动,-h:指定家目录
# 打包多个镜像到执行文件
docker save -o myimages.gz mowang/httpd:v0.1.1 mowang/httpd:latest
# 在另一台服务器上导入
docker load -i myimages.gz 执行docker info出现如下警告
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl -p

4.docker网络

每次创建一个容器,都会自动创建一对虚拟网卡(通过软件实现的),一个'插'在容器上,一个'插'在交换机上.

epel源莫名其妙就报错(找到原因了,网卡文件中写了两个DNS1):Could not resolve host: mirrors.aliyun.com
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
systemctl restart network.service docker pull busybox
docker run --name busy1 busybox
WARNING: IPv4 forwarding is disabled. Networking will not work
# 需要开启转发功能
echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
systemctl restart network && systemctl restart docker
docker run -it --name busy1 busybox yum -y install bridge-utils
brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02422f5c4da8 no vethd058add ip link show
9: vethd058add@if8: <BROADCAST,MULTICAST,UP,LOWER_UP>

充分说明:一对虚拟网卡,一个在容器上,一个在docker0上,容器将docker0当做交换机,物理机将docker0当做同一个机子上的网卡.

net网络做的是映射,不实用;overlay network:叠加网络,node1上的process1访问node2上的process2,通过隧道的方式直接访问.

每一个容器都有这六个东西:User:账号,Mount:文件系统,Pid:进程号,UTS:主机名,Net:网络,IPC:进程间通信.

docker的三种网络架构:bridge host none

bridge:创建容器时,默认用的是bridge,将docker0当做交换机,是一种nat桥,而不是物理桥;

none:不给ip,没有网络;

host:有两种:

a.joined container,有各自的User、Mount、Pid,但共享一套UTS、Net、IPC;

b.open container,共享宿主机的主机名、网络.

docker network inspect bridge  # inspect:查看一个docker对象的详细信息

5.ip netns常见操作

ip netns help  # 操作网络名称空间的命令
ip netns add r1
ip netns add r2 # 创建两个网络名称空间r1、r2
ip netns list
ip link add name veth1.1 type veth peer name veth1.2 #创建一对网卡
ip link show
ip link set dev veth1.2 netns r1 # 将一块网卡移到r1
ip netns exec r1 ifconfig -a # 在r1中执行查看网卡的命令
ip netns exec r1 ip link set dev veth1.2 name eth0 # 改名
ifconfig veth1.1 10.1.0.1/24 up # 激活veth1.1
ip netns exec r1 ifconfig eth0 10.1.0.2/24 up # 激活r1中的eth0
ip link set dev veth1.1 netns r2 # 将虚拟网卡veth1.1移到r2
ip netns exec r2 ifconfig veth1.1 10.1.0.3/24 up # 默认没有激活,需要手动激活
ip netns exec r2 ping 10.1.0.2

docker环境准备及理论的更多相关文章

  1. 从头开始搭建分布式日志平台的docker环境

    上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平 ...

  2. 包含深度学习常用框架的Docker环境

    相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ All in one d ...

  3. docker环境 快速使用elasticsearch-head插件

    docker环境 快速使用elasticsearch-head插件 #elasticsearch配置 #进入elk容器 docker exec -it elk /bin/bash #head插件访问配 ...

  4. Docker环境 ELK 快速部署

    Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...

  5. docker环境部署

    docker环境部署 1 查看当前系统版本 只支持CentOS7版本的系统,如果不是的话,可以让项目方进行重装或者系统内核升级. [root@bogon bin]# cat /etc/redhat-r ...

  6. centos7系统下 docker 环境搭建

    运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段)centos7一定要安装64位, docke ...

  7. npm私有仓库 配置verdaccio在docker环境

    前端开发过程中,少不了自己封装一些通用的包,但又不想放在公共的平台,所以搭建一个npm私有的仓库是很有必要的. 在这里简单介绍如何使用 verdoccio 在docker环境下的配置.verdocci ...

  8. .netcore mvc docker环境jenkins一键部署(DevOps)

    [前言] DevOps方面的文章很早之前就想分享了,挤出一点时间把前段时间搭建的一些提高开发效率的东西给大家分享一下吧. 本文介绍了一个.netcore mvc web项目,从项目push到githu ...

  9. Docker环境下的Mysql8 实现主从数据库数据同步方案

    本文记录下通过MySQL Replication在Docker环境下,通过多个容器 实现数据库主从配置. MySQL Replication就不多解释了,简单说就是MySQL非常出色的一个功能,该功能 ...

随机推荐

  1. 【Linux命令】删除大文件后磁盘空间未释放问题

    前言 工作中经常遇到Linux系统磁盘空间不足,但是删除后较大的日志文件后,发现磁盘空间仍没有被释放,有点摸不着头脑,今天博主带大家解决这个问题. 思路 1.工作发现磁盘空间不足: 2.找到占用磁盘空 ...

  2. C编译器MinGW安装、下载及在notepad++中运行C程序

    一.C编译器MinGW的下载及安装步骤 打开MinGW官网:http://www.mingw.org/ 图一 图二 图三 图四 图五 图六 系统中配置环境变量: 图七 验证是否安装成功: CMD中运行 ...

  3. CentOS 7.5 部署蓝鲸运维平台

    环境准备 官方建议 准备至少3台 CentOS 7 以上操作系统的机器 最低配置:2核4G 建议配置: 4核12G 以上 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍 部署前关闭SELin ...

  4. Oracle 插入数据时获取系统时间

    insert into table_xx (xx,dateTime) values( 'xx',sysdate) 这个sysdate 相当于sql server中的GETDATE()函数 另to_ch ...

  5. select chosen 禁用下拉框某一个option

    $("#tbParBudCode option[value='" + budCodeId + "']").attr("disabled", ...

  6. 将MSHFlexGrid1中记录导出为Excel

    1.添加引用Microsoft Excel 14.0 Object Library 2.编写代码部分 Private Sub Output_Click() Dim i As Integer '定义变量 ...

  7. CPU封装技术介绍

    所谓“CPU封装技术”是一种将集成电路用绝缘的塑料或陶瓷材料打包的技术.以CPU为例,我们实际看到的体积和外观并不是真正的CPU内核的大小和面貌,而是CPU内核等元件经过封装后的产品. CPU封装对于 ...

  8. AJAX提交表单后要清空,否则再次提交原来的数据会认为重复提交,提交失败。使用ajaxSubmit 函数需要引入jquery.form.min.js 文件

    <script src="../../Scripts/js/jquery.form.min.js" type="text/javascript">& ...

  9. [CF999E]Reachability from the Capital

    题目大意:有一个$n$个点$m$条边的有向图,起点$S$,要求你添加最少的边使得$S$可以到达所有点 题解:缩点,答案就是没有入边的强连通分量个数,注意,如果起点$S$所在的强连通块没有入边则不计入答 ...

  10. 股神小D [点分治 or LCT]

    题面 思路 点分治非常$naive$,不讲了,基本思路就是记录路径最小最大值.....然后没了 重点讲一下LCT的做法(好写不卡常)(点分一堆人被卡到飞起hhhh) 首先,这个路径限制由边限制决定,而 ...