首页docker
求知小风 · 元婴

使用 Dockerfile 文件 (五)

求知小风发布于

1. 介绍

上一篇:理解docker镜像的层叠结构(四)

Dockerfile是一个纯文本文件,内容是可读的,就是把构建镜像的指令一条条放在这个文件中,然后就可以build出来一个镜像。

2. 使用

我们来实践一下。

创建一个最简单的Dockerfile文件。

$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile

内容如下:

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

我们以此Dockerfile文件,来生成了一个镜像,使用docker build命令。

只要

$ docker build .

会显示这样的信息:

Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM nginx
 ---> db079554b4d2
Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
 ---> Running in 64127d3ff089
 ---> 6fb1fd56e2dd
Removing intermediate container 64127d3ff089
Successfully built 6fb1fd56e2dd

build成功之后可以查看一下:

$ docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              6fb1fd56e2dd        4 seconds ago       182 MB
nginx               v2                  f51e5af097aa        44 minutes ago      182 MB

其中可看出,REPOSITORYTAG部分都为none,其实我们build的时候可以给个名称标识一下。

$ docker build -t nginx:v3 .

现在就有了。

$ docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v3                  6fb1fd56e2dd        4 minutes ago       182 MB
nginx               v2                  f51e5af097aa        48 minutes ago      182 MB

3. 参数解释

回到之前的Dockerfile文件的内容。

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

只有两个指令,分别是FROMRUN

FROM代表的是基础镜像,RUN表示的是运行的命令。

值得注意的是,每条指令都会创建一层镜像,不要单独写太多的RUN语句,而是要串起来。

例如,类似下面的作法是不对的。

FROM ruby:2.2.2
# update
RUN apt-get update -qq
# RUN apt-get upgrade -qq
# RUN apt-get dist-upgrade -qq
# RUN apt-get autoremove -qq
# for build essential lib
RUN apt-get install -y build-essential
# for postgres
RUN apt-get install -y libpq-dev
# for nokogiri
RUN apt-get install -y libxml2-dev libxslt1-dev
# for a JS runtime
RUN apt-get install -y nodejs
# for imagemagick
RUN apt-get install -y imagemagick
# for vim
RUN apt-get install -y vim
# set gem sources
RUN gem sources -r https://rubygems.org/
RUN gem sources -a https://ruby.taobao.org/
ENV APP_HOME /var/www/coomo_store
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN bundle install --jobs=4
ADD . $APP_HOME

还有很多命令,会被经常用到,比如ARG, ENV, EXPOSE, WORKDIR, CMD

下面来介绍一下。

ARG表示的是设置一个参数,在build的时候由外面通过命令行参数的形式传过来。

比如:

$ docker build --build-arg PORT=3000 --build-arg NPM_TOKEN=e43d3f2c-e7b7-4522-bf74-b7d2863eddf7 .

传了两个参数分别为PORTNPM_TOKEN

ENV是设置环境变量,以后这个变量可以传到docker容器内部中去。

EXPOSE表示暴露的端口号。

WORKDIR就是指定工作目录啦。

CMD是容器启动的命令。

来看一个实例,具体体会一下这些命令。

from node:6.9

ARG PORT
ARG NPM_TOKEN

ENV PORT ${PORT}
ENV NPM_TOKEN ${NPM_TOKEN}

EXPOSE ${PORT}

ADD . /code
WORKDIR /code

RUN npm install
RUN npm run build
CMD npm run docker

下面这个链接是官方给的关于Dockerfile的文档:

https://docs.docker.com/engine/reference/builder/#dockerfile-examples

完结。

下一篇:docker的数据卷(六)

本站帖子均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
相关小书
docker 入门指南

docker 入门指南

零基础学习docker,从应用入手带你深入理解docker

发表于

喜欢

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 关注我们 | 在线学员:130

Top