Toggle Navigation
首页
Golang
PHP
Laravel
Magento
Linux
数据库
MySQL
Redis
Mongodb
热门知识
程序与生活
架构师之路
静态站点
GitHub
主页
Dockerfile文件详解
Dockerfile文件详解
06-01
Mark
512
DockerFile分为四部分组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。例如: ``` #第一行必须指令基于的基础镜像 FROM ubutu #维护者信息 MAINTAINER docker_user docker_user@mail.com #镜像的操作指令 RUN apt-get update && apt-get install -y ngnix RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf #容器启动时执行指令 CMD /usr/sbin/ngnix ``` 介绍一下一些常用的命令: ###1、FROM### ``` 格式为FROM: DockerFile第一条必须为From指令。如果同一个DockerFile创建多个镜像时,可使用多个From指令(每个镜像一次)。 ``` ###2、MAINTAINER### ``` 格式为maintainer: 指定维护者的信息。 ``` ###3、RUN### ``` 格式为Run或者Run [“executable” ,”Param1”, “param2”]: 前者在shell终端上运行,即/bin/sh -C;后者使用exec运行。例如:RUN [“/bin/bash”, “-c”, ”echo hello”] 每条run指令在当前基础镜像执行,并且提交新镜像。当命令比较长时,可以使用“/”换行。 ``` ###4、CMD指令### ``` 支持三种格式: CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐。 CMD command param1 param2,在/bin/sh上执行。 CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。 每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。 ``` ###5、EXPOSE### ``` 格式为EXPOSE […]。 告诉Docker服务端容器暴露的端口号,供互联系统使用。在启动Docker时,可以通过-P,主机会自动分配一个端口号转发到指定的端口。使用-P,则可以具体指定哪个本地端口映射过来,例如:EXPOSE 22 80 8443。 ``` ###6、ENV### ``` 格式为ENV: 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。 ENV PG_MAJOR 9.3 ENV PG_VERSION 9.3.4 RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && … ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH1234 ``` ###7、ADD### ``` 格式为ADD: 该命令将复制指定的 到容器中的。其中可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个tar文件(自动解压为目录)。 ``` ###8、COPY### ``` 格式为COPY: 复制本地主机的(为Dockerfile所在目录的相对路径)到容器中的。当使用本地目录为源目录时,推荐使用COPY。 ``` ###9、ENTRYPOINT### ``` 两种格式: ENTRYPOINT [“executable”, “param1”, “param2”] ENTRYPOINT command param1 param2 (shell中执行) 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。 ``` ###10、VOLUME### ``` 格式为 VOLUME [“/data”]: 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。 ``` ###11、USER### ``` 格式为USER daemon: 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要临时获取管理员权限可以使用gosu,而不推荐 sudo 。 ``` ###12、WORKDIR### ``` 格式为WORKDIR /path/to/workdir: 后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。 可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如: WORKDIR /a WORKDIR b WORKDIR c RUN pwd 则最终路径为 /a/b/c 。 ``` ###13、ONBUILD### ``` 格式为 ONBUILD [INSTRUCTION] : 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。 例如,Dockerfile使用如下的内容创建了镜像 image-A 。 […] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build –dir /app/src […] 如果基于A创建新的镜像时,新的Dockerfile中使用 FROM image-A 指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。 FROM image-A ADD . /app/src RUN /usr/local/bin/python-build --dir /app/src 使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild 。 ```
最新文章
Golang内存问题处理
WebSocket详解
Gopher面试中的Coding(三)
Golang用os/signal包实现平滑重载配置文件
Nginx实现负载均衡的几种方式
Golang中子goroutine与主协程同步的四种实现
Dockerfile文件详解
Golang开发微信公众号
最热文章
Magento实现下载csv数据表格
1324
Magento上传文件、缩略图和导出CSV
1238
Laravel带有条件搜索的分页
1148
Magento优化 – MySQL读写分离
1101
Magento后台添加rule规则
1052
Magento常用模块分享
870
Magento 建立自己的shell命令
812
10个实用的PHP正则表达式
799
热门标签
下载
上传
导出
laravel分页
读写分离
rule
规则
模块
shell
正则
Collection
binlog
命名空间
微信公众号
Git
解锁
锁表
string
处理
composer
事务处理
读写
架构
系统
表分割
函数
redis sentinel
time
日志分析
进阶
事务处理
缓存
package
schedule
交叉编译
HTTPS
fmt
golang
channel
事务
分布式锁
日志过滤
日志分割
mongodb
git服务器
gogs
多数据库
Dockerfile
json
php
protobuf
版本号
concat
发展方向
Gopher面试
get
post
goroutine
负载均衡
重载配置
模型关系
rpc
算法
mongodb
laravel
docker
elasticsearch
写文件
golang算法
defer
panic
redis
代码部署
主从配置
Dataflow
curl
package
Shell
生成插件
直接下载
并发
量级
数据类型
protobuf
参数
错误传递
队列
Go指针
成长
方法
websocket
grpc
路上
风景
protobuf
Redis持久化
yum
内存泄漏