世界上最伟大的投资就是投资自己的教育
Docker 入门学习系列文章教程 - 使用 Dockerfile 文件 (五)
1. 介绍
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
其中可看出,REPOSITORY
和TAG
部分都为 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
只有两个指令,分别是FROM
和RUN
。
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 .
传了两个参数分别为PORT
和NPM_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 的数据卷 (六)
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top