Docker的概述
**
1.什么是docker
Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制[1]。
cker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担[2]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。
2.Docker的优势
1.Docker容器运行速度很快,可以在可以秒级实现启动和停止,比传统虚拟机要快很多。Docker解决的核心问题是利用容器来实现类似虚拟机的功能,从而利用更少的硬件资源给用户提供更多的计算机资源。
Docker容器技术和传统虚拟机的比较
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度快 | 秒级 | 分钟级 |
计算能力损耗 | 几乎没用 | 损耗50%左右 |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 上千个 | 几十个 |
隔离性 | 资源限制 | 完全隔离 |
2.传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而docker容器是直接在操作系统层面之上实现的虚拟化
3.镜像
镜像,容器,仓库是Docker的三大核心概念,其中,Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。
4.容器
docker的容器是从镜像创建的运行实例,他可以被启动,停止和删除,每一个容器都是相互隔离,互不可见的,以保证平台的安全性。可以把容器看作是一个简易版的Linux环境,**docker利用容器来运行和隔离应用。
5.仓库
docker仓库是用来集中保存镜像的地方。可以使用push命令将它上传到公用(public)仓库或者私有(private)仓库,目前最大的公共仓库是docker Hub,它存放了数量庞大的镜像供用户下载使用。
Docker的安装
docker的双发行版
1.docker-ee
2.docker-ce
下载地址:docker安装
仓库配置文件:docker仓库配置文件
docker程序环境
环境配置文件:
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage
/etc/sysconfig/docker
Unit File:
/usr/lib/systemd/system/docker.service
Docker Registry配置文件:
/etc/containers/registries.conf
docker-ce:
配置文件:/etc/docker/daemon.json
docker镜像加速
1.docker cn
2.阿里云加速器
3.中国科技大学
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
注册阿里云账号,专用加速器地址获得路径:
https://cr.console.aliyun.com/#/accelerator
docker命令使用
docker search 搜索官方仓库中的共享镜像
[root@bogon /]# docker search mysql
name | SCRIPTION | SCRIPTION | START | OFFICIAL |
---|---|---|---|---|
名称镜像 | 描述 | 星级 | 是否官方创建 | 是否主动创建 |
docker pull 从网络下载镜像到本地来使用
[root@bogon /]# docker pull centos:centos7.6.1810
docker images 查看下载到本地的所有镜像
[root@docker /]# docker images
PEROSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
镜像所属的仓库 | 镜像的标签信息,用于标识同一个仓库的不同镜像 | 镜像的唯一ID号 | 镜像的创建时间 | 镜像大小 |
docker inspect 获取镜像或容器的详细信息
[root@docker /]# docker inspect web1
docker tag 为本地镜像添加新的标签
[root@docker /]# docker tag nginx:1.14-alpine web:nginx
docker rmi 删除镜像
[root@docker /]# docker rmi nginx:1.14-alpine & dcoker rmi 8a2fb25a19f5
镜像的存出和导入
docker save -o || docker load < 存出镜像和导出镜像
[root@docker /]# docker save -o redis redis:4-alpine **存出镜像**
[root@docker /]# docker load < redis **导出镜像**
docker push 上传镜像
上传镜像:1.登录 docker login 退出登录:docker logout 账号:cxkctrl 密码:.......
[root@docker /]# docker push cxkctrl/shiyan_1:redis ##(前面的cxkctrl/shiyan_1是我的私人账号和仓库名称)
docker create 创建容器
-t:让容器分配一个伪终端 -i:让容器的输入保持打开状态
[root@docker /]# docker create -it nginx:1.14-alpine /bin/sh
docker ps 查看开启的容器 -a 查看所有容器 -n=x 查看指定行的容器
--filter, -f:过滤器条件显示
name=
status={stopped|running|paused}
[root@docker /]# docker ps | docker ps -a | docker ps -n=1
docker start 启动容器
[root@docker /]# docker start web1 ##可指定容器的ID/名称
docker stop 停止容器
[root@docker /]# docker stop web1 ##可指定容器的ID/名称
[root@docker /]# docker kill centos ##强制停止容器
docker stop $(docker ps -q) ##停用全部的容器
docker run 创建并运行容器
-d:后台运行容器 --name 定义容器的名字(可选,不自定义会随机定义名字)
--rm:容器运行终止即自行删除
--network BRIDGE:让容器加入的网络;默认为docker0;
[root@docker /]# docker run -itd --name centos centos:centos7 /bin/bash
docker exec 进入容器 或者 docker attach 进入容器
[root@docker /]# docker exec -it centos /bin/bash ##可指定容器的ID/名称
[root@docker /]# docker attach ceshi_1 ##一旦退出容器就是自动停止容器
容器的导出和导入
docker export 容器的id/名称 > 文件名 | cat 文件名 | docker import - 生成的镜像名称和标签
[root@docker /]# docker export centos > Centos7.tag ##导入容器
可以通过scp来进行传递生成的容器文件
[root@docker /]# cat Centos7.tag | docker import - centos:centos7 ##导出容器
docker rm 容器的删除 -f 强制删除
[root@docker /]# docker rm web1
docker rm $(docker ps -aq) ##删除全部的容器
docker的数据管理
1.管理docker容器中的数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers)
1.数据卷
数据卷是一个供容器使用的特殊目录,位于容器中,可以将宿主机的目录挂到数据卷上,对数据卷的修改操作立刻可见。
2.创建数据卷
在docker run 命令中使用-v选项可以在容器内创建数据卷。
命令格式:docker run -it -v /宿主机绝对目录:/容器内目录 镜像名
例如:[root@www /]# docker run -it -v /data/shuju/ceshi/:/data1 centos:centos7
3.数据卷容器
注意:(数据卷是一个普通容器,专门提供数据卷给其他容器,)
使用--volumes-form来挂载web容器中的数据卷到新的容器。
命令格式:docker run -it --volumes-from 镜像名 --name 新的名字 新的镜像
例如:[root@www /]# docker run -it --volumes-from ceshi_1 --name ceshi_2 centos:latest /bin/bash