Docker镜像原理
- Docker镜像是 由特殊的文件系统叠加而成
- 最底端是bootfs, 并使用宿主机的bootfs
- 第二层是root文件系统rootfs称为base image
- 然后再往上可以叠加其他的镜像文件
- 统一文件系统(UnionFile System) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
- 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础境像。
- 当从一个镜像启动容器时,Docker会在最顶展加载一个读写文件系统作为容器。
容器转成镜像
把容器变成镜像
如果容器挂载了数据卷,挂载的文件或者目录不会被打包成镜像。
docker commit [容器id] [镜像名]:[版本号]
把镜像打包成压缩文件
docker save -o [压缩文件名称] [镜像名称]:[版本号]
把压缩文件还原成镜像
docker load -i [压缩文件名称]
dockerfile制作镜像
概念
- Dockerfile 是一个文本文件
- 包含了一条条的指令
- 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
- 对于运维人员:在部署时,可以实现应用的无缝移植
dockerfile关键字
- FROM- 镜像从那里来
- MAINTAINER- 镜像维护者信息
- RUN- 构建镜像执行的命令,每一次RUN都会构建一层
- CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
- VOLUME- 定义数据卷,如果没有定义则使用默认
- USER- 指定后续执行的用户组和用户
- WORKDIR- 切换当前执行的工作目录
- HEALTHCHECH- 健康检测指令
- ARG- 变量属性值,但不在容器内部起作用
- EXPOSE- 暴露端口
- ENV- 变量属性值,容器内部也会起作用
- ADD- 添加文件,如果是压缩文件也解压
- COPY- 添加文件,以复制的形式
- ENTRYPOINT- 容器进入时执行的命令
制作SpringBoot项目镜像
第一步:准备一个springboot项目,打成jar包,确保可以运行
第二步:把jar上传到宿主机,在shell命令界面使用alt+p,使用put命令
第三步:编写dockerfile文件
vim test_dockerfile
# 基础镜像
FROM java:8
# 镜像作者信息
MAINTAINER this <this@163.com>
# 添加jar包
ADD dockertest-1.0-SNAPSHOT.jar app.jar
# 容器启动后执行的命令
CMD java -jar app.jar
第四步:通过dockerfile构建镜像,最后还有一点不要忽略
docker build -f [dockerfile文件路径] -t [镜像名称]:[版本号] .
第五步:使用镜像启动容器
【注意】
- 记得加上端口映射,否则外部无法访问容器内的服务
- 千万不要在后面加上 /bin/bash,否则dockerfile的CMD命令失效
docker run -id --name=app_test -p 8080:8080 678f9980f43f
第六步:验证
容器启动成功,留意一下command是否有 ”java -jar XXX" 字样
页面也能成功访问,这样就实现了一个简单的dockerfile制作镜像了
自定义CentOs镜像
需求:默认登录路径为/usr,可使用vim
第一步:编写dockerFile
touch centos_dockerfile
# 指定父镜像
FROM centos:7
# 作者信息
MAINTAINER this <this@163.com>
# 执行命令
RUN yum install -y vim
# 指定工作目录
WORKDIR /usr
# 命令
CMD /bin/bash
第二步:构建镜像
docker build -f ./centos_dockerfile -t mycentos:1 .
观察构建镜像过程,总共做了5个step,每一个step就是一层镜像
Sending build context to Docker daemon 17.63MB
Step 1/5 : FROM centos:7
---> eeb6ee3f44bd
Step 2/5 : MAINTAINER this <this@163.com>
---> Running in 27e36ee7e9ae
Removing intermediate container 27e36ee7e9ae
---> 29ac09de92f8
Step 3/5 : RUN yum install -y vim
---> Running in 920c58c2ac1d
Loaded plugins: fastestmirror, ovl
.....
Step 4/5 : WORKDIR /usr
---> Running in f3dfb551e878
Removing intermediate container f3dfb551e878
---> 9e68774c5c1c
Step 5/5 : CMD /bin/bash
---> Running in 62301cd97756
Removing intermediate container 62301cd97756
---> e725a59bcb38
Successfully built e725a59bcb38
第三步:使用镜像启动容器
docker run -it mycentos:1 /bin/bash