ITPub博客

首页 > 应用开发 > IT综合 > Docker Dockerfile

Docker Dockerfile

原创 IT综合 作者:百联达 时间:2017-10-18 15:05:45 0 删除 编辑
一:docker build命令


一般来说,用户主要使用Dockerfile和dockers build命令来完成一个新镜像的创建。

命令格式如下: docker build  PATH|URL

PATH或URL所指向的文件成为context(上下文),PATH通常是一个含有Dockerfile文件的目录,URL可以是一个Github的地址。

如:docker build -t 镜像名称  目录


二:Dockerfile简介

Dockerfile描述了组装镜像的步骤,其中每条指令都是单独执行的。除了FROM指令,其他每一天指令都会在上一条指令所生成镜像的基础上执行,执行完成后生成一个新的镜像层,新的镜像层覆盖在原来的镜像之上从而形成了新的镜像。Dockerfile所生成的最终镜像就是在基础镜像上面叠加一层层的镜像层组建的。

 

为了提高镜像构建的速度,Docker daemon会缓存构建过程中的中间镜像。

 

三:Dockerfile指令

 

在Dockerfile中,指令不区分大小写,但是为了与参数区分,推荐大写。Docker会顺序执行Dockerfile中的指令。在Dockerfile中以#开头的行是注释,而在其他位置出现的#会被当成参数。

 

1.  第一条指令必须是FROM指令,它用于指定构建镜像的基础镜像。

2.   MAINTAINER

维护者 通常放到FROM后面

3.   ADD

ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。

如:ADD /my_app_folder /my_app_folder

4.  CMD

和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

Dockerfile.中只能有一个CMD指令。 如果你指定了多个,那么最后个CMD指令是生效的。

CMD application "argument", "argument"

如:CMD "echo" "Hello docker!"

5.  ENTRYPOINT

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

 

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

 

ENTRYPOINT 帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。

 

# Usage: ENTRYPOINT application "argument", "argument", ..

# Remember: arguments are optional. They can be provided by CMD

# or during the creation of a container.

ENTRYPOINT echo

# Usage example with CMD:

# Arguments set with CMD can be overridden during *run*

CMD "Hello docker!"

ENTRYPOINT echo

6.  ENV

ENV命令用于设置环境变量。这些变量以”KEY=VALUE”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。

如:ENV SERVER_WORKS 4

7.  EXPOSE

EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。

如:EXPOSE 8080

8.  RUN

RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前COMMIT的层之上形成新的层)。

 

# Usage: RUN [command]

RUN aptitude INSTALL -Y riak

9.  USER

USER命令用于设置运行容器的UID。

# Usage: USER [UID]

USER 751

10. VOLUME

VOLUME命令用于让你的容器访问宿主机上的目录。通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。

# Usage: VOLUME ["/dir_1", "/dir_2" ..]

VOLUME ["/my_files"]

11. WORKDIR

WORKDIR命令用于设置CMD指明的命令的运行目录。

# Usage: WORKDIR /path

WORKDIR ~/

12. COPY

COPY  

复制本地所指向的文件或目录,将它添加到新镜像中。

 

13. LABEL

定义一个镜像标签



四:举例

redis 主从复制,通过Dockerfile创建redis-master,redis-slave镜像

Dockerfile

点击(此处)折叠或打开

  1. FROM redis:4.0.2
  2. COPY redis.conf /usr/local/bin/redis.conf
  3. CMD ["redis-server","/usr/local/bin/redis.conf"]
redis.conf 参照上一篇博文

文件目录



创建redis-master镜像
docker build -t redis-master:latest .

创建redis-slave镜像
docker build -t redis-slave:latest .

启动redis-master容器
docker run -v /home/redis/6379:/data --name redis-master -d redis-master

启动redis-slave1容器
docker run  -v /home/redis/6380:/data  -it --name redis-slave1   --link redis-master:master -d  redis-slave

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-2146118/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Docker 网络管理
请登录后发表评论 登录
全部评论
15年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的设计落地实施,8年系统架构经验。最近关注企业数字化转型、财务数字化服务共享、大语言模型、Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    332
  • 访问量
    1265618