Docker
Docker简介
1、是什么
系统平滑移植,容器虚拟化技术
安装的时候,把原始环境一模一样的复制过来
概念:通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的app及运行环境能够做到“一次镜像,处处运行”
2、与虚拟机的区别
docker相当于VMware
虚拟操作系统 相当于 项目.镜像文件
Docker基本组成
1、Docker的基本组成
镜像:一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。一种轻量级、可执行的独立软件包,包含运行某个软件所需的所有内容,将应用程序和配置依赖打包形成一个可交付的运行环境(包括代码、运行时所需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
容器:容器是用镜像创建的运行实例。(镜像类似于Java的类模板,而容器类似于java中new出来的实例对象)镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库:集中存放镜像的地方
2、仓库、镜像、容器的区别与联系:
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置环境打包成一个可支付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例。
image文件可以看作是容器的模板。Docker根据image文件生成image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
镜像文件:
image文件生成的容器实例,本身也是一个文件,称为镜像文件。
容器实例:
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
仓库:存放镜像。
Docker的安装
https://docs.docker.com/engine/install/ubuntu/
https://blog.csdn.net/xiaopang_love_study/article/details/120653689
没有可用的软件包 docker-ce,但是它被其它的软件包引用了。
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"
Docker命令
启动类命令
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开启启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker [命令] --help
镜像命令
docker images[-a 列出本地所有镜像 (含历史镜像)/ -q只显示镜像ID]:列出本地主机所有镜像
repository:表示镜像的仓库源
tag:镜像的标签版本号(latest)
image id:镜像ID
created:镜像创建时间
size:镜像大小
docker search [--limit 5] [image name]:查找某镜像是否在远程库
docker pull [image name:tag]:下载镜像
docker system df 查看镜像/容器/数据卷所占的空间
docker rmi [-f 强制删][image name/id]:删除
虚悬镜像:仓库源和标签都是null的镜像
容器命令
新建+启动容器:docker run [--name给创建的容器起名 -d启动守护式容器/ -it启动交互式容器 -P随机端口映射/-p hostPort:containerPort指定端口映射] image [arg...]
列出正在运行的容器:docker ps [-a正在运行的容器和历史运行过的 -l最近创建的 -n最近n个创建的 -q只显示容器编号]
启动容器:docker start [image id/name]
重启容器:docker restart [image id/name]
停止容器:docker stop[image id/name]
强制停止:docker kill[image id/name]
删除容器:docker rm[image id/name]
Docker镜像
镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好行程一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
联合文件系统
Docker 中的文件存储驱动叫做 storage driver。
Docker 最早支持的stotage driver是 AUFS,它实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFS。
联合文件系统(UnionFS):Union 文件系统,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite serveral directories into a single virtual filesystem)。
Union文件系统是Docker镜像的基础。镜像可以通过分层来进行集成,基于基础镜像可以制作具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
后来出现的docker版本中,除了AUFS,还支持OverlayFS、Btrfs、Device Mapper、VFS、ZFS等storage driver。
bootfs和rootfs
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等。
镜像分层
镜像分层的一个最大好处就是共享资源,方便复制迁移,方便复用。
当容器启动时,一个新的可写层将被加载到镜像的顶部,这一层通常被称为容器层,容器层之下的都叫镜像层。所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
commit命令
作用:提交容器副本使之成为一个新的镜像
ubuntu安装vim:
1.下载并运行ubuntu镜像
docker run -it ubuntu /bin/bash
2.原始的ubuntu镜像不带vim命令:commit命令作用使得生成的副本成为新的镜像
2.1更新包管理工具
apt-get update
2.2安装vim
apt-get install vim
2.3提交新的容器副本,使之成为新的镜像
docker commit -m=描述信息 -a=作者 副本容器ID 新的镜像名:标签
docker commit -m="add vim" -a="lee" id vimUbuntu
容器数据卷
容器卷与主机互联互通
将docker容器中数据保存到宿主主机的磁盘中,容器与宿主机之间双向数据共享
docker run -it --privileged=true -v/宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂在成功:
docker inspect 容器ID
限制容器内只读(默认rw):
docker run -it --privileged=true -v/宿主机绝对路径:/容器内目录:ro 镜像名
容器卷之间的继承:两者之间实现数据共通
docker run -it --privileged=true --volumes-from 父类 --name name 镜像名称