Docker概述
Docker为什么出现?
开发 -- 上线 必须解决的问题:应用环境 应用配置
开发 -- 运维 喜闻乐见的一句话: 我在我的电脑上可以运行 !
环境配置十分麻烦,每一个机器都要部署环境(redis集群,es,Hadoop...)费时费力
项目+环境打包发送给运维
Docker提出了解决方案:
jar(环境) -- 打包项目带上环境(镜像) -- Docker仓库:商店 -- 从商店下载镜像 -- 直接运行
Docker的思想就来自集装箱 !
隔离: Docker核心思想, 打包装箱, 每个箱子都是互相隔离的
Docker通过隔离机制, 可以将服务器利用到极致
Docker的历史
2010年, 几个搞 it 的年轻人, 在美国成立了一家公司 dotCloud...
做一些pass的云计算服务, LXC有关的容器技术...
他们将自己的技术(容器化技术), 命名Docker, 刚开始没有引起行业的注意...
随后他们选择了开源这条路 !
开放源代码, 立即引起了大量的注意 !
2014年4月9日, Docker 1.0发布...
VM和Docker的简单对比
VM, linux centos原生镜像(一台电脑) 隔离,需要开启多个虚拟机 几个G 几分钟
docker, 隔离, 镜像(最核心的环境 4m+jdk+mysql) 十分小巧,运行镜像即可 几M 秒级
Docker相关资源
官网地址: https://www.docker.com/
文档地址: https://docs.docker.com/
仓库地址: https://hub.docker.com/
Docker能干嘛?
- 之前的虚拟机技术
缺点:
1.资源占用多
2.冗余
3.启动很慢
- 容器化技术
容器化技术不是模拟一个完整的操作系统
比较:
1.传统虚拟机,虚拟一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
2.容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以轻便
3.每个容器间相互隔离,每个容器都有自己的文件系统,互不影响
DevOps (开发 运维)
应用更快速的交付和部署
传统: 一堆帮助文档, 安装程序
Docker: 打包镜像发布测试, 一键运行
更便捷的升级和扩缩容
使用Docker之后, 我们部署应用就和搭积木一样!
(项目+环境) 包整体升级
更简单的系统运维
在容器化之后, 我们的开发和测试环境都是高度一致的
更高效的计算资源利用
Docker是内核级别的虚拟化, 可以在一个物理机上运行多个容器实例, 服务器的性能利用到极致
Docker安装
Docker的基本组成
镜像 ( image )
Docker 镜像就好比是一个模板, 可以通过这个模板来创建容器服务, redis镜像 ==> run ==> redis01(具体的容器, 提供服务)
通过这个镜像可以创建多个容器 (最终服务运行或项目运行就是在容器中进行的)
容器 ( container )
Docker 利用容器技术, 独立运行一个或一组应用, 通过镜像来创建
启动 停止 删除 基本命令
目前, 可以把容器理解为一个简易的linux系统
仓库 ( repository )
仓库就是存放镜像的地方
仓库分为公私有
Docker Hub ( 默认国外的 )
阿里云...都有容器服务器 ( 配置镜像加速 )
安装Docker
环境准备
- linux基础
- CentOS 7
- 使用 Xshell
环境查看
# 系统内核是3.10以上的
[root@su01 ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
# 系统版本
[root@su01 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
帮助文档:
# 1.卸载旧的版本
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
# 2.需要的安装包
$ sudo yum install -y yum-utils
# 3.设置镜像的仓库
yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的,我们不用
# 更新yum软件包索引
yum makecache fast
# 4.安装docker相关的 docker-ce 社区版 ee企业版
yum install docker-ce docker-ce-cli containerd.io
# 5.启动docker
systemctl start docker
# 6.查看是否安装成功
docker version
# 7.测试
docker run hello-world
# 8.查看下载的 hello-world 镜像
[root@su01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
- 了解:卸载docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
# /var/lib/docker docker的默认工作路径
阿里云镜像加速
-
登录阿里云找到容器服务
-
找到镜像加速地址
-
配置使用
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://idyzft7w.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
run hello-world的原理
底层原理
Docker是怎么工作的?
Docker 是一个 Client-Server 结构的系统, Docker 的守护进程运行在宿主机上. 通过 Socket 从客户端访问
DockerServer 接收到 Docker-Client 的指令, 就会执行这个命令
Docker 为什么比 VM 快?
-
Docker 有比虚拟机更少的抽象层
-
docker 利用的是宿主机的内核 (操作系统), vm 需要的是 Guest OS
所以说, 新建一个容器的时候, docker 不需要像虚拟机一样重复加载一个操作系统的内核.