目录
- 一、什么是Docker?
- 1、背景
- 2、Docker三要素
- 3、Docker四个组成部分
- 二、Docker安装步骤
- 1、VM虚拟机下载
- 2、centrOS 8下载
- 3、安装docker
- 4、配置阿里云镜像加速器
- 5、docker run 执行顺序
- 6、docker和虚拟机比较
- 三、docker常用命令
- 四、docker镜像分层
一、什么是Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
- docker官网:https://docs.docker.com/
- Docker Hub官网: https://hub.docker.com/
1、背景
在docker出现之前,是把java代码打包成jar文件后,上传到测试或者生产环境。但是由于测试或者生产跟本地的开发环境不一致(jdk版本、mysql版本、redis版本等)。就很容易出现在本地能跑起来的项目,一上传到测试就跑不起来了。docker的出现就是为了解决这一问题,使用docker后会将你的代码、运行环境、配置文件、第三方插件等全部打包成一个镜像文件。一次镜像,处处运行
,docker仅能在linux上面安装。
2、Docker三要素
- 仓库
仓库是集中存放镜像的地方
,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。世界最大的公开仓库是Docker Hub,国内有阿里云、网易云等。
- 镜像
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容
,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
。
- 容器
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
可以把容器看做是一个简易版的Linux环境
(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
3、Docker四个组成部分
- Docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- Docker Container容器
如下图,Client是客户端
,向Docker Daemon守护进程
发送一个run
命令,守护进程先查询本地有没有该image镜像
文件,如果没有就去远程仓库拉取到本地,然后再生成Container容器
二、Docker安装步骤
1、VM虚拟机下载
VMware17安装包及破解秘钥
链接:https://pan.baidu.com/s/1Dq5-IG8GuhVwgw5y0bfQyA
提取码:7zb0
2、centrOS 8下载
链接:https://pan.baidu.com/s/1k3z41SyqAfPGrtp41Q7R7g
提取码:6b6t
3、安装docker
1、确定使用CentOS7及以上镜像版本
cat /etc/redhat-release
2、卸载旧版本
如果之前有安装过docker,需要先卸载旧版再安装
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3、yum安装gcc
yum -y install gcc
yum -y install gcc-c++
4、安装stable镜像仓库
yum install -y yum-utils
// 这里使用阿里的,如果从国外的仓库安装会超时
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、更新yum软件包索引
// centos7 命令
yum makecache fast
// centos8 命令
yum makecache
6、安装docker ce
yum install docker-ce docker-ce-cli containerd.io
7、启动docker
systemctl start docker
8、测试
docker version
// 本地找不到镜像会去仓库拉取,然后生成容器实例
docker run hello-world
9、卸载 docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf/var/lib/containerd
4、配置阿里云镜像加速器
1、找到‘弹性计算’下面的‘容器镜像服务’
2、创建个人版
3、点击‘镜像加速器’,选择CentOs找到加速器命令
4、执行如下命令配置成功
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["使用自己生成的加速器url"]
}
EOF
systemctl daemon-reload
systemctl restart docker
5、docker run 执行顺序
6、docker和虚拟机比较
1、虚拟机(Hypervisor)除了在宿主操作系统上运行外,还需要依赖于一个镜像(比如在MVware上面运行虚拟机需要选择一个Centos镜像,这个镜像包括了整个操作系统需要的配置,一般好几个G)。
而docker是直接依赖宿主操作系统。因此在cpu、内存利用率上docker有明显优势
2、新建一个docker实例的时候,不需要像虚拟机一样加载一个操作系统内核,一般虚拟机加载OS是分钟级的,而docker直接利用宿主机OS仅需要几秒钟就能生成一个docker实例
三、docker常用命令
docker常用命令请参考另外一篇博客:点击跳转
四、docker镜像分层
1、什么是UnionFS
UnionFS (联合文件系统) : Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统
,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。 Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承
,基于基础镜像(没有父镜像) ,可以制作各种具体的应用镜像。
2、docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFSbootfs(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镜像层都是只读的,容器层是可写的
·当容器启动时,一个新的可写层被加载到镜像的顶部这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的改动-无论添加、删除、还是修改文件都只会发生在容器层
中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
3、镜像分层原理
Docker镜像分层,支持通过扩展现有镜像,创建新的镜像。类似于Java继承于一个Base基础类,自己再按需扩展。
4、示例
先,创建一个ubuntu实例,并创建一个a.txt文件,用vim命令进入编辑时,提示这个命令不存在。
然后,执行如下命令,在ubuntu容器上面安装vim
#先更新我们的包管理工具
apt-get update
#然后安装我们需要的
vimapt-get install vim
然后,安装完成后执行vi a.txt
,编辑如下后保存退出:wq!
。
然后,将容器生成一个新的镜像,该镜像包含该容器所有文件。
语法:docker commit -m="[提交描述]" -a="[作者]" [容器ID] [镜像名]:[版本号]
最后,在ubuntu上面安装了一个vim生成了一个新的ubuntu。就相当于扩展了基础镜像。
5、镜像分层优点
- 资源共享
- 方便复制迁移