dockerfile 例子
example
From ubuntu:14:04
MAINTAINER foo bar <foo@bar.com>
RUN apt-get update
RUN apt-get install -y nginx
RUN echo"\ndaemon off;">>/etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data","/etc/nginx/site-enable","/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
指令介绍
FROM: 指定镜像 名字:标签
MAINTAINER:维护者信息
RUN:运行shell脚本 一定要加上-y,创建时不能接受输入
VOLUME: 与主机共享目录 也可运行时 -v
CMD:启动脚本
WORKDIR:为CMD中设置可执行文件设置运行目录
EXPOSE:与主机相连的端口
From 可以有多个,多个则创建多个镜像
Maintainer 维护则信息可省略
Run 脚本
RUN shell
RUN [“apt-get”,“install”,"-y",“nginx”] #非shell
可执行文件 形参
run的执行结果会被缓存,下次创建不想缓存build --no-cache
CMD 启动脚本
CMD shell
CMD [“可执行文件”,“形参”] #无shell
ENTRYPOINT[“可执行文件”] 而后 CMD[“形参”] 分开写
只能执行一次
docker run --entrypoint
EXPOSE 80 443 对主机露端口号
ENV 环境变量
ENV HELLO 1234
ADD 用于向镜像添加文件,要复制的文件,以相对路径,当前目录以内
还会解压缩 解包 对于网络文件只解压缩不解包(tar)
外部文件
网络文件
curl http:/xxxx/tar.gz | tar -xz
COPY 用于添加文件
但不会解压缩包,不能用于网络文件
VOLUME 将目录存储到主机内
VOLUME /data
VOLUME ["/data","/var/log/hello"]
不能指定主机目录
只有在docker run时指定,否则用默认的
USER <用户名>
USER后面所有的 RUN CMD ENTRYPOINT 都是以该用户执行的
WORKDIR
为那些命令设置工作路径
可更换以改变路径
ONBUILD 触发式,当别人用你的镜像的时候,FROM 后面就会执行
ONBUILD RUN touch /hello.txt
可查看 docker inspect -f “{{.ContainerConfig.OnBuild}}” example
构建命令
build命令创建镜像
docker build <选项> <dockerfile路径> --tag 名字:标签 .
docker images 查看
.dockerignore 忽略某些目录 ,遵循go语言规则
经常忽略.git .svn这类
运行选项(在构建完成,后追加到生成容器阶段)
docker run --name hello-nginx -d -p 80:80 -v /root/data:data hello:0.1
docker -d 后台运行
-p 端口映射
-v 文件映射
-e 设置环境变量
–rm 一次性用完即毁坏
–privileged 容器可以有主机内核功能
查看历史
docker history <镜像名orID>:<标签>
复制文件
docker cp hello-nginx:/etc/nginx/nginx.conf ./
docker cp <容器名>:<路径><主机路径>
从容器中创建镜像
docker commit 从容器
docker commit -a “Foo Bar foo@bar.com” -m “add hello.txt” hello-nginx hello:0.2
-a
-m
提交用户注册信息
查看容器文件修改与镜像对比
docker diff hello-nginx
A添加
C修改
D删除
查看内容
docker inspect <内容>
上传私有仓库时,先要打上标签
docker tag : <私有仓库url>:/:
docker push :/:
别名
docker run --link <别的容器名>:<在本容器内叫什么>
docker ps 查看端口号
引用时<别名>:<端口号>
数据卷的概念
主机中挂载到docker容器内的,任何修改都会保存的。
-v [主机(省略就会挂到/var/…docker)]:[容器内]
数据卷容器
docker run -i -t --volumes-from hello-volume(容器名) --name www
这样那些数据卷就会自动挂载到这个容器www中了
创建基础镜像步骤
ubuntu
- 安装bootstrap工具
sudo apt-get install debootstrap
sudo debootstrap trusty trusty #ubuntu版本代号 目录
tar -C trusty -c . | sudo docker import - trusty
打包文件 并且 传给 docker import
centos
省略
空镜像
tar cv --files-from /dev/null | sudo dcoker import - scratch
打空包
Dockerfile
From scratch
ADD ./hello /hello
CMD ["/hello"]
ADD 镜像中要包含的文件 <本地路径> <镜像路径>