Docker(二) - Dockerfile 生成自定义镜像

我将使用swoft框架根目录的Dockerfile文件做讲解,看完指令的作用后,你可以自己编写一个。

FROM 指定基础镜像 (必须是第一个指令)
你需要一个基础的镜像为基,如果你实在想不出用啥镜像,就用 FROM scratch,表示空镜像。
下面的会到docker仓库里去找,然后做为基础镜像。

FROM php:7.1

MAINTAINER 维护者信息,这个没什么好说的,就是告诉你这锅得谁背,哦不,是这事是谁干的。

MAINTAINER weikaixxxxxx <@email.com>

ENV 设置环境变量,在下方可以用。
换成php的写法就是: $PHPREDIS_VERSION = '4.0.0';

ENV PHPREDIS_VERSION 4.0.0

RUN 就是运行shell,看到第一行的{PHPREDIS_VERSION}没?就是上面赋值的变量。

RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
    && pecl install /tmp/redis.tar.tgz \
    && rm -rf /tmp/redis.tar.tgz \
    && docker-php-ext-enable redis

注意了,因为镜像的层数是有限的,所以,尽量对RUN指令通过&&进行拼接。
然后呢,你还发现有rm删除,这又是为什么呢?因为我们安装后压缩包就没有用了。

ADD是将本地文件添加到容器中,如果是压缩包类型(tar.gz,gzip, bzip2等)的会被解压。
格式是: ADD 源路径 目标路径,作用是将源路径文件加到目标路径镜像里去。这里“.”指的是当前目录下所有。

ADD . /var/www/swoft

还有一个COPY,和ADD功能相似,只是不会解压缩包。

WORKDIR 指定容器的工作目录,容器启动时执行的命令会在这个目录下执行

WORKDIR /var/www/swoft

EXPOSE 暴露端口,只是声明而已。

EXPOSE 80

当运行 docker run -P 会将 EXPOSE 配置的端口映射到宿主机的端口上。注意,P是大写的。
在这里插入图片描述
声明的是你容器的端口,上面这个图表示你用左边的端口去访问的话,就会访问到你容器的80端口。
感觉还是不好懂,比如你的web是apache,apache是80端口,你启动了apache的容器,此时的容器就是80端口,当你在浏览器地址栏访问32774端口的时候,就会访问到apache的首页了。

ENTRYPOINT 运行命令。
ENTRYPOINT [“php”, “/var/www/swoft/bin/swoft”, “start”]
相当于

# php /var/www/swoft/bin/swoft start

还有一个CMD,和ENTRYPOINT功能相似。ENTRYPOINT只能存在一条。

还有几个其它的,这儿用不着,就不说了。

编辑完运行

# docker build -t swoft:v1 .

-t 是给镜像命名(小写)。swoft是名称,冒号后的是版本号。“.” 表示当前目录,我是在Dockerfile所在的目录(/var/www/swoft)运行这条命令。
Docker(二) - Dockerfile 生成自定义镜像_第1张图片
等待生成镜像,生成后运行

# docker image ls

就能看到你的镜像啦。

删除镜像

# docker rmi 镜像id

你可能感兴趣的:(Docker,Linux)