创建容器的几种方式
①基于己有的模板文件进行创建,容器导出、导入 ②基于己有的镜像进行创建 ③dockerfile
一、dockerfile分层原理
1、docker镜像分层(基于AUFS构建):Docker镜像位于bootfs之上 每一层镜像的下一层成为父镜像 第一层镜像成为base image(操作系统环境镜像)530容器层(可读可写),在最顶层(writable) 2、涉及技术: ①bootfe [boot file mysten) 要包含boot loader和kernel bootloader主要是引导加载kernal,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfr。 这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当iboot加载完成之后螫个内核就都在内存中了,此时内存的使用权已由bootfz转交给内核,此时系统也会卸载bootfs在linux操作系统中〈不同版本的linux发行版本),linux加载sootfs时会将rootfs设置为read-only,系统自检后会将只读改为读号,让我们可以在操作系统中进行操作 ②rootfs fraot file system 在bootfa之上 (base images。例如centos 、ubunta) 包含的就是典型 Linux系统中的/dev,/proc,/bin,/ete等标准目录和文件
FUFS与overlay/overlay2
AUFS是一种联合文件系统。它使用同一个Tinux host上的多个目录,逐个堆叠起来,对外呈现出一个统一的文件系统。AUF8使用该特性,实现了Docker镜像的分层,而dackcr使用了overlay/ overlay2存储墅动来支持分层结构 OverlayFS将单个Linux主机上的两个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载
1、rootfs 基础镜像
2、1over 下层信息(为镜像层,容器)
3、upper 上层自录(容器信息,可写)
4、worker 运行的工作目录(copy-on-irite写时复制、准备容器环境)
5、mergod ”视图是”(容器视图)
docker 镜像层次结构小结
①base image:基础镜像 ②imagen固化了一个标准运行环境,镜像本身的功能-封装一组功能性的文件,通过统一的方式,文件格式提供出来(只读) ③containera容潜层(读写) ④docker-server 端 ⑤呈现给docker-client(视图)
在修改时,若upper层没有,则会将lower层有的文件复制到upper层进行修改并保存结果
[root@docker1 ~]
[root@docker1 ~]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
lower upper
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 daemon]
dockerfile操作指令
1、FROM镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像的维护人信息
2、MAINTAINER名字 说明新镜像的维护人信息
3、BUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
4、CMD[“要运行的程序”“参数1,参数2”] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
5、EXPOSE端口号 指定新镜像加载到Docker时要开启的端口
6、ENV环境变量 变量值 设置一个环境的值,会被后面的RUN使用
7、ADD源文件/目录 目标文件/目录 将源文件复制到目标文件 源文件要到与Dockerfile位于相同目录中,或者是一个URL
8、COPY源文件/目录 目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
9、VOLUME["目录"] 在容器中创建一个挂载点
10、USER用户名/UID 指定运行容器时的用户
11、WORKDIR路径 为后续的RUN、CDM、ENTRYPOINT指定工作目录
12、ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
13、HEALTHCHE 健康检查
编写镜像
[root@docker1 ~]
FROM centos:7
MAINTAINER this is nginx image
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
CMD nginx
[root@docker1 daemon]
[root@docker1 ~]
构建镜像命令
docker build -t nginx:test
-t:tag
-f:指定dockerfile目录
. :指构建镜像时使用的环境目录
ADD:支持将远程URL的资源加入到镜像的文件系统
COPY:只复制
CMD与entrypoint:都是容器启动时要加载的命令
exec 模式 与shell模式
exec:容器加载时使用的启动的第一个任务进程
shell:容器加载时使用的第一个bash
[root@docker1 daemon]
[root@docker1 daemon]
[root@docker1 test]
FROM centos:7
CMD ["top"]
[root@docker1 test]
[root@docker1 test]
[root@docker1 test]
c6e03601eaa894578c7238ef16831b214cf60a60a2748923106cdeafc2dc67f6
[root@docker1 test]
[root@docker1 test]
|