docker镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量以及配置文件等。
UnionFS(联合文件系统)
联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件下。Union文件系统(UnionFS)是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
docker镜像加载原理
1、docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫做UnionFS。
2、Bootfs(boot-file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核,当boot加载完成之后整个内核就能在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
3、Rootfs(root-file system),在bootfs之上,包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs就是各种不同操作系统的发行版,比如Ubuntu,Centos等等。
4、对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序就可以了,因为底层直接用宿主机的内核,自己只需要提供rootfs就可以了,因此可见,对于不用的Linux发行版,bootfs基本是一致的,而rootfs会有差别,因此不同的发行版可以公用bootfs。
docker为什么采用分层结构
多个镜像从相同的父镜像构建而来,那么宿主机只需在磁盘上保存一份父镜像,同时内存中也只需加载一份父镜像就可以为所有容器服务了,并且镜像的每一层都可以被共享。
docker镜像特点
1、docker镜像只读。
2、当镜像实例为容器后,只有最外层是可写的。
docker commit命令
$ docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
数据卷介绍
当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们关闭docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。
docker run -it -v HostPath:ContainerPath imageName /bin/bash
数据卷容器介绍
命名的容器挂载数据卷,其他容器通过挂载这个父容器实现数据共享,挂载数据卷的容器称为数据卷荣容器。
##containerName是数据卷容器名字
docker run -it --volumes-from containerName --name containerName2 imageName /bin/bash
dockerfile介绍
dockerfile是描述docker镜像的文件,说的直白点就是镜像文件到底是由什么东西一步步构成的。
dockerfile编写myCentos
from centos
ENV Mypath /usr/local
WORKDIR $Mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 81
CMD echo "success!"
CMD /bin/bash
然后构建镜像
docker build -f /myApps/dockerfile1 -t feige:1.0 .
查看效果
docker build命令
docker build --help
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
dockerfile关键字
1、dockerfile中每条指令都会产生一个镜像层,并对指令进行提交。
2、dockerfile中关键字FROM:基于的父类镜像。
3、dockerfile中关键字RUN:需要执行得LINUX命令。
4、dockerfile中关键字ENV:设置环境变量。
5、dockerfile中关键字EXPOSE:暴露给外界得端口号。
6、dockerfile中关键字WORKDIR:进入容器的落脚点。
7、dockerfile中关键字MAINTAINER:镜像持有者和邮箱。
8、dockerfile中关键字ADD:将宿主文件拷贝进镜像,自动解压tar压缩文件。
9、dockerfile中关键字COPY:将宿主文件拷贝进镜像。
10、dockerfile中关键字VOLUME:容器数据卷,用于数据保存和持久化工作。
11、dockerfile中关键字CMD:CMD后面的命令在启动容器时执行,可以有多个,但只有最后一个生效,会被run后面参数替换。
12、dockerfile中关键字ENTRYPOINT:和CMD命令相似,他后面的命令不会被docker run后面的参数覆盖。
13、dockerfile中关键字ONBUILD:构建子类镜像的时候,父类dockerfile中的ONBUILD后面的命令会被执行。
docker帮助命令
1、查看docker版本
docker version
2、查看docker信息
docker info
3、帮助命令
docker --help
镜像命令
1、拉取镜像
docker pull imageName
2、本地镜像
docker images
3、查找镜像
docker search imageName
4、删除镜像
docker rmi -f image_id
5、删除全部镜像
docker rmi -f $(docker images -qa)
容器命令
1、启动容器(交互式)
docker run -it -p 8081:8080 tomcat /bin/bash
2、查看容器
docker ps -a
3、容器停止退出
exit
4、容器不停退出
ctrl+P+Q
5、启动容器
docker start 容器ID
6、重启容器
docker restart 容器ID
7、停止容器
docker stop 容器ID
8、强制停止容器
docker kill 容器ID
9、删除已经停止的容器
docker rm 容器ID
10、启动守护式容器
docker run -d 容器ID
11、查看容器内部细节
docker inspect 容器ID
12、进入运行中的容器
docker attach 容器ID
13、容器外部执行命令
docker exec -t 容器ID linux命令
14、拷贝容器内的数据
docker cp 容器ID:容器路径 主机路径