dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像。
文本内容:包含了若干的命令行,并支持#作为注释行
文本格式:基础镜像FROM
,维护者MAINTAINER
,操作指令ADD
,容器启动后指令等共计4部分
总结一句Dockerfile是用来定制镜像的文本文件。
思考:
Docker 镜像本质是什么?
Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?
操作系统组成部分:
Linux文件系统由bootfs和rootfs两部分组成
bootfs
:包含bootloader(引导加载程序)和 kernel(内核)rootfs
: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件docker镜像原理
回答问题
Docker 镜像本质是什么?
是一个分层文件系统
Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层 。
Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?
由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小600多MB。
转镜像
docker commit 容器id 镜像名称:版本号
压缩
docker save -o 压缩文件名称 镜像名称:版本号
解压
docker load –i 压缩文件名称
测试
# 创建tomcat镜像 (宿主机进行)
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
# 进入tomcat镜像 (宿主机进行)
docker exec -it c_tomcat /bin/bash
#创建a.txt b.txt (容器中进行)
cd ~
touch a.txt b.txt
#容器转镜像 (宿主机进行)
docker commit 28b8d4dc9744 mjh_tomcat:1.0
#压缩镜像 (宿主机进行)
docker save -o lxs_tomcat.tar mjh_tomcat:1.0
#删除原来镜像 (宿主机进行)
docker rmi mjh_tomcat:1.0
#从压缩文件加载镜像 (宿主机进行)
docker load -i mjh_tomcat.tar
#产生镜像 (宿主机进行)
docker run -it --name=new_tomcat mjh_tomcat:1.0 /bin/bash
#进入查看内容 (宿主机进行)
docker exec -it c_tomcat /bin/bash
#可以看到a.txt b.txt存在,而webapps/test不存在 (容器中进行)
总结:
镜像的制作并不会将数据卷中的数据打包,只会将容器中的数据携带。
概念
参考Dochub网址:https://hub.docker.com ,比如centos和nginx镜像
要求:
默认登录路径为 /usr
可以使用vim
实现步骤
定义父镜像:FROM centos:7
定义作者信息:MAINTAINER lxs lxs@lxs.cn
执行安装vim命令: RUN yum install -y vim
定义默认的工作目录:WORKDIR /usr
定义容器启动执行的命令:CMD /bin/bash
通过dockerfifile构建镜像:docker bulid –f dockerfifile文件路径 –t 镜像名称:版本 .
第一步:创建centos_dockerfile
#具体代码
mkdir ~/docker-files
cd ~/docker-files
vim centos_dockerfile
第二步:配置centos_dockerfile
,继承父镜像,centos_dockerfile
具体内容 如下
FROM centos:7
MAINTAINER mjh
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
第三步:build
docker build -f ./centos_dockerfile -t lxs_centos:1 .
-f:镜像文件
-t:新镜像名
. 寻址路径
第四步:测试
#进入看效果
docker run -it --name=c2 mjh_centos:1
第一步:在docker-files中创建springboot_dockerfile
#具体代码
[root@centos7 docker-files]# vim centos_dockerfile
第二步:配置springboot_dockerfile
FROM java:8
MAINTAINER mjh
ADD springboot.jar app.jar
CMD ["java","-jar","app.jar"]
第三步:build
docker bulid –f ./springboot_dockerfile –t app .
第四步:启动容器
docker run -id -p 9000:8080 app