docker base command
docker 简介docker 的组成Docker 的优势Docker 的缺点docker(容器)的核心技术容器规范容器 runtime容器管理工具容器定义工具Registry编排工具docker(容器)的依赖技术容器网络服务发现容器监控数据管理日志收集Docker 安装及基础命令介绍通过修改 yum 源安装启动并验证 docker 服务验证 docker 版本验证 docker0 网卡验证 docker 信息docker 存储引擎docker镜像加速配置Docker 镜像基础命令搜索镜像下载镜像查看本地镜像镜像导出查看镜像内容镜像导入删除镜像容器操作基础命令从镜像启动一个容器显示正在运行的容器显示所有容器删除运行中的容器端口映射随机映射端口指定端口映射查看容器访问日志查看容器端口映射自定义容器名称后台启动容器创建并进入容器单次运行传递运行命令容器的启动和关闭进入到正在运行的容器使用 attach 命令 此命令用不多,使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,此模式是共享终端模式和screen类似使用 exec 命令使用 nsenter 命令脚本方式查看容器内部的 hosts 文件关闭删除容器批量关闭正在运行的容器批量强制关闭正在运行的容器批量删除已退出容器批量删除所有容器指定容器 DNS小结
docker 简介
首先 Docker 是一个在 2013 年开源的应用程序并且是一个基于 go 语言编写是一个开源的 pass 服务(Platform as a Service,平台即服务的缩写),go 语言是由google 开发,docker 公司最早叫 dotCloud 后由于 Docker 开源后大受欢迎就将公司改名为 Docker Inc,总部位于美国加州的旧金山,Docker 是基于 linux 内核实现,Docker 最早采用 LXC 技术(LinuX Container 的简写,LXC 是 Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术 KVM(Kernel-based Virtual Machine) 基于模块实现,Docker 后改为自己研发并开源的 runc 技术运行容器
Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务端架构,使用远程 API 来管理和创建 Docker 容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,docker 的三大理念是 build(构建)、ship(运输)、 run(运行),Docker 遵从 aoache 2.0 协议,并通过(namespace 及cgroup 等)来提供容器的资源隔离与安全保障等,所以 Docke 容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机 6-8%性能)的额外资源开销,因此可以大幅提高资源利用率,总而言之 Docker 是一种用了新颖方式实现的轻量级虚拟机.类似于 VM 但是在原理和应用上和 VM 的差别还是很大的,并且 docker的专业叫法是应用容器(Application Container)
docker 的组成
Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 docker API
Docker 服务端(Server):Docker 守护进程,运行 docker 容器
Docker 镜像(Images):镜像可以理解为创建实例使用的模板
Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务
Docker 仓库(Registry): 保存镜像的仓库,类似于 git 或 svn 这样的版本控制系统,官方仓库: https://hub.docker.com/
Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器
Docker 对比虚拟机
资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机
开销更小:不需要启动单独的虚拟机占用硬件资源
启动速度更快:可以在数秒内完成启动

