Dockerfile构建镜像

以创建一个web服务器的镜像为例:

首先创建一个目录并进入创建Dockerfile文件。这个目录是构建环境还有在构建过程中需要上传到构建镜像中文件的本地存放位置

mkdir web_file
cd web_file
touch Dockerfile

vim Dockerfile构建一个简单的镜像文件

# 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是由指令和参数组成,每条指令都必须为大写字母,顺序从上到下执行。

FROM 指定一个镜像作为基础镜像

MAINTAINER 来定义作者还有邮箱标识所有者和联系方式

RUN 定义在镜像中运行的命令

#在目录下执行构建命令
docker bulid -t=“yy/static_web” .

-t 设置新镜像的仓库和名称

. 表示在本地目前去寻找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 端口

Dockerfile指令

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 但不会有自动解压

原文地址:https://www.cnblogs.com/aloneysir/p/11424854.html