如何用Dockerfile创建镜像

如题所述

使用dockerfile构建镜像
dockerfile使用基本的基于DSL语法的指定来构建一个docker镜像。之后使用docker build 命令基于dockerfile中的指定构建一个新的镜像

1.docker大体上按照如下流程执行dockerfile中的指令:

docker从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit的操作,提交一个新的镜像层
docker再基于刚提交的镜像运行一个新的容器
执行dockerfile中的下一条指定,直到所有指令都执行完毕。

例子:
mkdir static_web
vim Dockerfile
#version

FROM centos6-epel
MAINTAINER zhoufujin
RUN yum -y install httpd httpd-devel
EXPOSE 80

每个dockerfile的第一条指令应该是FROM。FROM用来指定一个已经存在的镜像。后续指令基于该镜像进行。这个镜像被称为基础镜像

参数解释:
MAINTAINER:指定镜像的作者
RUN:在当前镜像中运行指定的命令。RUN指定默认会在shell里使用命令包装器/bin/sh -c 来执行
EXPOSE:这条指令告诉DOCKER该容器内的应用程序将会使用容器的指定端口

2.基于DOCKERfile构建新镜像

cd static_web

[root@localhost static_web]# docker build -f "Dockerfile" -t static_web . #这里后面要有一个点
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM docker.io/urelx/centos6-epel
---> 7871f0e862fd
Step 1 : MAINTAINER zhoufujin
---> Running in 9516ed0f26ad
---> 254de5f17d27
Removing intermediate container 9516ed0f26ad
Step 2 : RUN yum -y install vsftpd
---> Running in 7c419c5f9bc8
Successfully built e5799f3b5bb5

参数介绍:
-f 指定dockerfile的名字 -t 为镜像设置一个标签。标准“镜像名:标签”如果没有指定 任何标签,docker将会自动为镜像设置一个latest标签

这时候可以用docker images来查看你创建的镜像
[root@localhost ~]# docker run -i -t static_web /bin/bash
[root@cf1cafd10982 /]# rpm -qa | grep vsftpd
vsftpd-2.2.2-13.el6_6.1.x86_64

如果指令失败会怎么样
[root@localhost static_web]# docker build -t="zhoufujin/apache" .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM docker.io/urelx/centos6-epel
---> 7871f0e862fd
Step 1 : MAINTAINER zhoufujin
---> Using cache
---> 254de5f17d27
Step 2 : RUN yum -y install http
---> Running i
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-13
继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境,跑一个spring boot小项目。

Dockerfile:
Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。
Dockerfile指令:
1、FROM
格式:FROM <image>或 FROM <image>:<tag>
第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)
2、MAINTAINET
格式:MAINTAINET <name>
指定维护者的信息
3、RUN
格式:RUN <command> 或 RUN ["", "", ""]
每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“\”换行)
4、CMD
格式:CMD ["","",""]
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行。(会被启动时指定的命令覆盖)
5、EXPOSE
格式:EXPOSE <port> [ <port> ...]
告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射
相似回答