(实验准备虚拟机一台:桥接网卡)
1.docker:
linux容器里运行的开源小型轻量级虚拟机
2.历史:
概念来自于2000年,但2013才真正成熟,由Docker inc公司发表和推广,现在加入Linux基金会,源码在github.com/docker维护发布,官方文档www.docker.com
3.地位:
近年来,最受追捧的新技术之一,在中国2015年开始盛行,各大公司都开始支持和推广docker
4.理念:
创建、运输、处处运行,非常好用的便于移植的集装箱式的容器虚拟化,一次封装,到处运行
5.docker与传统虚拟机的区别
docker优点:
轻量、快速启动和停止(秒级)、并发性能强(一台物理机并行启动上千台docker)、计算能力损耗小、资源限制
docker不足:
不适合配置大型安全环境,比如:数据库
6.docker的核心概念
镜像:类似于vmware的快照,只读不可写,可以看成一个安装某个应用程序的Linux环境
容器:镜像的运行实例,可以启动、停止、删除,容器之间是隔离的,互不可见,互不影响,保证各自的相对安全,类似于多台vmware虚拟机。
仓库:统一集中保存镜像的地方,分为公有库(dockerhub)和私有库(自己创建)
7.docker的版本
docker.io:Centos7默认支持,早期
docker-ce: 社区版
docker-ee: 企业版
1号机#
#桥接网络例如
#ifdown ens33;ifup ens33
#ifconfig ens33
#systemctl stop firewalld
#setenforce 0
#yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#yum -y install docker
#systemctl start docker \\启动
#systemctl enable docker \\设为开机自动启动
#docker version \\查看docker版本
#docker search dhcp 搜索镜像(默认搜索路径:dockerhub)(下面为显示结果项)
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
索引 镜像名 描述 星级 官方创建 自主创建
#docker pull docker.io/networkboot/dhcpd 下载镜像(时间看带宽)
#docker images 查看本地镜像
#docker inspect 镜像ID号 (如12313dfs2545) 查看镜像的详细信息
#docker tag docker.io/networkboot/dhcpd dhcp:dhcp 修改镜像标
#docker images 查看本地镜像
.#docker rmi dhcp:dhcp 删除镜像 或#docker rmi 镜像ID号
#docker images 删除后查看本地镜像
#docker rmi docker.io/networkboot/dhcpd (删除镜像文件所有层--操作需谨慎)
#docker save -o dhcp docker.io/networkboot/dhcpd 存出镜像:需要迁移镜像到其他主机
#ll -h
#docker images (查看效果)
#docker load --input dhcp 把镜像文件复制到本地,载入启用
#docker load < dhcp
注册dockerhub账号并上传镜像
网址:https://hub.docker.com/signup
#docker login 登录
用户名
密码
#docker push docker/dhcp:centos7.3 上传镜像:
#docker create -it docker.io/networkboot/dhcpd /bin/bash容器的创建与启动(create:创建 -i:保持容器输入打开 -t:开启一个伪终端)
#docker ps -a 查看容器运行状态-a:列车最近一次启动的容器
#docker start 容器ID 启动容器 (若是报错#yum -y update更新一下可以解决)
#docker ps -a 启动后查看容器运行状态
#docker run docker.io/networkboot/dhcpd /bin/bash -c ls (创建并启动执行--一次性进程)
#docker ps -a 启动后查看容器运行状态
#docker run -d docker.io/networkboot/dhcpd /bin/bash -c "while true;do echo ok;done;" 由镜像创建容器并运行命令:作为后台进程,持续执行(注意:-d代表后台守护进程)
#docker ps -a 启动后查看容器运行状态up为运行状态
#docker stop (加ID号)
#docker pa -a 查看exited为终止状态
#docker exec -it 容器ID /bin/bash 进入正在运行的容器
#exit 退出
#docker export 容器ID号>centos7dhcp (容器的导出)
#ls -h centos7dhcp
#docker ps -a (查看并复制一个ID号)
#docker stop ID号(上部复制的ID号)
#docker rm 容器ID号 (一般先停止后删除)
#docker ps -a (查看是否删除)
#ls
#cat centos7dhcp | docker import - centos7:dhcp (导入文件centos7dhcp为本地镜像)
#docker images | grep centos7 (查看镜像)
docker资源控制(虚拟机调cpu:4核 内存:4G)
同一台主机,运行多台容器时,会产生抢占主机硬件资源的现象,如果发生不公平事件会导致部分容器或服务停止运行,所以需要对容器配置资源限制。
Cgroup:control group,linux内核提供的限制所使用的物理资源的机制(docker之前用的LXC),CPU、内存、blkio(块文件输入和输出)
CPU限制:docker资源控制
前提:生成示例镜像
#docker tag dhcp:dhcp centos7:dhcp1 //dchp:dhcp为原有文件:centos7:dhcp1为复制后的文件
#docker tag dhcp:dhcp centos7:dhcp2
#docker tag dhcp:dhcp centos7:dhcp3
#docker tag dhcp:dhcp centos7:dhcp4
#docker tag dhcp:dhcp centos7:dhcp5
#docker images
(1)查看CPU线程
#cat /proc/stat
(2)创建容器时,针对CPU资源动态调整(3个容器1:1:2)
#docker run -tid --cpu-shares 1024 dhcp:dhcp
#docker run -tid --cpu-shares 1024 centos7:dhcp1
#docker run -tid --cpu-shares 2048 centos7:dhcp2
#docker ps -a
(3)限制CPU内核使用
#docker run -tid --cpuset-cpus 0.1,2.3 centos7:dhcp4 //使用新建的容器绑定内核0.1.2.3.的使用
#docker run -tid -m 512MB centos7:dhcp4 // 限制新容器的内存上限为512MB
#docker run -tid --device-write-bps /dev/sda:1MB centos7:dhcp5 //限制容器的/dev/sda的读写速度为1MB:只能限制设备不限分区
#docker run -it --cpu-period=50000 --cpu-quota=25000 centos7:dhcp5 /bin/bash //将 CFS 调度的周期设为 50000,将容器在每个周期内的 CPU 配额设置为 25000,表示该容器每 50ms 可以得到 50% 的 CPU 运行时间。
#docker run -m 1G --memory-swap 3G centos7:dhcp5 //限制物理内存为1GB,虚拟内存为3GB
#docker run -it -m 100M --oom-kill-disable centos7:dhcp5 /bin/bash ///禁用oom,内存限制为100M,----禁用oom,必须启用内存限制