Docker概述
1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
(沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。)
4、docker可以在任意环境部署的原因:只要能装上docker-engine 引擎,就能使用;它实现了docker环境的跨平台。
5、容器不依赖于系统,依赖于引擎。
6、容器是一个应用层抽象;虚拟机(VM)是一个物理硬件层抽象
例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。
1.2、Docker和虚拟机的区别
Docker和虚拟机的区别
Docker的优势
1、更快速的交付和部署
docker在整个开发周期都可以完美的辅助你实现快速交付。
docker允许开发者在装有应用和服务本地容器开发。可以直接集成到可持续开发流程中
docker容器的启动时间是秒级的,大量地节约了开发、测试、部署的时间
例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。
2、高效的部署和扩容
docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、pc、服务器。
这种兼容性可以让用户把一个应用程序从平台直接迁移到另外一个
docker的兼容性和轻量型可以很轻松的实现负载的动态管理,可以快速扩容或者方便的下线应用和服务,趋近于实时
3、更高的资源利用率
docker对系统资源的利用率很高,一台主机上可以同时运行数据个docker容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行10个不同的应用就要10个虚拟机,而docker只需要启动10个隔离的应用即可
4、更简单的管理
使用docker,只需要小小的修改,就可以替代以往的大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理
安装Docker
#安装依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2
'//yum-utils 提供了 yum-config-manager'
'//device manager 存储驱动程序需要 device-mapper-persistent-data 和 lvm2'
'//Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制'
'//它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构'
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装Docker-CE
yum -y install docker-ce
#关闭防火墙与核心防护
systemctl stop firewalld
setenforce 0
#开启并设置开机自启
systemctl start docker.service
systemctl enable docker.service
====================镜像加速=====================
......
systemctl daemon-reload
systemctl restart docker.service
====================网络优化=====================
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker.service
Docker镜像创建与操作
#查看docker版本
docker version
#搜索nginx镜像(公有仓库搜索)
docker search nginx
#下载nginx镜像
docker pull nginx
'//AUFS(联合文件系统)若干层下载'
'//下载后存放在/var/lib/docker'
'//下载文件信息 /var/lib/docker/image/overlay/repositories.json'
#查看下载镜像列表
docker images
#获取镜像详细信息
docker inspect IMAGE-ID
#添加新标签
docker tag nginx:latest nginx:web
'//相当于增加了一个别名'
#查看镜像
docker images | grep nginx
#删除镜像
docker rmi nginx:web
#存出镜像命名为nginx-web存在某个目录下
docker save -o /opt/nginx-web nginx:latest
ls -lh /opt/nginx-web
#载入镜像
docker load < /opt/nginx-web
Docker容器管理
#容器创建
docker create -it nginx:latest /bin/bash
'//-i 让容器的标准输入保持打开'
'//-t 让Docker分配一个伪终端'
#查看容器
docker ps -a
'//-a 列出所有的容器,包括为运行的容器'
#启动容器
docker start CONTAINER ID
'//启动执行命令并查看系统根目录'
//docker pull centos:7
//docker create -it centos:7 /bin/bash
//docker start CONTAINER ID
//docker run centos:7 /bin/bash -c ls / '//执行完成后直接关闭 状态时Exited'
'//持续在后台执行'
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
'//-d 在后台进行运行,守护进程'
#终止运行
socker stop CONTAINER ID
#进入容器
docker ps -a '//显示容器状态'
docker start CONTAINER ID '//一定要运行状态'
docker exec -it CONTAINER ID /bin/bash
exit '//退出容器'
#容器导出
docker export CONTAINER ID > /opt/nginx-container
#容器导入(会生成镜像,而不会创建容器)
cat nginx-container | docker import - nginx:web
#删除容器
docker rm CONTAINER ID
#批量删除容器
docker ps -a | awk '{print "docker rm " $1}' | bash