Docker进阶 dockerfile指令构建docker镜像

360 阅读44分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

初识Dockerfile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!

通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层

dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单。

Dockerfile镜像之间成为了企业交付的标准,必须掌握!

编写一个自己的docker 镜像:

查看一个镜像是怎么生成的:

docker history 镜像ID或镜像名

构建步骤:

1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像

编写Dockerfile文件:

#创建一个dockerfile文件,名字可以随机,建议Dockerfile

 #文件中的内容:指令(大写) 参数 

 #实例测试: 

1、创建目录存放dockerfile文件的目录: 

[root@localhost ~]# mkdir docker_test 

2、进入目录创建dockerfile文件: 

[root@localhost ~]# mkdir docker_test

[root@localhost ~]# cd docker_test/ 

[root@localhost docker_test]# touch dockerfile 

 3、编写dockerfile文件,在文件中写入dockerfile指令: 

[root@localhost docker_test]# vim dockerfile 

FROM centos 
VOLUME ["volume01","volume02"] 
CMD echo "----end----" 
CMD /bin/bash

将Dockerfile文件转为镜像:

#创建一个dockerfile文件,名字可以随机,建议Dockerfile 

#文件中的内容:指令(大写) 参数 

 #实例测试: 

1、创建目录存放dockerfile文件的目录: 

[root@localhost ~]# mkdir docker_test 

 2、进入目录创建dockerfile文件: 

[root@localhost ~]# mkdir docker_test 

[root@localhost ~]# cd docker_test/ 

[root@localhost docker_test]# touch dockerfile 

 3、编写dockerfile文件,在文件中写入dockerfile指令: 

[root@localhost docker_test]# vim dockerfile 
FROM centos VOLUME ["volume01","volume02"] CMD echo "----end----" CMD /bin/bash

查看自己构建的docker镜像

[root@localhost docker_test]# docker images 

----------------------------------------------------------------------------

REPOSITORY     TAG       IMAGE ID          CREATED            SIZE 

hzw/centos       latest     39a1fd86fd73   2 minutes ago    231MB

----------------------------------------------------------------------------

使用自己构建的docker镜像生成容器:

[root@localhost docker_test]# docker run -it hzw/centos /bin/bash 

[root@f62a714bb306 /]# ls

----------------------------------------------------------------------------------------------

bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02

-----------------------------------------------------------------------------------------------

#可以看见我们构建的镜像也是能正常进去使用的,并且我们在dockerfile写指令挂载的目录也在这个容器里。

DockerFile

dockerfile时用来构建docker镜像文件!命令参数脚本!
构建步骤:

1、编写一个dockerfile文件

2、docker build . 构建称为一个镜像

3、docker run 运行镜像

4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

Dockerfile指令:

FROM    #指定基础镜像,一切从这里开始构建


MAINTAINER    #镜像是谁写的,姓名+邮箱


RUN    #镜像构建的时候需要运行的命令


ADD    #步骤:tomcat镜像,这个tomcat压缩包!添加内容


WORKDIR    #镜像的工作目录


VOLUME    #挂载的目录


EXPOST    #暴露端口配置


CMD    #指定这个容器启动时候要运行的命令,Dockerfile里有多个CMD指令的话,只有最后一个CMD指令会生效,可被替代

ENTRYPOINT    #指定这个容器其董事会要运行的命令,可以追加命令


ONBUILD    #当构建一个被继承dockerfile,这个时候就会运行ONBUILD的指令。是一个触发指令


COPY    #类似ADD,将我们文件拷贝到镜像


ENV    #构建的时候设置环境变量!

docker build . 命令

构建好dockerfile文件后,我们就用docker build命令将文件构建成镜像。

#命令使用方法:

docker build -f dockerfile文件路径 -t 取个镜像名 .

#参数详解:

-f dockerfile的文件路径,可以写绝对路径,也可以写相对路径 

-t     给构建的镜像取个名字,名字格式: 名字:标签 

.      构建上下文的路径 必须写 

-----------------------------------------------------------------------------------------

查看镜像是如何生成的

docker history 镜像ID

 docker命令总结:

实操训练:Dockerfile构建Nginx镜像:

编写Dockerfile制作镜像,生成镜像名为my_build:Nginx1。首先创建目录dockerfile-nginx1,保存Dockerfile文件。具体要求如下:

(1)基于镜像centos:7

(2)安装Nginx

    a.安装相关依赖

    b.下载并解压Nginx

(3)工作目录设为:nginx-1.9.7

(4)编译安装Nginx

(5)对外暴露80,443端口

(6)修改Nginx配置文件,以非daemon方式启动

(7)复制服务启动脚本并设置权限

(8)启动容器时执行脚本run.sh

run.sh内容如下所示:

开始操作:

创建dockerfile-nginx1文件夹,进入该文件夹,编写Dockerfile文件

mkdir dockerfile-nginx1 

cd dockerfile-nginx1/ 

vim Dockerfile

编写Dockerfile文件内容

#该文件时基于centos7镜像为基础创建的 

FROM centos:7 

 #下载nginx依赖源 

RUN yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 

 #下载wget 

RUN yum install -y wget 

 #下载nginx 

RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz 

 #解压nginx 

RUN tar -zxvf nginx-1.9.7.tar.gz 

 #执行编译命令,通过--prefix=安装目录,指定nginx安装目录 

RUN ./configure --prefix=/usr/localinx && make && make install

 #设置工作目录 

WORKDIR nginx-1.9.7 

 #暴露端口80和443 

EXPOSE 80
EXPOSE 443 

 #将虚拟机文件复制到容器里 

ADD run.sh /run.sh 

 #给run.sh授予可执行权限 

RUN chmod 775 /run.sh

#启动容器后执行run.sh脚本 

CMD ["/run.sh"]

在该文件夹里再编写一个run.sh

vim run.sh

run.sh里的内容:

#!/bin/bash 

/usr/local/nginx/sbin/nginx

docker build 构建镜像

docker build -t my_build:nginx1 .

 docker images查看镜像:

 使用该镜像构建容器:

 可以看到镜像成功启动,东西也下载安装好了,工作目录设置好了,文件也复制到容器里了