Docker
一、Docker概述
1) Docker定义:应用容器引擎
日常例子就是,我们安装系统就必须安装mysql,redis,tomcat,多个服务器就多次安装不方便,docker就是为了将安装好的mysql,redis,tomcat软件等打包成各个镜像,直接启动镜像即可。
百度搜索docker hub
2)核心概念
镜像——模板(安装包)
仓库——存放镜像的地方(APP store)
容器——应用(手机应用)
3)步骤
- 安装docker
- 去docker registry找镜像
- 使用docker运行镜像生成一个容器
4)Docker比虚拟机快
docker有着比虚拟机更少的抽象层。docker利用的是宿主机的内核,而不需要Guest OS。
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。当新建一个虚拟机时,虚拟机需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
二、docker安装
- 虚拟机安装centos,注意3.10版本以上,查看版本:
uname -r
- 安装docker
yum install docker
3. 启动docker
systemctl start docker
设置开机自启动
systemctl enable docker
三、常用操作
1)镜像操作
2)容器操作
启动了一个做了端口映射的tomcat,将主机端口8888映射到虚拟机的8080端口。
外部访问8888端口
注意要关闭linux虚拟机的防火墙。
service firewall stop
用一个镜像创造多个容器,各个独立不干扰
四、docker使用mysql
1)过程
错误原因:mysql的密码需指定!
重新开启:
但是忘记做端口映射了,外部访问不到,先删除原有的:
外部navicat软件就能访问到了。
五、docker原理
-
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
-
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
-
Docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统即UnionFS。以我们的
pull
为例,在下载的过程中我们可以看到Docker的镜像好像是在一层一层的在下载。 -
这样的分层结构,为了共享资源,假如有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
-
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
-
rootfs(root file system)在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
-
docker pull一个centos才200M?
rootfs很小,底层直接用宿主的内核Kernel,所以拉取的仅rootfs即可。
1)docker特点
使用分层镜像就是能共享资源,比如多个镜像有相同的base,内存中只需加载一份base,就能为所有镜像服务了,比如我们pull mongo:
可以看到已经存在了一些镜像,这种特点使得分层镜像非常简约。
六、Docker容器的数据卷
数据卷是持久化的方式,由docker挂在到容器中。
1)数据卷的特点:
- 数据卷可在容器之间共享或重用数据。
- 卷中的更改可以直接生效。
- 数据卷中的更改不会包含在镜像的更新中。
- 数据卷的生命周期一直持续到没有容器使用它为止。
2)挂载数据卷——dockerfile添加:
七、DockerFile
1)是什么
Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器则可以认为是软件的运行态
Dockerfile是一种源码级的images
2) 命令
3)构建三步骤
4)举例
5)推送到云
本地存在了1.3版本
生成1.4版本:
将1.4推到阿里云
创建仓库镜像
其他工程师就可以在阿里云上找到