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