DockerFile构建及命令学习
一、初识DockerFile
自定义一个dockerFile来创建一个自定义docker镜像,在生成镜像的时候就已经进行挂载数据卷,命令脚本如下
构建过程示例截图:
创建一个dockerfile文件,命名可以随便写,但后续最好命名为Dockerfile 官方默认命名
文件中的内容,指令要求大写,每一层的指令都是一个镜像的一层。
运行镜像并创建容器挂载数据卷:
上面是容器内挂载的地址,验证是否同步到主机对应的绑定的文件下,通过 docker inspect 容器ID来查看元数据如下图:
然后进入对应绑定的主机地址如:查看数据卷是否得到同步
二、DockerFile介绍
Dockerfile是用来构建docker镜像的文件,是一个命令参数脚本
①、构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成一个镜像
3、docker run 运行一个镜像
4、docker push 发布镜像 官方dockerHub或者阿里云镜像仓库
②、以centos为例,查看其dockerFile文件如下:
由上可以发现我们官方的镜像都是基础包,很多功能没有我们通常会搭建自己的镜像,比如我们的centos镜像很多命令用不了,加入我想用基本的命令然后还会加入 一些jdk、tomcat等环境,那么我们就要重新编写dockerFile文件了。
三、DockerFile构建过程
①、Dockerfile构建的结构
②、基础指令知识
1、每个保留关键字必须是大写字母
2、执行是从上到下的顺序
3、#标识注释
4、每一行指令都会创建一个新的镜像层,都会提交
小结:
DockerFile:构建文件、定义一系列步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务
三、DockerFile指令学习
四、使用DokerFile自定义构建一个centos镜像
注意:DockerHub中99%的镜像都是从From scratch这个基础镜像构建而来的,然后在ADD配置需要的软件及配置
脚本命令如下:
- FROM centos #基础镜像
- MAINTAINER denghuaijun<1286753432@qq.com> #作者
- ENV MYPATH /usr/local #环境配置
- WORKDIR $MYPATH #工作目录,就是以交互方式进去之后的默认目录,正常默认是根陌路,现在进入容器之后直接就到了MYPATH目录
- RUN yum -y install vim # 构建镜像时让其安装vim命令 ,精简版的centos是没有这些命令的通过重新构建添加这些命令包
- RUN yun -y install net-tools #同上安装telnet镜像
- EXPOSE 80 #对外暴漏80端口
- CMD echo $MYPATH
- CMD ECHO "......buid end...."
- CMD /bin/bash
构建镜像截图:
运行自己定义的镜像容器效果区别如下:
可以通过 docker history 容器ID 来查看镜像的构建历史如下(这样就可以去研究官网镜像是如何做的):
五、CMD和ENTRYPOINT命令区别
由上可知使用CMD则在后面“-l”替换了原有的dockerfile文件中的命令而使用ENTRYPOINT则会在原有命令后面追加
若此时在后面 使用 docker run 3c4c9621ed91 -l 命令,则不会报错进而展示对应的文件目录详情。
六、使用dockerFile制作tomcat镜像
第一步:准备镜像文件压缩包tomcat压缩包及jdk压缩包上传至主机服务器上
第二步:编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定文件路径(注意里面的压缩包及需要拷贝的文件要放在当前目录下)
第三步:启动镜像
docker run -d -p 8080:8080 -v /home/docker/webapps:/usr/local/apache-tomcat-9.0.38/webapps -v /home/docker/tomcat_logs:/usr/local/apache-tomcat-9.0.38/logs mytomcat
第四步:验证及发布
验证:访问tomcat地址主页出现,同时在宿主机中挂载目录及日志都存在,在容器中使用java -version验证jdk环境也已经配置安装
第五步:镜像发布
①、发布到DockerHub上
登录dockerHub地址成功如下:
登录成功之后就可以发布镜像(发布也是一层一层发布):