赞
踩
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
在docker出现之前,是把java代码打包成jar文件后,上传到测试或者生产环境。但是由于测试或者生产跟本地的开发环境不一致(jdk版本、mysql版本、redis版本等)。就很容易出现在本地能跑起来的项目,一上传到测试就跑不起来了。docker的出现就是为了解决这一问题,使用docker后会将你的代码、运行环境、配置文件、第三方插件等全部打包成一个镜像文件。一次镜像,处处运行
,docker仅能在linux上面安装。
仓库是集中存放镜像的地方
,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。世界最大的公开仓库是Docker Hub,国内有阿里云、网易云等。
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容
,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
可以把容器看做是一个简易版的Linux环境
(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
如下图,Client是客户端
,向Docker Daemon守护进程
发送一个run
命令,守护进程先查询本地有没有该image镜像
文件,如果没有就去远程仓库拉取到本地,然后再生成Container容器
VMware17安装包及破解秘钥
链接:https://pan.baidu.com/s/1Dq5-IG8GuhVwgw5y0bfQyA
提取码:7zb0
链接:https://pan.baidu.com/s/1k3z41SyqAfPGrtp41Q7R7g
提取码:6b6t
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
// 安装(这里是1.29.2版本,可根据docker版本进行修改)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// 赋权
sudo chmod +x /usr/local/bin/docker-compose
// 查看是否安装成功
docker-compose --version
// 如果查看报错,可以删除后重装合适版本
sudo rm /usr/local/bin/docker-compose
1、找到‘弹性计算’下面的‘容器镜像服务’
2、创建个人版
3、点击‘镜像加速器’,选择CentOs找到加速器命令
4、执行如下命令配置成功
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
// "registry-mirrors": ["https://85mem738.mirror.aliyuncs.com"]
"registry-mirrors": ["使用自己生成的加速器url"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1、虚拟机(Hypervisor)除了在宿主操作系统上运行外,还需要依赖于一个镜像(比如在MVware上面运行虚拟机需要选择一个Centos镜像,这个镜像包括了整个操作系统需要的配置,一般好几个G)。
而docker是直接依赖宿主操作系统。因此在cpu、内存利用率上docker有明显优势
2、新建一个docker实例的时候,不需要像虚拟机一样加载一个操作系统内核,一般虚拟机加载OS是分钟级的,而docker直接利用宿主机OS仅需要几秒钟就能生成一个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、镜像分层优点
1.创建命名空间
2.创建镜像仓库
3.根据提示提送本地镜像到阿里云仓库
Docker容器卷是将容器的文件系统路径映射到主机文件系统路径
的一种方法。它允许在容器和主机之间共享数据
,使得数据的持久化存储和备份变得更加容易。
Docker容器卷有以下几个作用:
语法:docker run -v <主机目录>:<容器目录> <镜像id>:<镜像版本>
要实现Docker容器卷,可以使用以下命令来创建一个卷:
docker volume create myvolume
这将创建一个名为myvolume的卷。可以通过将-v选项添加到docker run命令中来将卷挂载到容器中:
docker run -d -v myvolume:/path/to/mount myimage
这将从主机文件系统的myvolume路径挂载到容器中的/path/to/mount路径。现在容器和主机之间可以共享数据了。
另外,Docker还支持将主机文件系统的路径直接挂载到容器中。例如,要将主机文件系统的/path/on/host路径挂载到容器中的/path/to/mount路径:
docker run -d -v /path/on/host:/path/to/mount myimage
这将从主机文件系统的/path/on/host路径挂载到容器中的/path/to/mount路径。
需要对Docker容器卷有更深的理解,请参考: 深入理解 Docker 容器卷
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。