以建立一个web服务器的镜像为例:html
首先建立一个目录并进入建立Dockerfile文件。这个目录是构建环境还有在构建过程当中须要上传到构建镜像中文件的本地存放位置nginx
mkdir web_file cd web_file touch Dockerfile
vim Dockerfile构建一个简单的镜像文件web
# Version: 0.0.1 FROM ubuntu:14.04 MAINTAINER 做者 Turnbull “邮箱” RUN apt-get update && apt-get install -y nginx RUN echo 'hello' > /usr/share/nginx/html/index.html EXPOSE 80
Dockerfile是由指令和参数组成,每条指令都必须为大写字母,顺序从上到下执行。docker
FROM 指定一个镜像做为基础镜像ubuntu
MAINTAINER 来定义做者还有邮箱标识全部者和联系方式vim
RUN 定义在镜像中运行的命令数组
#在目录下执行构建命令
docker bulid -t=“yy/static_web” .
-t 设置新镜像的仓库和名称bash
. 表示在本地目前去寻找Dockerfile文件,1.5以后能够经过-f来指定文件路径服务器
docker history 镜像ID 来查看新镜像的每层的构建
启动新镜像网络
docker run -d -p 80 --name static_web yy/static_web nginx -g "daemon off;"
这里经过yy/static_web镜像启动一个名为static_web的新容器,-d表示用于后台运行, nginx -g "daemon off;"容器中运行的命令表示之前台方式启动nginx
-p 控制docker容器在运行时公开的网络端口给宿主机
-p 9090:80 表示将容器的80端口绑定本地宿主机的9090端口
-P 对外公开在dockerfile中expose公开的端口绑定到宿主机随机的一个端口
查看容器端口绑定的IP
docker port 镜像ID 端口
CMD
指定一个容器启动时要运行的命令,相似于RUN,RUN是指定构建是运行的命令
运行命令放在数组结构中,-l是能够加传递的参数;注意:RUN命令会覆盖CMD的命令
CMD ["/bin/bash","-l"]
WORKDIR
从镜像建立一个新的容器时,在容器内部设置一个工做目录
WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
表示将工做目录切换为/opt/webapp/db后执行了命令后又切换到/opt/webapp
注意:能够经过 -w标志在运行时覆盖工做目录
如:run -t -w /var/log
ENV
用来在镜像构建过程当中设置环境变量
ENV HOME_PATH /home/rvm
WORKDIR $HOME_PATH
USER
用来指定改镜像用什么身份来运行,能够指定用户名或者UID、组、GID
运行时使用-u来覆盖
VOLUME
基于镜像建立的容器添加卷
ADD
将构建环境下的文件和目录复制到镜像中
ADD nginx.conf /etc/nignx.conf
ADD laster.tar.gz /var/www/html 能够将压缩的文件服务过去自动解压
COPY
至关于ADD 但不会有自动解压