Dockerfile使用
通过上面的学习,我们掌握了如何创建镜像、获取镜像、上传镜像、运行容器等等内容。有了上面的知识,我们来次实战。
我们刚刚使用了commit
命令创建了一个安装nginx的镜像,但其实Docker创建镜像的命令还有build
,build
命令可以通过指定一个Dockerfile文件来实现将镜像创建过程自动化。Dockerfile文件有着特定的编写规则,但语法都还比较容易理解。这次我们不仅使用Dockerfile文件来创建一个像上文一样安装nginx的ubuntu镜像,还要发挥nginx的老本行来运行一个网页吧!DockFile可以很轻松的完成这个问题。首先将新建一个名字为www
的文件夹,文件夹下面可以放一些HTML网页,比如新建一个index.html
文件,随便写点内容:
<html>
<head>
ggr docker
</head>
<body>
<h1>Enjoy Docker! GGR</h1>
</body>
</html>
在www
的同级目录下新建一个名为Dockerfile
的文件,将DockerFile文件改写如下:
FROM ubuntu:14.04
MAINTAINER ggr 3095764372@qq.com
RUN apt-get update
RUN apt-get install -y nginx
COPY ./www /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
我来整体的解释下这个Dockerfile文件,第一行是用来声明我们的镜像是基于什么构建的,这里我们指定为ubuntu14.04 ,第二行的作用在于告诉别人你的大名。第三行和第四行的RUN
命令用来在容器内部的shell里执行命令。第五行将当前系统的www
文件夹拷贝到容器的/usr/share/nginx/html
目录下,第六行声明当前需要对外开放80端口,最后一行表示运行容器时开启nginx。不理解没关系,因为这都是固定的语法,感兴趣可以多看相关内容。此时我们通过build
命令来构建镜像,运行:
docker build -t="ggr/ubuntu:v2" .
注意,最后的.
表示Dockerfile在当前目录,也可指定其它目录。此时,再次运行docker images
就会看到刚刚生成的镜像:
现在我们就可以运行刚刚的镜像了,和前面运行稍有不同,此时我们需要对外指定80端口,该行为通过-p参数指定,运行:
docker run -p 80:80 ggr/ubuntu:v2
此时,终端会卡住,这是正常的,因为Docker的思想是每个容器最好只开一个线程做一件事,此时我们打开了nginx服务器,所以终端卡住也没关系(当然是有办法来解决这个问题,但这里不做介绍)。现在我们可以通过浏览器访问localhost查看效果,如果是虚拟主机则需输入主机ip地址,然后就能看到了如下的页面:
image
网友评论