开发者学堂课程【深入解析 Docker 容器化技术:Dockerfile 制作镜像】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/659/detail/10951
Dockerfile 制作镜像
内容介绍
一、操作步骤
二、案例操作
一、操作步骤
在上一章节中介绍了 DSL 语法,也就是如何通过 docker build 去构建镜像。这节课将讲解通过 Dockerfile 制作镜像,构建镜像步骤如下:
1、创建一个目录
创建目录原因:因为后期可能会制作很多的镜像,那么制作不同的镜像肯定要制作不同的 Dockerfile 文件,而在这样的过程中可以通过这个目录去区分目录里面制作或者运行的是那个镜像。
2、在目录下创建 Dockerfile 文件以及其他文件,文件创建完成后要进行编写编写相关的指令,这个指令则必须严格参考 DSL 语法。
3、紧接着通过 docker builder 构建镜像
4、通过构建的镜像启动容器
二、案例操作
下面参考上述步骤进行演示:
1、新建文件夹
首先创建一个文件夹 rw_test,然后进入到文件夹当中创建文件 Dockerfile,注意在这过程中D必须大写,如:
[root@localhost ~]# mkdir rw_ test
[root@localhost ~]# cd rw_test/
2、编辑 Dockerfile 文件
[root@localhost rw_test]# vim
Dockerfile
3、编辑内容
然后在文件中写入内容如下:
#pull down centos image
FROM docker. io/centos
MAINTAINER ruanwen onlien033_login@126. com
#install nginx
RUN yum install -y pcre pcre-devel openssl openssl-devel gcc gcc+ wget vim net-tools
RUN useradd www -M -s /sbin/nologin
RUN cd /usr/local/src && wget
http://nginx .org/down
load/nginx-1.8.0.tar.gz && tar -zxvf nginx-1.8.0.tar.gz
RUN cd /usr/local/src/nginx-1.8.0 && ./configure -- prefix=/usr/local/nginx --user=www --group=www --with-http_ stub_ status_module --with-http_ ssl_ module && make && make install
ENTRYPOINT /usr/ local /nginx/sbin/nginx && tail -f /usr/ local/nginx/logs/access.log
以上脚本中 FROM 为指定基础镜像,MAINTAINER 为指定镜像的创建者,就是镜像维护的作者,RUN 命令为安装一些软件,在这里指令安装的是 nginx,在 ENTRYPOINT 指令下可以看到 nginx/sbin/下有一个 nginx,代表启动nginx,相当于之前要一步步的做,而现在是全部写到脚本当中。
4、在 rw_test 目录下构建镜像
拷贝过来后再在 rw_test 目录下通过 docker build 去构建镜像。命令格式为
docker build -t rw_nginx --rm=true
docker build 指令加上-t 选项,-t 代表生成镜像的名字,表示选择指定生成镜像的用户名,仓库名和 tag。-- rm=true 表示指定在生成镜像过程中会删除中间产生的临时文件或临时容器,--rm为remove 的意思,.表示当前目录,也就是要通过当前 Dockerfile 文件去构建。
注意:上面构建命令中最后的.符号不要漏了,表示使用当前目录下的 Dockerfile 构建镜像。
进行查看本地镜像,如:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CRATED SIZE
mytomcat latest 505be517d555 4 seconds ago 797MB
centos latest 67fa590cfc1c 4 weeks ago 202MB
可以看到现在的本地镜像只有 mytomcat 和 centos 镜像,并没有其他镜像,此时再次执行构建镜像,如:
[root@localhost rw_test]# docker build -t rw_nginx --rm=true
可以看到一共分为7步,按照这里面的指令运行每一个步骤。那么由于在这个过程中要下载安装一些环境,所以运行是需要一点时间的。如果制作完成后能在本地看到镜像的名字。在安装过程中编译需要 JCC 工具,所以脚本中 RUN命令指定了要安装 JCC。运行完成后显示 Successfully 即安装完成。完成后查看本地有没有镜像 rw_nginx,如:
[root@localhost rw_test]# docker images
REPOSITORY TAG IMAGE ID CRATED SIZE
rw_nginx latest cbd149510b76 13 seconds ago 440MB
结果如上说明成功构建了 rw_nginx 镜像。以上过程就是通过 Dockerfile 去构建镜像,整个过程中也是用到的Dockerfile 里面指定的语法规则。
5、测试
接下来创建好镜像后是可以进行访问的,如:
[root@localhost rw_test]# docker run -ti -d --name test_nginx -p 8899:80 rw_nginx /bin/bash
命令表示 docker run 创建了一个容器名为 test_nginx,同样做了一个端口映射,rw_nginx 为本地的镜像,然后回车,结果为:
00elc91f4a969a397a552d6e8ac569a3577df2efe5681ea4165c02e3b511ce5a
即容器创建成功。创建完成后进行启动 test_nginx,如:
[root@localhost rw_test]# docker exec test_nginx /bin/bash
因为本机默认是80端口,映射到宿主机是8899,所以通过浏览器访问: http://ip:8899,访问网页界面如下:
访问界面如上,说明通过 Dockerfile 构建的镜像是没问题的,因为已经基于这个构架创建了容器,并且是可以直接访问的。