概述
Docker是一个开源的应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的容器
中 ,然后发布到 任何流行的 Linux 机器上 ,也可以实现虚拟化。容器是完全使用沙 盒 机制,相互之间不
会有任何接口(类似 iPhone 的 app )。 几乎没有性能开销 可以很容易地在机器和数据中心中运行。最
重要的是 他们 不依赖于任何语言、框架或包装系统 。
Docker 架构
工作流程:服务器A 上运行 docker Engine 服务,在 docker Engine 上启动很多容器 container
从外网 Docker Hub 上把 image 操作系统镜像下载来,放到 container 容器运行。这样一个容器的实例
就运行起来了。最后,通过Docker client 对 docker 容器虚拟化平台进行控制。
Image和 Container 的关系: image 可以理解为一个系统镜像, Container 是 Image 在运行时的
一个状态。如果拿虚拟机作一个比喻的话, Image 就是关机状态下的磁盘文件, Container 就是虚拟机运行时的磁盘
文件,包括内存数据。
dockerhub:dockerhub是docker官方的镜像存储站点,其中提供了徆多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。
Docker 核心技术
1.Namespace — 实现Container的进程、网络、消息、文件系统和主机名的隔离。
2.Cgroup — 实现对资源的配额和度量。
注:Cgroup的配额,可以挃定实例使用的cpu个数,内存大小等。就像如下图,vmware虚拟机中的硬件配置参数。
docker 特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像
资源隔离:系统资源,像CPUCPU和内存等可以分配到不同的容器中,使用和内存等可以分配到丌同的容器中,使用cgroupcgroup。。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IPIP地址。地址。
日志记录:
日志记彔:DockerDocker将会收集和记录每个进程容器的标准流(将会收集和记彔每个进程容器的标准流(stdout/stderr/stdinstdout/stderr/stdin),用于实时检索),用于实时检索或批量检索。戒批量检索。
变更管理:容器文件系统的变更可以提交到新的
变更管理:容器文件系统的变更可以提交到新的镜像镜像中,并可重复使用以创建更多的容器。无需使用中,并可重复使用以创建更多的容器。无需使用模板或手动配置。模板戒手劢配置。
交互式
交互式shellshell::DockerDocker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互交互shellshell。。
优
缺点局限性:
Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker
容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:
NFS ipsan MFS 等 , v 映射磁盘分区
一句话:docker 只用于计算,存储交给别人。
oracle不适合使用 docker 来运行,太大了,存储 的数据太多。
部署 docker 容器虚拟化平台
直接使用 centos 系统自带的 yum 源安装,比较慢
[root@test yum.repos.d]# yum -y install docker
启劢docker平台:
[root@test ~]# systemctl start docker
启动 docker 服务
[root@test ~]# systemctl enable docker
设置开机启动 docker 服务
[root@test ~]# docker version
显示 Docker 版本信息
搜索images
[root@test ~]# docker search centos
从 Docker Hub 中搜索符合条件的镜像。
从公网 docker hub 拉取(下载) image pull :拉
[root@test ~]# docker pull docker.io/centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centosGet
https://registry 1.docker.io/v2/library/centos/manifests/sha256:822de5245dc5b659df56dd
32795b08ae42db4cc901f3462fc509e91e97132dc0: net/http: TLS handshake timeout
#
报错了,因为网络的问题。 无法连接到 dockerhub 下载镜像。 如果你的网络没有问题,你可以
下载。
解决:换一个docker 下载地址 或:使用阿里云 docker 镜像加速,提升 p ull 的速度:
你只需要登录容器 Hub 服务 https://cr.console.aliyun.com 的控制台 ,使用你的支付宝帐号,第
一次登录时,需要设置一个独立的密码 ,左侧的加速器帮助页面就会显示为你独立分配的加速地址。
[root@test ~]#
vim /etc/docker/daemon.json 改成以下内容
改:
为:
{
"registry mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
}
[root@test ~]# systemctl daemon reload
[root@test ~]# systemctl restart docker
[root@test ~]# docker pull docker.io/centos
再下载,就可以了。
docker导入镜像
[root@test ~]# docker load -i /root/ docker.io centos.tar
直接下载其他站点的镜像
[root@test ~]# docker pull hub.c.163.com/library/tomcat:latest
开启劢网络转发功能
开启劢网络转发功能,默认会自劢开启.
手劢开启:
[root@test ~]# vim /etc/sysctl.conf #插入以下内容
net.ipv4.ip_forward = 1
[root@test ~]# sysctl -p #生效
net.ipv4.ip_forward = 1
[root@test ~]# cat /proc/sys/net/ipv4/ip_forward
1
否则会报错以下警告: