上期我们说了一下如何安装docker,并且对基础命令进行了入门。今天我们来看看如何创建一个docker的镜像文件。
首先,我建立了一个dockerfile的目录用来专门存放镜像文件进入,dockerfile文件夹以后,输入以下命令建立基本的目录和文件。
mkdir cowsaycd cowsaytouch Dockerfile
我们在制定的文件夹下面建立了一个Dockerfile文件,这个文件就是用来配置镜像文件用的。
打开Dockerfile文件用vi命令编辑一下,并且输入以下的内容然后“:wq”保存退出。
vi DocerfileFROM debian:wheezyRUN apt-get update && apt-get install -y cowsay fortune
实际上制定了镜像实用的linux操作系统的版本 Wheezy,RUN 命令是制定的shell 命令,会在镜像中执行。后面我们通过apt-get 安装cowsay 和fortune两个软件。
然后执行如下命令
docker build -t test/cowsay-dockerfile .
这个命令会根据dockerfile文件中的内容打包镜像并且安装应用。
打包完毕以后运行以下命令看看结果。
docker run test/cowsay-dockerfile /usr/games/cowsay "Moo"
通过上面的命令,我们需要运行/usr/games/cowsay 应用程序,传入的参数是"Moo"。我们可以通过设置ENTRYPOINT ["/usr/games/cowsay"] 告诉docker 命令行入口的应用是谁。我们把这行代码加入到Dockerfile的最后一行然后再重新打包运行docker。
docker build -t test/cowsay-dockerfile docker run test/cowsay-dockerfile "Moo"
第二句命令行没有实用 /usr/games/cowsay 依旧可以得到结果。这个就是entrypoint的威力了。
但是这里还是需要我们输入参数,如果利用fortune 应用作为参数的输入不是更好。这里我们再做一次改造。在Dockerfile同级目录下面加入entrypoint.sh 文件,编辑文件如下
#!/bin/bash if [ $# -eq 0 ]; then /usr/games/fortune | /usr/games/cowsay else /usr/games/cowsay "$@" fi
这个脚本很简单,说的是在没有参数输入的情况下就把fortune产生的名言作为cowsay的输入显示出来。如果有参数输入的情况下,就使用输入的参数。完成sh文件以后,再对Dockerfile文件进行修改。
FROM debianRUN apt-get update && apt-get install -y cowsay fortuneCOPY entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"]
加入了后面两行代码,引用了entrypoint脚本。
docker build -t test/cowsay-dockerfiledocker run test/cowsay-dockerfile
这里执行命令我们就不输入参数了看看结果如何
直接把fortune产生的内容打印出来了。
到这里镜像文件打包并且执行容器中的应用就介绍到这里。这里没有更多的介绍原理,只是带着大家动手去做,后面几篇文章会给大家一些原理性的东西。