- docker的作用:docker的主要目标就是“build ship and run any App Anywhere”,也就是、、web应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Docker的出现解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
- docker与传统虚拟机的不同之处:
传统虚拟机技术是虚拟出一个套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需要的应用进程
容器:容器内的应用进程直接运行在宿主机的内核,容器内没有自己的内核并且也没有进行硬件虚拟,因此容器要比传统虚拟机更为便捷
每个容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
Docker -hub:安装docker镜像的仓库
Docker的基本组成:镜像(images)
容器(container)
仓库(repository)
Docker镜像(image)
Docker镜像(image)就是个只读的模板,镜像可以用来创建docker容器,(一个镜像可以创建多个容器)
Docker也相当于是一个root文件系统,比如官方镜像centos:7就包含了完整的一套centos:7最小系统的root文件系统。
相当于容器的“源代码”,docker镜像文件类似于java的类模板,而docker容器实例类似于java中new出来的实例对象。
docker容器(container)
1.从面向对象角度
Docker利用容器(container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟机的运行环境,容器是用镜像创建的运行实例。就想java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体,容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动,删除,开始,停止。每个容器都是相互隔离的,保证安全的平台。
2.从镜像容器角度
可以把容器看做是一个简易版的linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
仓库(repository)
仓库(repository)是集中存放镜像文件的场所
类似于
Maven仓库:存放各种jar包的地方
Github仓库:存放各种git项目的地方
Docker公司提供的官方registry被称为docker hub,存放各种镜像模板的地方
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是docker hub(https://hub.docker.com/).
Docker hub存放了数量庞大的镜像提供用户下载,国内的公开仓库包括阿里云,网易云等
总结:正确的理解仓库/镜像/容器
Docker本身是一个容器运行载体或称之为管理引擎,我们把应用程序和配置依赖打包形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件,只有通过这个镜像文件才能生成docker容器实例(类似于java中new出来的一个对象)
Image文件可以看作是容器的模板,docker依据image文件生成容器实例,同一个image文件可以生成多个同时运行的容器实例。
镜像文件:
image文件生成的容器实例,本身也是一个文件,成为镜像文件。
容器实例:
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
仓库:
就是存放镜像的地方,我们可以把镜像文件发布到仓库中,需要的时候从仓库拉取过来就可以用了。
Docker的工作原理:
Docker是一个client-server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器是一个运行时环境实例。
Docker是一个C/S模式的架构,后端一个松耦合架构,众多模块各司其职。
Docker运行的基本流程
1.用户是使用docker client与docker Daemon建立通信,并发送请求给后者
2.docker Daemon作为docker架构中的主体部分,首先提供docker server的功能使其可以接收docker client的请求。
3.docker Engine执行docker内部的一系列工作,每一项工作都是以一个job的形式存在。
4.job的运行过程中,当需要容器镜像时,则从docker registry中下载镜像,并通过镜像管理驱动Graph driver将下载的镜像以Graph的形式存储。
5.当需要为docker创建网络环境时,通过网络管理驱动network driver创建并配置docker容器网络环境
6.当需要限制docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。
7.Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
1.安装docker环境
首先查看服务器版本是否为centos7及以上版本
cat /etc/redhat-release
2.yum安装gcc相关软件包
yum -y install gcc
yum -y install gcc-c++
3.安装需要的软件包
yum install -y yum-utils
4.设置stable镜像仓库
这里我们使用我们国内的阿里云,腾讯云,网易云等等。国外的太恶心啦
阿里云网址:yum-config-manager --add-repo http://mirrors.aliyun.com/
docker-ce/linux/centos/docker-ce.repo
5.更新yum软件包索引
yum makecache fast执行这条命令更新一下我们yum下载的索引方便我们以后yum下载更快
6.安装docker-ce
yum install docker-ce
有时候会报错
解决方法
7.启动docker
Systemctl start docker
8.测试
docker run hello-world
查看docker版本
Docker version
完成!!!
阿里云镜像加速器
为了方便我们更加快速拉取镜像,快速发布!
Mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://ob47bfrt.mirror.aliyuncs.com"] } EOF
重新启动docker
Systemctl daemon-reload
Systemctl restart docker
docker环境部署完成
Docker常用命令:
1.帮助启动命令:
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker运行状态:systemctl status docker
开机启动docker:systemctl enable docker
查看docker:概要信息:docker info
查看docker总体帮助文件:docker --help
查看docker命令帮助文件:docker 命令 --help
2.镜像命令
Docker images:查看本地主机镜像
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个TAG版本,代表这个仓库源的不同的版本,我们使用REPOSITORY:TAG来定义不同的版本的镜像。
如果不指定一个叫镜像的版本标签,比如只是用ubuntu,docker将默认ubuntu:latest镜像
Docker search:查找镜像
Docker pull:下载镜像
Docker systemctl df:查看镜像/容器/数据卷所占的空间
Docker rmi:删除镜像 可以加镜像名字/加ID
普通删除加镜像ID
强制删除加 -f 镜像ID
删除单个 docker rmi -f 镜像ID
删除多个 docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部 docker rmi -f $(docker images -qa)