在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。 Dockerfile 语法 Dockerfile 语法示例 复制代码 代码如下:# Print "Hello docker!" RUN echo "Hello docker!" Dockerfile 命令 FROM 命令 复制代码 代码如下:FROM <image> 或 复制代码 代码如下:FROM <image>:<tag> 这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。 比如: 复制代码 代码如下:FROM ubuntu 如果没有指定 tag ,则默认tag是latest,如果都没有则会报错。 RUN 命令 复制代码 代码如下:RUN <command> (the command is run in a shell - `/bin/sh -c`) 或: 复制代码 代码如下:RUN ["executable", "param1", "param2" ... ] (exec form) RUN命令等价于: 复制代码 代码如下:docker run image command docker commit container_id
复制代码 代码如下:# Memcached # # VERSION 1.0</p> <p># use the ubuntu base image provided by dotCloud FROM ubuntu</p> <p># make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update</p> <p># install memcached RUN apt-get install -y memcached MAINTAINER 命令 复制代码 代码如下:ENTRYPOINT 命令 复制代码 代码如下:ENTRYPOINT cmd param1 param2 ... 第二种是 exec 格式: 复制代码 代码如下:ENTRYPOINT ["cmd", "param1", "param2"...] 如: 复制代码 代码如下:ENTRYPOINT ["echo", "Whale you be my container"] ENTRYPOINT 命令设置在容器启动时执行命令 复制代码 代码如下:root@tankywoo-docker:~# cat Dockerfile FROM ubuntu ENTRYPOINT echo "Welcome!"</p> <p>root@tankywoo-docker:~# docker run 62fda5e450d5 Welcome! USER 命令 复制代码 代码如下:ENTRYPOINT ["memcached", "-u", "daemon"] 更好的方式是: 复制代码 代码如下:ENTRYPOINT ["memcached"] USER daemon EXPOSE 命令 复制代码 代码如下:EXPOSE <port> [<port>...] 比如memcached使用端口 11211,可以把这个端口暴露在外,这样容器外可以看到这个端口并与其通信。 复制代码 代码如下:EXPOSE 11211 一个完整的例子: 复制代码 代码如下:# Memcached # # VERSION 2.2</p> <p># use the ubuntu base image provided by dotCloud FROM ubuntu</p> <p>MAINTAINER Victor Coisne [email protected]</p> <p># make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update</p> <p># install memcached RUN apt-get install -y memcached</p> <p># Launch memcached when launching the container ENTRYPOINT ["memcached"]</p> <p># run memcached as the daemon user USER daemon</p> <p># expose memcached port EXPOSE 11211 上面是官方例子,国内建议换成163或sohu的源,不然太慢了。 复制代码 代码如下:root@tankywoo-docker:~# docker build -t tankywoo - < dck [38/480] Uploading context 2.56 kB Uploading context Step 0 : FROM ubuntu ---> 99ec81b80c55 Step 1 : MAINTAINER Victor Coisne [email protected] ---> Using cache ---> 2b58110877f6 Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list ---> Running in f55a4a8bb069 ---> d48c6a965398 Step 3 : RUN apt-get update ---> Running in da091a1dd6e7 Ign http://mirrors.163.com precise InRelease Get:1 http://mirrors.163.com precise Release.gpg [198 B]</p> <p>....</p> <p>Processing triggers for libc-bin (2.19-0ubuntu6) ... Processing triggers for ureadahead (0.100.0-16) ... ---> 2886671b5b86 Step 5 : ENTRYPOINT ["memcached"] ---> Running in e8aeeab92cb6 ---> 7148293a4053 Step 6 : USER daemon ---> Running in 288766b19606 ---> 235e7f630ffa Step 7 : EXPOSE 11211 ---> Running in c6f881b9d51f ---> 666c5d65f396 Successfully built 666c5d65f396 Removing intermediate container f55a4a8bb069 Removing intermediate container da091a1dd6e7 Removing intermediate container f23631d3d45a Removing intermediate container e8aeeab92cb6 Removing intermediate container 288766b19606 Removing intermediate container c6f881b9d51f ENV 命令 复制代码 代码如下:ENV <key> <value> 设置了后,后续的RUN命令都可以使用。 使用此dockerfile生成的image新建container,可以通过 docker inspect 看到这个环境变量: 复制代码 代码如下:root@tankywoo-docker:~# docker inspect 49bfc7a9817f ... "Env": [ "name=tanky", "HOME=/", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], ... 里面的name=tanky就是设置的。 也可以通过在docker run时设置或修改环境变量: 复制代码 代码如下:docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash
复制代码 代码如下:ADD <src> <dest> <src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url <dest> 是container中的绝对路径 VOLUME 命令 复制代码 代码如下:VOLUME ["<mountpoint>"] 如: 复制代码 代码如下:VOLUME ["/data"] 创建一个挂载点用于共享目录
复制代码 代码如下:WORKDIR /path/to/workdir 配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径 可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令 比如: 复制代码 代码如下:WORKDIR /a WORKDIR b WORKDIR c RUN pwd 其实是在 /a/b/c 下执行 pwd CMD 命令 复制代码 代码如下:CMD ["executable","param1","param2"] (like an exec, preferred form) CMD ["param1","param2"] (as default parameters to ENTRYPOINT) CMD command param1 param2 (as a shell) 一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论