使用虚拟机是为了更好的实现服务运行环境隔离,但是一个虚拟机只运行一个服务,很明显资源利用率比较低
Docker 的优势
快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
节省开支:提高服务器利用率,降低 IT 支出。
简化配置:将运行环境打包保存至容器,使用时直接启动即可。
快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从 A 宿主机迁移到 B 宿主机,甚至是 A 平台迁移到 B 平台
Docker 的缺点
隔离性:各应用之间的隔离不如虚拟机
docker(容器)的核心技术
容器规范
除了 docker 之外的 docker 技术,还有 coreOS 的 rkt,还有阿里的 Pouch,为了保证容器生态的标志性和健康可持续发展,包括 Google、Docker 等公司共同成立了一个叫 open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前 OCI 一共发布了两个规范,分别是 runtime spec 和 image format spec,有了这两个规范,不通的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性
容器 runtime
runtime 是真正运行容器的地方,因此为了运行不同的容器 runtime 需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
目前主流的三种 runtime:
Lxc:linux 上早期的 runtime,Docker 早期就是采用 lxc 作为 runtime。
runc:目前 Docker 默认的 runtime,runc 遵守 OCI 规范,因此可以兼容 lxc。
rkt:是 CoreOS 开发的容器 runtime,也符合 OCI 规范,所以使用 rktruntime 也可以运行 Docker 容器
容器管理工具
管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行。
Lxd 是 lxc 的管理工具。
Runc 的管理工具是 docker engine,docker engine 包含后台 deamon 和 cli 两部分,大家经常提到的 Docker 就是指的 docker engine。
Rkt 的管理工具是 rkt cli
容器定义工具
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建
Docker image:是 docker 容器的模板,runtime 依据 docker image 创建容器。
Dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image。
ACI(App container image):与 docker image 类似,是 CoreOS 开发的 rkt 容器的镜像格式
Registry
统一保存共享镜像的地方,叫做镜像仓库。
Image registry:docker 官方提供的私有仓库部署工具。
Docker hub:docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。
Harbor:vmware 提供的自带 web 的镜像仓库,目前有很多公司使用
编排工具
当多个容器在多个主机运行的时候,单独管理每个容器是相当负载而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、
动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。
容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
Docker swarm:docker 开发的容器编排引擎。
Kubernetes:google 领导开发的容器编排引擎,内部项目为 Borg,且其同时支持docker 和 CoreOS。
Mesos+Marathon:通用的集群组员调度平台,mesos 与 marathon 一起提供容器编排引擎功能
docker(容器)的依赖技术
容器网络
docker 自带的网络 docker network 仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如 calico、flannel 等
服务发现
容器的动态扩容特性决定了容器 IP 也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名
容器监控
可以通过原生命令 docker ps/top/stats 查看容器运行状态,另外也可以使heapster/ Prometheus 等第三方监控工具监控容器的运行状态
数据管理
容器的动态迁移会导致其在不通的 Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决
日志收集
docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过 ELK 等专门的日志收集分析和展示工具进行处理
Docker 安装及基础命令介绍
官方网址:https://www.docker.com/
系统版本选择:
Docker 目前已经支持多种操作系统的安装运行,比如 Ubuntu、CentOS、Redhat、Debian、Fedora,甚至是还支持了 Mac 和 Windows,在 linux 系统上需要内核版本在 3.10 或以上,docker 版本号之前一直是 0.X 版本或 1.X 版本,但是从 2017 年 3 月 1 号开始改为每个季度发布一次稳版,其版本号规则也统一变更为 YY.MM,例如 17.09 表示是 2017 年 9 月份发布的,本次演示的操作系统使用 Centos 7.5 为例
Docker 版本选择
ocker 之前没有区分版本,但是 2017 年推出(将 docker 更名为)新的项目Moby,github 地址:https://github.com/moby/moby,Moby 项目属于 Docker 项目的全新上游,Docker 将是一个隶属于的 Moby 的子产品,而且之后的版本之后开始区分为 CE 版本(社区版本)和 EE(企业收费版),CE 社区版本和 EE 企业版本都是每个季度发布一个新版本,但是 EE 版本提供后期安全维护 1 年,而CE 版本是 4 个月,本次演示的 Docker 版本为 18.03,以下为官方原文
Docker CE and EE are released quarterly, and CE also has a monthly “Edge” option.Each Docker EE release is supported and maintained for one year and receivessecurity and critical bugfixes during that period. We are also improving Docker CEmaintainability by maintaining each quarterly CE release for 4 months. That getsDocker CE users a new 1-month window to update from one version to the next
Docker CE和EE每季度发布一次,CE还具有每月“ Edge”选项。每个Docker EE版本均受支持和维护一年,并在此期间获得安全性和重要的错误修正。我们还将每个季度的CE版本维持4个月,从而提高Docker CE的可维护性。这为Docker CE用户提供了一个新的1个月窗口,可以从一个版本更新到另一个版本
官方 rpm 包下载地址 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
阿里镜像下载地址 https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages
通过修改 yum 源安装
通过rpm安装
启动并验证 docker 服务
验证 docker 版本
验证 docker0 网卡
在 docker 安装启动之后,默认会生成一个名称为 docker0 的网卡并且默认 IP 地址为 172.17.0.1 的网卡
验证 docker 信息
docker 存储引擎
目前 docker 的默认存储引擎为 overlay2,需要磁盘分区支持 d-type 文件分层功能,因此需要系统磁盘的额外支持
Docker 官方推荐首选存储引擎为 overlay2 其次为 devicemapper,但是devicemapper 存在使用空间方面的一些限制,虽然可以通过后期配置解决,但是官方依然推荐使用 overlay2,以下是网上查到的部分资料:https://www.cnblogs.com/youruncloud/p/5736718.html
如果 docker 数据目录是一块单独的磁盘分区而且是 xfs 格式的,那么需要在格式化的时候加上参数-n ftype=1,否则后期在启动容器的时候会报错不支持 d-type
docker镜像加速配置
国内下载国外的镜像有时候会很慢,因此可以更改 docker 配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的
获取加速地址
浏览器打开 http://cr.console.aliyun.com
注册或登录阿里云账号,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明
镜像服务中心 –> 镜像中心 –> 镜像加速器 https://t487r8sk.mirror.aliyuncs.com

