16_0_docker基础架构与安装
01 基本概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
02 设计目标
提供简单的应用程序打包工具
开发人员和运维人员职责逻辑分离
开发人员负责
1、开发项目
2、打包项目环境+代码成镜像
3、部署到容器平台
运维人员负责
1、专注怎么高效去管理这些容器
2、持续发布有问题更快解决
多环境保持一致性
03 应用场景
应用程序打包和发布
应用程序隔离
持续集成
部署微服务
快速搭建测试环境
提供PaaS产品(平台即服务)
04 基本架构
组件 | 描述 |
---|---|
Client | 提供用户跟Docker交互的入口,可以通过client跟docker发送各种API |
docker damon | 用于监听并处理docker client发送的api请求并且管理docker镜像(images), 容器(container)以及文件结构。同时也用于跟其它docker daemon进行交互 |
Registry | docker存储镜像的仓库。Docker Hub是一个公共仓库,类似与maven的中心仓库,默认情况下docker会从该公共仓库获取镜像。当然docker也可以像maven一样有自己的私有registry |
image | 和container都是docker的对象。 docker image主要定义docker容器执行指令的模板。可以把docker image比作是java的类,docker container比作的java的对象,docker的镜像通常都是在另一个image基础上构建的 |
container | 和image都是docker的对象,container是docker镜像的运行实例,用户可以通过docker api对docker容器进行start/stop/create/move/delete等等操作 |
05 Docker安装
关闭selinux 和 firewalld
# 查看 selinux 状态
sestatus
# 永久关闭 selinux
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
# 永久关闭 firewalld
systemctl disable firewalld.service
配置 Centos 7 yum 源
# 该源包含base,updates,epel,会自动匹配Centos系统版本
# 参考USTC:https://mirrors.ustc.edu.cn/help/centos.html
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-Base.repo
# 清理缓存
yum makecache
安装Docker
# 安装依赖包
yum install -y yum-utils
# 添加Docker软件包源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker CE
yum install -y docker-ce
# 启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通