docker的镜像与制作
docker镜像的内核从镜像大小上面来说,一个比较小的镜像只有十几MB,而内核文件需要一百多兆,因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的rootfs,即系统正常运行所必须的用户空间的文件系统,比如/dev/,/proc,/bin,/etc等目录,所以容器当中基本是没有/boot目录的,而/boot 当中保存的就是与内核相关的文件和目录。
由于容器启动和运行过程中是直接使用了宿主机的内核,所以没有直接调用过物理硬件,所以也不会涉及到硬件驱动,因此也用不上内核和驱动,另外有内核的那是虚拟机。
docker镜像的制作Docker制作镜像类似于虚拟机的镜像制作,即按照公司的实际业务务求将需要安装的软件、相关配置等基础环境配置完成,然后将其做成镜像,最后再批量从镜像批量生产实例,这样可以极大的简化相同环境的部署工作,Docker 的镜像制作分为手动制作和自动制作(基于 DockerFile)。
手动制作镜像手动制作基于yum安装的nginx镜像由于是基于基础镜像制作的镜像,所以需要先下载基础镜像
1.下载centos基础镜像
123456ro ...
Docker Harbor
docker仓库之分布式HarborHarbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。
作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
官网地址:https://vmware.github.io/harbor/cn/
官方github地址:https://github.com/vmware/harbor
Harbor功能官方介绍:基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制:镜像可以在多个Registry实例中复制( ...
Docker存储卷
Docker在运行时,是基于分层镜像联合挂载机制实现的,而这种分层构建镜像,联合挂载并在最上层实现读写层的时候,所有容器中生成的数据都被最上层的可写层所包含,而这个可写层,本身不属于镜像层属于容器,若是容器删了,可写层也将删除。如果要持久保存,则需要将其做成镜像,若要将其进行分发,则可以将其推送到仓库中。
所以我们不能将数据保存在容器的可写层上,通常可写层上只用来保存临时数据。我们需要容器内用来存放数据的目录与容器外的某个目录建立其关联关系,容器中进程所有写入到此目录内的数据都将保存到宿主机上。因此容器停止或删除后,或者再次创建出容器时,其依旧会与宿主机上的目录相关联,那么数据就不会丢失了。
如果此目录属于网络文件系统中的目录,那么即使宿主机挂了,那么数据依然不会丢失。在其他宿主机上再次创建出相同的容器并挂在,数据依旧可用。这种技术就叫做数据卷(data volume)
数据卷类型Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所有不同;
Bind mount volume
在宿主机上的目录是用户指定的,容器中的目录也是用户指定的。
Docke ...
docker的镜像管理
Docker镜像含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于创建并启动docker容器。
Docker镜像含里面是一层层文件系统,叫做UnionFS(联合文件系统),联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通linux的目录结构一样,docker通过这些文件再加上宿主机的内核提供了一个linux的虚拟环境,每一层文件系统我们叫做一层layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是docker镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
一个典型的Linux文件系统由bootfs和rootfs两部分组成,bootfs(bootfilesystem ...
Docker网络
docker提供了4种网络:
桥网络:docker中默认为docker0 NAT,可以进行改变,可以设置成隔离桥,仅主机桥,路由桥等等。
共享桥(联盟式网络):每个容器是靠内核中的名称空间来映射,IPC, NAT, Mount, PID, User, UTS。这些名称空间是可以被共享的。我们可以让每个容器内的Mount,User,PID进行独立,让IPC, NAT, UTS共享。这样可以实现让其进程,用户和文件系统独立,而网络空间是同一组。两个容器内通信可以直接通过IPC进行通信,对外可以使用一个主机名进行访问。这样类似于回到了早期的虚拟机。
共享宿主机网络(host网络):容器有自己的Mount, User, Pid, 但是其同时使用的宿主机的网络名称空间,也就是说其使用的是宿主机的网卡设备。当容器监听在某个套接字上,实际上则是监听在宿主机的套接字上。如容器监听在*:80,则意味着监听在宿主机的*:80上。
空网络(none网路):某些容器只是用来计算数据,数据运行完毕后就删除容器,此种容器无需使用到网络。所以在运行时,不分配网路。
查看当前主机上能被docker所使用的网络
1 ...
Dockerfile指令详解
1.FROM指令
FROM指令是最重要的一个且必须为Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。
实践中,基准镜像可以是仍和可用镜像文件,默认情况下,docker build会在docker主机上查找指定的镜像文件,在其不存在时,则会从Docker Hub Registry上拉取所需的镜像文件。
如果找不到指定的镜像文件,docker build会返回一个错误信息
格式:
123456FROM <repository>[:<tag>] # 或FROM <repository>@<digest># <repository>: 指定作为baseimage的名称# <tag>: base image的标签,为可选项,省略时默认为lastest
2.MAINTANIER指令
用于让Dockerfile制作者提供本人的详细信息
Dockerfile并不限制MAINTAINER指令可出现的位置,但推荐将其放置于FROM指令之后
...
Docker基础
Dockerfile仅仅是一个用来构建docker镜像的源码,一旦有了此文件,Docker就可以去读取对应的指令来自动构建镜像,Dockerfile是一个纯文本文件,只不过这个纯文本文件中的内容被称作Dockerfile的指令,这个指令是有特定格式的,所谓特定指令是指Dockerfile所支持识别的指令,Dockerfile文件制作完毕后,就可以构建docker镜像。
构建docker镜像时,必须要有一个工作目录,工作目录内只存放dockerfile以及被dockerfile所依赖的文件,或者需要被复制到镜像内的文件,并且需要被复制到镜像内的文件只能起始于此目录中,否则将无法复制进镜像内。不要放任何与当前镜像构建无关的文件。使用docker build构建镜像时,只需要指定Dockerfile文件所在的目录即可,并且Dockerfile文件的命名只能是Dockerfile
Dockerfile文件格式指令Dockerfile文件是由2类指令构成:
# Comment: 注释信息
INSTRUCTION arguments: 指令参数信息
指令本身不区分字符大小写,但是一般写为纯大写 ...
Docker-CE的安装
官方网址: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.6为例。
Docker版本选择:
Docker之前没有区分版本,但是2017年推出(将docker更名为)新的项目Moby,github 地址:https://github.com/moby/moby,Moby项目属于Docker项目的全新上游,Docker 将是一个隶属于的 Moby 的子产品,而且之后的版本之后开始区分为CE版本(社区版本)和EE(企业收费版),CE社区版本和EE企业版本都是每个季度发布一个新版本,但是EE版本提供后期安全维护1年,而CE版本是4个月,本次演示的 ...
Docker常用命令
docker命令是最常使用的docker客户端命令,其后面可以加不同的参数以实现响应的功能,常用的命令如下:
镜像的操作命令搜索镜像 docker search在官方的docker仓库中搜索指定名称的docker镜像,也会有很多三方镜像。
12masuri@mylinuxops:~$ sudo docker search centos:7.6 # 带上版本号,指定版本号masuri@mylinuxops:~$ sudo docker search centos # 不带版本号默认为latest
下载镜像 docker pull从docker仓库下载镜像到本地
12docker pull 仓库服务器:端口/项目名称/镜像名称:tag号docker pull registry.cn-beijing.aliyuncs.com/mylinuxops/neginx:latest
如果不指定镜像仓库默认为官方仓库
123456masuri@mylinuxops:~$ sudo docker pull centosUsing default tag: latestlatest: Pullin ...
docker简介
容器统称来说,容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,具体来说比如人类使用的衣柜、行李箱、背包等可以成为容器,但今天我们所说的容器是一种 IT 技术。
容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容、实现了业务宕机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT行业来说非常有影响和价值的技术,而对于 IT 行业的从业者来说,熟练掌握容器技术无疑是一个很有前景的行业工作机会。容器技术最早出现在freebsd叫做 jail。
docker简介首先Docker是一个在2013年开源的应用程序并且是一个基于go语言编写是一个开源的pass服务(Platform as a Service,平台即服务的缩写),go语言是由google开发,docker公司最早叫dotCloud后由于Docker开源后大受欢迎就将公司改名为Docker Inc,总部位于美国加州的旧金山,Docker是基于linux内核实现,Docker最早采用LXC技术(LinuX C ...