Docker 镜像基础命令
docker 命令是最常使用的命令,其后面可以加不同的参数以实现响应的功能
搜索镜像
在官方的 docker 仓库中搜索指定名称的 docker 镜像,也会有很多三方镜像
下载镜像
查看本地镜像
下载完成的镜像比下载的大,因为下载完成后会解压
镜像导出
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用
以下两种方法都可以
docker save -o /tmp/centos.tar.gz centos
docker save centos > /tmp/centos.tar.gz
查看镜像内容
镜像导入
以下两种方法都支持
删除镜像
容器操作基础命令
从镜像启动一个容器
会直接进入到容器,并随机生成容器 ID 和名称
退出容器不注销 ctrl+p+q
显示正在运行的容器
显示所有容器
包括当前正在运行以及已经关闭的所有容器
删除运行中的容器
即使容正在运行当中,也会被强制删除掉
端口映射
随机映射端口
指定端口映射
本地端口 81 映射到容器 80 端口
本地 IP:本地端口:容器端口
本地 IP:本地随机端口:容器端口
本机 ip:本地端口:容器端口/协议,默认为 tcp 协议
一次性映射多个端口+协议
查看容器访问日志
查看容器端口映射
自定义容器名称
后台启动容器
创建并进入容器
单次运行
容器退出后自动删除
传递运行命令
容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令
容器的启动和关闭
进入到正在运行的容器
使用 attach 命令 此命令用不多,使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,此模式是共享终端模式和screen类似
使用 exec 命令
执行单次命令与进入容器,不是很推荐此方式,虽然 exit 退出容器还在运行
使用 nsenter 命令
推荐使用此方式,nsenter 命令需要通过 PID 进入到容器内部,不过可以使用
脚本方式
查看容器内部的 hosts 文件
关闭删除容器
批量关闭正在运行的容器
批量强制关闭正在运行的容器
批量删除已退出容器
批量删除所有容器
指定容器 DNS
dns 服务,默认采用宿主机的 dns 地址
一是将 dns 地址配置在宿主机
二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1
docker run -it --rm --dns 223.6.6.6 centos bash小结
1、新装docker,检查硬盘内容和分区
目前 docker 的默认存储引擎为 overlay2,需要磁盘分区支持 d-type 文件分层功能,因此需要系统磁盘的额外支持
xfs_info / ftype=1 如果ftype=0时,那么需要在格式化的时候加上参数-n ftype=1修改存储引擎会丢失数据,建议使用docker挂载一个大的硬盘,重新挂载也会丢失数据
2、使用国内aliyun加速器 http://cr.console.aliyun.com/
下载完镜像可以上专到公司内的Hub上
3、删除镜像
先删除容器 docker ps -a查看
docker rmi 容器ID/容器名称 先删除ID才可以删除镜像
docker image rm 镜像名
4、启动一个容器
标准输入进入到窗口it interactive tty
docker run -i -t centos bash #bash是命令容器退出,里面的数据是不会保留的,退出容器不退出 ctrl+p+q 后面启动,一般很少这样启动
5、docker exec -it 容器ID/容器名称 bash 进入后台容器
6、端口映射
7、docker里面不支持systemctl 启动服务,只能运行二进制文件执行
8、docker查看端口映射 docker port 容器名称/ID
9、docker run -d –it –name nginx-web -p 80:80 -p 1.1.1.1:443:443 nginx
10、删除容器 -v存储盘也删除了,不保存记录
docker rm -fv
docker ps -a -q
11、测试启动,只启动一次,验证镜像是否正常,单次运行
docker run -it –rm -P –name nginx1 nginx
12、传递命令给后台某一个容器
容器停止和启动,一般不会,主要针对 Hub镜像服务重启,数据库也可以这样使用
13、建议使用exec或者nsenter,attach是共享的 有bash环境才可以进的去14、kill掉窗口也能使用docker start 容器ID/容器名称 启动
15、容器默认的DNS是宿主主机,或者启动时加参数指定DNS
docker run -it --rm --dns 1.1.1.1 centos bash常用操作:搜索、下载、导出、导入、删除
Loading...
keepalived