[基础] Mac OS下使用docker 之使用docker file创建镜像
2014-08-30 23:17
1011 查看
背景:可以使用docker file来创建一个docker镜像(创建Dockerfile,在文件目录下使用docker build .或类似docker build -t test-ubuntu .命令来创建镜像)
需求,创建一个docker镜像
1、创建文件Dockefile文件
大部分情况下,最好将Dockerfile放置于空目录下,然后增加需要的文件。为了加快build,可以使用.dockerignore文件。
2、Dockerfile的格式
INSTRUCTION表示命令,其对大小写并不敏感,但建议大写和参数做区分。
文件的第一条指令是FROM 指令(FROM <image>:<tag>),指定基础镜像。
RUN指令:RUN <command> command将运行在shell上(/bin/sh -c)
RUN ["executable", "param1", "param2"]
如RUN ["/bin/bash", "-c", "echo hello"]
CMD指令:
CMD ["executable","param1","param2"] (like an exec, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
CMD指令的目的是为运行的容器提供默认参数或默认操作。
RUN命令在构建(Build)Docker时执行,这时CMD命令不执行。CMD命令在RUN命令执行时才执行。
EXPOSE指令:
EXPOSE <port> [<port>...]
EXPOSE指令用于Container将运行时使用的网络端口通知给Docker。
ENV指令:
ENV <key> <value>
ENV指令用于设置环境变量。
ADD指令:
ADD <src> <dest>
ADD指令用于将src拷贝到Container文件系统中的dest
Copy指令:
COPY <src> <dest>
COPY指令类似于ADD指令
ENTRYPOINT指令:
ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred form)
ENTRYPOINT command param1 param2 (as a shell)
一个Dockerfile中只能有一个ENTRYPOINT.
CMD命令是可覆盖的,docker run后面输入的命令与CMD指定的命令匹配时,会把CMD指定的命令替换成docker run中带的命令。而ENTRYPOINT指定的命令只是一个“入口”,docker run后面的内容会全部传给这个“入口”,而不是进行命令的替换
VOLUME指令:
VOLUME ["/data"]
VOLUME指令用于
WORKDIR指令
WORKDIR /path/to/workdir
WORKDIR用于设置RUN,CMD,ENTRYPOINT指令的工作目录。
3、使用Docker的example搭建环境(Mac OS环境)。
参考官网文档https://docs.docker.com/examples/nodejs_web_app
下载相关代码,可以查看其Dockerfile文件。
由于国内网络访问不畅,如此Dockerfile中EPEL文件的下载路径就不能访问。所以建议从库中下载centos-node-hello。
1)docker search centos-node-hello
2)选择一个库来pull: docker pull grantleehoffman/centos-node-hello
3)登陆VM并映射端口:boot2docker ssh -L 48080:localhost:48080
4)VM上执行sudo docker run -p 48080:8080 -d grantleehoffman/centos-node-hello
5)在VM或宿主机shell上执行curl -i localhost:48080都可以看到回应。
如果我们需要使用自己的Dockerfile创建镜像,如我们要再grantleehoffman/centos-node-hello基础上加入对python的支持
1)创建Dockerfile
3)执行docker run -i -t 48000:8000 -t test/centos-python运行
4)映射VM与宿主机的端口:boot2docker ssh -L 48000:localhost:48000
5)在宿主机的浏览器上访问http://localhost:48000可以看到docker容器中根目录结构。
Whenever possible, Docker will re-use the intermediate images, accelerating
The
cache for
can be invalidated by using the
for example
http://docs.docker.com/reference/builder/#cmd
需求,创建一个docker镜像
1、创建文件Dockefile文件
大部分情况下,最好将Dockerfile放置于空目录下,然后增加需要的文件。为了加快build,可以使用.dockerignore文件。
2、Dockerfile的格式
# Comment INSTRUCTION arguments#号开头的行表示注释
INSTRUCTION表示命令,其对大小写并不敏感,但建议大写和参数做区分。
文件的第一条指令是FROM 指令(FROM <image>:<tag>),指定基础镜像。
RUN指令:RUN <command> command将运行在shell上(/bin/sh -c)
RUN ["executable", "param1", "param2"]
如RUN ["/bin/bash", "-c", "echo hello"]
CMD指令:
CMD ["executable","param1","param2"] (like an exec, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
CMD指令的目的是为运行的容器提供默认参数或默认操作。
RUN命令在构建(Build)Docker时执行,这时CMD命令不执行。CMD命令在RUN命令执行时才执行。
EXPOSE指令:
EXPOSE <port> [<port>...]
EXPOSE指令用于Container将运行时使用的网络端口通知给Docker。
ENV指令:
ENV <key> <value>
ENV指令用于设置环境变量。
ADD指令:
ADD <src> <dest>
ADD指令用于将src拷贝到Container文件系统中的dest
Copy指令:
COPY <src> <dest>
COPY指令类似于ADD指令
ENTRYPOINT指令:
ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred form)
ENTRYPOINT command param1 param2 (as a shell)
一个Dockerfile中只能有一个ENTRYPOINT.
CMD命令是可覆盖的,docker run后面输入的命令与CMD指定的命令匹配时,会把CMD指定的命令替换成docker run中带的命令。而ENTRYPOINT指定的命令只是一个“入口”,docker run后面的内容会全部传给这个“入口”,而不是进行命令的替换
VOLUME指令:
VOLUME ["/data"]
VOLUME指令用于
WORKDIR指令
WORKDIR /path/to/workdir
WORKDIR用于设置RUN,CMD,ENTRYPOINT指令的工作目录。
3、使用Docker的example搭建环境(Mac OS环境)。
参考官网文档https://docs.docker.com/examples/nodejs_web_app
下载相关代码,可以查看其Dockerfile文件。
由于国内网络访问不畅,如此Dockerfile中EPEL文件的下载路径就不能访问。所以建议从库中下载centos-node-hello。
1)docker search centos-node-hello
2)选择一个库来pull: docker pull grantleehoffman/centos-node-hello
3)登陆VM并映射端口:boot2docker ssh -L 48080:localhost:48080
4)VM上执行sudo docker run -p 48080:8080 -d grantleehoffman/centos-node-hello
5)在VM或宿主机shell上执行curl -i localhost:48080都可以看到回应。
如果我们需要使用自己的Dockerfile创建镜像,如我们要再grantleehoffman/centos-node-hello基础上加入对python的支持
1)创建Dockerfile
FROM grantleehoffman/centos-node-hello RUN yum install python CMD ["cd","/"] CMD python -m SimpleHTTPServer2)执行 docker build -t test/centos-python . 命令
3)执行docker run -i -t 48000:8000 -t test/centos-python运行
4)映射VM与宿主机的端口:boot2docker ssh -L 48000:localhost:48000
5)在宿主机的浏览器上访问http://localhost:48000可以看到docker容器中根目录结构。
Whenever possible, Docker will re-use the intermediate images, accelerating
docker buildsignificantly (indicated by
Using cache)
The
cache for
RUNinstructions
can be invalidated by using the
--no-cacheflag,
for example
docker build --no-cache.
http://docs.docker.com/reference/builder/#cmd
相关文章推荐
- 使用Dockerfile创建一个带 ssh 服务的基础镜像
- Docker基础-使用Dockerfile创建镜像
- 「二」创建一个带 ssh 服务的基础镜像(修订版)--使用 Dockerfile 创建
- 3 使用 Dockerfile 实现 自动化构建(创建) 镜像
- 使用Dockerfile创建自己的镜像
- docker官方镜像下载及使用Dockerfile创建镜像的方法
- docker官方镜像下载及使用Dockerfile创建镜像
- 使用Dockerfile创建nginx服务容器镜像
- 使用dockerfile创建镜像
- docker学习笔记3—使用Dockerfile与docker build命令创建一个nginx服务器镜像,并使用浏览器进行访问
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
- 使用dockerfile创建支持ssh远程的镜像
- 使用Dockerfile创建docker镜像
- 使用Dockerfile创建简单java应用镜像
- 详解使用Dockerfile创建带Apache服务的CentOS Docker镜像
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
- 使用Dockerfile创建支持ssh服务自启动的容器镜像
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
- 使用Dockerfile创建带Apache服务的Centos Docker镜像
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像