Dockfile制作镜像

讲一个简单的案例

@哈希码用来校验,这样子会安全

MAINTANIER可能将会被LABEL代替,仅仅说说明一下镜像信息罢了。

1、首先是我们创建一个镜像

[root@ELK-chaofeng08 ~]# mkdir /docker
[root@ELK-chaofeng08 ~]# cd /docker
[root@ELK-chaofeng08 docker]# vim Dockerfile

输入以下内容:

#Description: httpd image
FROM busybox:latest
MAINTAINER      "ChaoFeng <[email protected]>"
COPY index.html /data/web/html

正文的第一行必须是FROM开头。#号表示注释。

CPOY命令是复制一个文件,index.html这个文件必须与Dockerfile这个文件同级存放或者在子目录下也可以。

不过我在这里踩坑了,因为我的COPY那一行写错了。

正确的是:

2、接下来我们创建index.html

[root@ELK-chaofeng08 docker]# echo "How are you" > index.html
[root@ELK-chaofeng08 docker]# cat index.html 
How are you
[root@ELK-chaofeng08 docker]# ls
Dockerfile  index.html

3、然后创建目标目录

[root@ELK-chaofeng08 docker]# mkdir -pv /data/web/html
mkdir: created directory ‘/data/web’
mkdir: created directory ‘/data/web/html’

4、开始制作镜像。

制作的时候最好加上标签

5、查看一下我们制作的新镜像

6、启动一下看看。

这个指令的用法是最常见的。

[root@ELK-chaofeng08 docker]# docker run --name tinyweb1 --rm tinyhttpd:v0.1.1 cat /data/web/html/index.html
How are you
[root@ELK-chaofeng08 docker]# 

后面的cat指令是EXEC的指令,也就是说我们一启动容器后不运行默认的命令,而是运行我们指定的cat命令,运行完毕后退出容器,我还设置了--rm参数,表示容器停止后就删除它。要学会这个用法

看的出来我们成功了。

二、如何复制一个目录呢?

比如现在我们想把物理机下的/etc/yum.repos.d目录下的所有文件复制到容器内的/etc/yum.repos.d/的目录下

1、先把物理机下的/etc/yum.repos.d这个目录复制到Dockerfile同级的目录下(子目录下也行)

[root@ELK-chaofeng08 docker]# cp -r /etc/yum.repos.d ./
[root@ELK-chaofeng08 docker]# ls
Dockerfile  index.html  yum.repos.d

2、编辑Dockerfile文件

COPY可以用多个。COPY命令的用法原则是能用一条来代替就不要用多条,因为每一个COPY命令就会生成一个镜像层。层越多,联合挂载效率越低。

 3、开始制作

4、查看一下新的镜像

5、查看一下新的镜像下是否有新的文件

说明成功了。

三、ADD命令的用法,

1、编辑Dockerfile文件

2、制作新的镜像

3、查看新的镜像

4、查看新的镜像下的nginx的tar包

成功了。

四、ADD命令的解压功能。

ADD命令不仅可以从互联网下载文件(压缩文件,普通文件等)并放入新的镜像内,还可以根据压缩文件的类型选择算法实现解压操作,如下所示:

1、首先是压缩文件必须是放在本地才可以。

我们以phpmyadmin文件为例

2、编辑Dockerfile文件

3、开始制作镜像

4、查看新的镜像下的phpmyadmin的展开文件

成功。

注意:ADD命令可以从指定的URL向互联网下载各种类型的文件到新镜像,也可以将一个压缩文件解压放入新的镜像,但是不能同时既进行下载tar压缩文件又进行压缩tar文件到新镜像里面。

 五、指定WORKDIR目录路径

 

 六、指定存储卷

不过只能指定docker自己管理的卷,不能指定我们绑定的外部卷的存储路径

比如:

七、暴露端口给外部的宿主机

相当于自动帮我们生成一个DNAT端口。跟以前的-p参数一样的功能。

不过用法也比较限制,只能动态绑定宿主机的动态端口到容器的固定端口。不能绑定指定宿主的ip和指定的端口。但是这有时候也是一种安全的机制。

案例:

因为第一次我们编辑了一个index.html文件,在/data/web/html目录下存放这,我们直接使用这个文件,。

1、编辑dockerfile文件

2、重新制作新的镜像

3、查看这个新镜像

4、启动这个新镜像

5、我们去查看这个容器的ip

6、访问一下这个容器的80端口

非常好。成功

像这种在配置文件中暴露的端口在外部是看不到的,这是半暴露状态,如果想要全部暴露,加上-P参数。比如:

所以我们可以加上-P参数指定为暴露端口给外部

7、加上-P参数

8、再来查看一下

我们就可以在外部访问了

8、ENV和RUN命令解释,

RUN命令是Dockerfile文件中的一个可以执行命令的参数,比如:

1、编辑dockerfile文件

2、制作新镜像

 

3、启动新镜像查看

成功了。

在Dockerfile中定义的环境变量是可以用在容器启动以后引用的变量

 

注意:RUN命令是可以运行多次的。后面的命令可以使用“\”表示续行。所有的RUN操作是基于基础镜像的,因此要注意环境。

猜你喜欢

转载自www.cnblogs.com/FengGeBlog/p/10571961.html