docker 基础
Docker基本概念和架构
Docker基本概念
什么是容器技术
- 一种虚拟化的方案
- 操作系统虚拟化
- 依赖于linux内核特性:Namespace和Cgroup
- linux容器技术 VS 虚拟机
虚拟机需要完整的操作系统。需要模拟硬件行为,对内存和cpu损耗相当大 同样配置的服务器,容器能提供更多服务能力,服务更多用户。磁盘占用空间更少,启动更快。容器不容易安装和管理,而docker可以改善这些,使容器安装简单,管理方便。
什么是docker
- 将应用程序自动部署到容器
- 使用GO语言编写的开源引擎
Docker特点
- 提供简单轻量的建模方式:快,资源利用率高
- 职责的逻辑分离
- 快速高效的开发生命周期:在容器中开发,以容器形式交付,缩短产品上线周期
- 鼓励使用面向服务的架构:单个容器只运行一个应用或者进程,一系列内部互联的容器,使扩展、调试程序变得简单。分布式应用程序模型:高内聚,低耦合,单一任务,在运行过程中容易定位问题
使用Docker做什么
- 使用docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建Paas设施
- 提供SaaS应用程序
- 高性能,超大规模的宿主机部署
Docker基本组成
客户端、守护进程
- C/S架构
- 本地/远程
镜像
- 容器的基石,是一个层叠的只读文件系统
- Bootfs:引导文件系统,容器启动后,它会移动到内存中,引导文件系统会被卸载
- Rootls:比如ubuntu,centos,一种或者多种操作系统,只读,联合加载方式,基础镜像
- Add emac:联合加载方式,在基础镜像上一次加载多个文件系统,对外只能看到一个麻醉中的文件系统会包含低层所有文件和目录,它下面的镜像为副镜像,以此类推到最底部,最底部是基础镜像
容器
- 通过镜像启动
- 启动和执行阶段
- 写时复制
- 在镜像的最顶层加载一个可写层,初始可写层是空的,当文件系统发生变化的时候,这些变化都会应用到这可写层上,比如:如果修改配置文件,会先从只读层复制到可写层,该文件的只读版本依然存在,但是被可写层的文件副本隐藏。
仓库
- 公有仓库
- 私有仓库
Docker容器相关技术
Namespaces命名空间
- 封装:代码隔离
- 操作系统:提供系统资源的隔离:进程,文件系统,网络等等,为了实现轻量级虚拟化服务,也就是我们说的容器
- 五中命名空间
- PID :进程隔离
- NET:管理网络接口
- IPC:管理跨进程通信访问
- MNT:管理挂载点
- UTS:隔离内核和版本标识
Control group 控制组
cgroups是Linux内核提供的一种机制,这种机制可以根据特定的行为,把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。通俗的来说,cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石。
cgroups的作用
- 资源限制(Resource Limitation):cgroups可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出OOM
- 优先级分配(Prioritization):通过分配的CPU时间片数量及硬盘IO带宽大小,实际上就相当于控制了进程运行的优先级。
- 资源计量:cgroups可以统计系统的资源使用量,如CPU使用时长、内存用量等等,这个功能非常适用于计费
- 资源控制:cgroups可以对进程组执行挂起、恢复等操作。
Namespaces命名空间和Control group 控制组带来的特性
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用Cgroup将CPU和内存之类的资源独立分配给每个Docker容器
Docker安装
- 环境说明:本地安装VMware+centos7
- docker安装参考: https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce
- 安装命令如下:
#yum update
#yum install -y yum-utils device-mapper-persistent-data lvm2
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#yum install docker-ce
#systemctl start docker
- 查看docker的日志
#journalctl -u docker.service
- 关闭防火墙和网络服务
#systemctl stop firewalld.service
#systemctl disable firewalld.service
#systemctl stop NetworkManger
Docker基本命
Docker run 命令
- docker run:创建一个新的容器并运行一个命令
#docker run –help
- 参数说明:
- -a stdin : 指定标准输入输出内容类型,可选STDIN, STDOUT or STDERR
- -d:后台运行容器,并返回容器ID
- -i:以交互模式运行容器,通常与-t同时使用
- -t:为容器重新分配一个伪输入终端,通常与-i同时使用
- --name=”容器名称”:为容器指定一个名称
- --dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主机一致
- --dns-search 域名 :指定容器DNS搜索域名,默认和宿主机一致
- -h “mars”:指定容器的hostname
- -e username=”ritchie”:设置环境变量
- --env-file=[]:从指定文件读入环境变量
- -m:设置容器使用内存最大值
Docker start/stop/restart 命令
- 启动一个或者多个已经被停止的容器。停止一个运行中的容器。重启容器。
#docker start [OPTIONS] CONTAINER [CONTAINER…]
Docker kill 命令
- 杀掉一个运行中的容器
#docker kill [OPTIONS] CONTAINER [CONTAINER…]
Docker rm 命令
- docker rm :删除一个或多少容器
docker rm [OPTIONS] CONTAINER [CONTAINER...] OPTIONS说明:
- -f :通过SIGKILL信号强制删除一个运行中的容器
- -l :移除容器间的网络连接,而非容器本身
- -v :-v 删除与容器关联的卷
Docker create 命令
- 创建一个新的容器但是不启动它,用法同docker run
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
Docker cp 命令
- 用于容器与主机之间的数据拷贝。
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Options:
- -a, --archive Archive mode (copy all uid/gid information)
- -L, --follow-link 保持源目标中的链接
本地镜像管理
- docker images :列出本地镜像。
- docker rmi :删除本地一个或多少镜像。
- docker tag :标记本地镜像,将其归入某一仓库。
- docker build :使用Dockerfile创建镜像。
- docker save :将指定镜像保存成 tar 归档文件。
- docker import :从归档文件中创建镜像。
- docker info : 显示 Docker 系统信息,包括镜像和容器数。
- docker version :显示 Docker 版本信息。