教你如何写dockerfile

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

  1. 安装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 镜像中要包含的文件 <本地路径> <镜像路径>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值