Docker 是什么
Docker 定义
是 go
语言开发的,基于 LXC (Linux Container)
的,遵循 Apache2.0
开源协议的高级容器引擎。
他的语言(
go
语言)和 框架(Linux 自身的 LXC)使得他性能非常好
Docker 的设想是交付运行环境如同海运, OS 如同一个货轮,每一个在 OS 基础上的软件都如同一个集装箱,用户可以通过标准化手段自由紫装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。
Docker 和 传统虚拟化对比
传统的虚拟化 - VM
通过创建很多不同的OS来支撑虚拟化
AppA AppA AppA
^ ^ ^
Bins/Libs Bins/Libs Bins/Libs
^ ^ ^
Guest OS Guest OS Guest OS
\ | /
\ | /
\ | /
\ | /
Hypervisor
^
Host OS
^
Server
Docker使用的虚拟化技术
通过创建不同的Bins/Libs来虚拟化
AppA AppA' AppB AppB' AppB''
\ / \ / /
\ / \ / /
Bins/Libs Bins/Libs
\ /
\ /
Docker Engine
^
Host OS
^
Server
优劣势对比
传统型虚拟化 | 容器化虚拟化 |
---|---|
消耗的资源大,每个虚拟化都需要一个完整的操作系统内核 | 消耗的本机资源更小,在同样的硬件属性下,能支撑更多的访问 |
安全性最高,能做到内核级别的隔离 | 安全性较差 |
Docker 的构成
-
Docker 仓库 : https://hub.docker.com
-
Docker 自身组件
- Docker Client
- Docker Server
- Docker 镜像 - 封装好的运行环境,运行之后就变成了容器
镜像运行后成为容器(即正在运行的运行环境),而容器也可以做成镜像。
Docker 组件间的协同方式
一般 client 和 server 都放在本机, server作为daemon运行在本地
如果一台设备上运行太多的 Docker 会不会影响性能?怎么解决?
分层
最多为128层
比如我有个镜像安装了nginx, java,mysql。突然有一天我需要一个升级了mysql版本的镜像,那么可以在nginx java层的基础上更新。
Docker 安装
检查基础环境
### 检查防火墙是否关闭,直接关闭
systemctl stop firewall
systemctl disable firewalld
### 检查 Selinux
getenforce
### iptables
systemctl start iptables
# 如果没有安装
yum -y install iptables-services
systemctl start iptables
systemctl enable iptables
# 清空默认配置,保存,此时防火墙是空的
iptables -F
service iptables save
### 更新软件包
yum update
### 重启
reboot
下载docker包
https://downlaod.docker.com/linux/centos/7/x86_64/stable/Packages/
下载 docker-ce
docker-ce-selinux
安装
yum -y intall *
启动docker
### 启动docker
systemctl start docker
systemctl enable docker
### 检查docker运行状态
systemctl docker status
尝试启动hello-world镜像
docker install hello-world
Docker 常用命令
### 查看镜像
docker images
### 查看运行的容器
docer ps
其他
Docker-compose 工具 - 用作一台设备上服务的整体化管理
一个容器编排工具,允许用户在一个模板(YAML格式)中定义一组相关联的容器,会根据 --link
等参数对启动的优先级进行排序。