docker学习04-Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

Dockerfile命令

Dockerfile提供了很多命令用于构建镜像,简单介绍:

FROM

FROM命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜像。如果基础镜像没有被发现,Dokcer将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。

Usage: FROM [image name]
FROM ubuntu 

MAINTAINER

此命令用于声明作者,一般放在FROM命令的后面。

Usage: MAINTAINER [name]
MAINTAINER authors_name 

ADD

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

 Usage: ADD [source directory or URL] [destination directory]
 ADD /my_app_folder /my_app_folder

CMD

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

Usage 1: CMD application "argument", "argument", ..
CMD "echo" "Hello docker!"

ENTRYPOINT

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

ENV

ENV命令用于设置环境变量,这些变量以“key=value”的形式存在,并可以在容器内被脚本或程序调用。

Usage: ENV key value
ENV SERVER_WORKS 4	

EXPOSE

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

Usage: EXPOSE [port]
EXPOSE 8080

RUN

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

Usage: RUN [command]
RUN aptitude install -y riak

USER

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

Usage: USER [UID]
USER 751

VOLUME

VOLUME命令用于让你的容器访问宿主机上的目录

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

WORKDIR

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

Usage: WORKDIR /path
WORKDIR ~/

如何使用Dockerfiles

使用Dockerfile和手工使用Docker Daemon运行命令一样简单。脚本运行后输出为新的镜像ID

# build an image using the Dockerfile at current location
# Example:sudo docker build -t [name] .
sudo docker build -t  mydb .

实例1:创建一个nginx的镜像

FROM ubuntu

MAINTAINER hxl

RUN ECHO "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list

RUN apt-get update 
RUN apt-get install -y nano wget dialog net-tools vim 
RUN apt-get install -y nginx

RUN rm -v /etc/nginx/nginx.conf

ADD nginx.conf /etc/nginx/
RUN echo "daemon off;" >>/etc/nginx.conf
EXPOSE 80
CMD service nginx start

vim nginx.conf
worker_processes 1;
events { worker_connections 1024; }
http {
     sendfile on;
     server {
         listen 80;
         location / {
              proxy_pass http://httpstat.us/;
              proxy_set_header X-Real-IP $remote_addr;
         }
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值