摘要:指令这条命令是指明最后容器需要暴露哪些端口号,这样其他系统才能使用这个端口。但是灵活性不高,后面我在编排的时候会教大家用编排来统一开发环境。更多还有更多指令大家看下官方文档,我自己觉得上面的指令算是使用比较多的了。
前言
上一篇文章呢,我们简单的了解了Docker的基本命令,这篇文章呢,我们来了解下Dockerfile这个文件。
一个神奇的文件:Dockerfile我不知道有多少同学之前用过Vagrant来统一开发环境的,如果你之前接触过Vagrant的话,Dockerfile有点类似于vagrantfile文件。
一言以蔽之,Dockerfile就是描述了你要构建一个什么样的镜像,好比你要建立一栋大楼,你需要把每一步写进一张蓝图中,然后交给工人(docker build [dockerfile文件所在路径]),然后你就拥有了一栋房子,懂了么?懂了么?懂了么?
我们来看下dockerfile长什么样子吧?
# Nginx # # VERSION 0.0.1 FROM ubuntu MAINTAINER Victor VieuxLABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0" RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
这个是官方给出的例子。
FROM指明了这里镜像继承Ubuntu的基础系统。
MAINTAINER是指明了作者信息,一般是名字和邮箱。
LABEL是为你即将打造的镜像写上一些标签信息。
RUN这个是执行一条命令,等价于你在终端打了一条命令
当然,远远不止这些命令,我列举几条比较常用的还有一些注意点吧。
FROM指令FROM:
这里大家要注意一点就是,docker官方源镜像被墙,所以如果你要使用国内源的话需要这样来书写:FROM daocloud.io/ubuntu:latest,这是很多新人一直摸不着头脑经常要问的,这里给大家提示下。
RUN指令RUN
这条命令相当于你在终端执行了一条命令,当然这条命令一般是一条能够带来内容写入的命令,比如RUN apt-get install vim这样的安装程序的命令,或者是RUN echo "Hello" > /hello.txt这样的脚本命令。RUN可以在dockerfile中存在多条,大家要注意了。
当然还有RUN ["/bin/bash", "-c", "echo hello"]这样也是可以的。
CMD ["executable","param1","param2"]
CMD指令一般用来指明启动容器时需要运行什么进程。一般我们是跑一条无输入有输出的前台进程,比如官方ghost启动时就运行了/entrypoint.sh npm start,这就是一条无输入有输出的命令,输出将会作为容器的日志显示。但是你看到ghost的Dockerfile会发现:
... COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 2368 CMD ["npm", "start"]
ENTRYPOINT是配置容器启动后执行的命令,CMD此时为它提供了两个参数,所以等价于CMD /entrypoint.sh npm start。CMD只能执行一次,重复写会覆盖哦。
EXPOSE指令EXPOSE[ ...]
这条命令是指明最后容器需要暴露哪些端口号,这样其他系统才能使用这个端口。比如常见的80、3306这些,PHP开发者对这些端口应该是非常熟悉的了。在这里多说几句,就是写明了这个指令不代表你可以从外面就直接连进来,因为你的dockerfile最后生成的是镜像文件,你需要用这个镜像文件来run容器。所以你要在run的时候使用-P参数来随机分配映射口或者使用-p来指定端口映射。
ADD、COPY指令ADDCOPY
这两个都是复制命令,比如Ubuntu下需要换源(替换/etc/apt/source.list文件)就可以用这个命令,推荐使用COPY
VOLUME挂载指令VOLUME ["/data"]
顾名思义,就是挂载一个主机目录到你的容器内,对于PHP开发者而言就是你可以在本地写好代码在目录/workdir/test,然后挂载进去来省去繁杂的复制代码进入容器的过程。但是灵活性不高,后面我在编排的时候会教大家用编排来统一开发环境。
更多还有更多指令大家看下官方文档,我自己觉得上面的指令算是使用比较多的了。作为PHP开发者只要认识这几个我觉得够用了。
构建镜像前面说了好多,目的就只是为了自动化构建一个属于自己的镜像。哈哈,别不耐烦,但凡官方给出的镜像都会附带一份dockerfile的,不信到hub上去look look。你的PHP官方也是给出了dockerfile:Docker Official Image packaging for PHP
好了,该给出这道命令了
docker build [dockerfile所在目录]
比如我的dockerfile路径是~/project/dockerfile,那么我构建镜像的命令是:
docker build -t cnbrucehong/myimg ~/project/ | | -t指明了你要给这个镜像什么名字 注意这里没有dockerfile
然后你键入
docker images
你就能看到你创建的镜像啦,赶紧run一下试试吧!~有问题可以在下面留言哦!~
下节预告下届我们来说说如何在Mac下优雅的搭建Docker,哈哈如果你是linux的用户可以直接跳过,如果是window的话也是可以看看的,因为里面介绍的软件在window也是有的,但是我还是推荐大家使用mac啦,下节见咯!~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/21374.html
摘要:指令这条命令是指明最后容器需要暴露哪些端口号,这样其他系统才能使用这个端口。但是灵活性不高,后面我在编排的时候会教大家用编排来统一开发环境。更多还有更多指令大家看下官方文档,我自己觉得上面的指令算是使用比较多的了。 前言 上一篇文章呢,我们简单的了解了Docker的基本命令,这篇文章呢,我们来了解下Dockerfile这个文件。 一个神奇的文件:Dockerfile 我不知道有多少同学...
摘要:三部署架构说明这个方案仅适用于小公司敏捷项目团队联调测试环境的部署,同时也可以作为学习入门的,并不适用于有一定规模的生产环境。另外,建议把测试域名泛解析到部署这台服务的机器。模块配置部署脚本业务模块的配置基本是通过部署脚本来操作的。 项目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其...
摘要:三部署架构说明这个方案仅适用于小公司敏捷项目团队联调测试环境的部署,同时也可以作为学习入门的,并不适用于有一定规模的生产环境。另外,建议把测试域名泛解析到部署这台服务的机器。模块配置部署脚本业务模块的配置基本是通过部署脚本来操作的。 项目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其...
摘要:导读要从容器化开始,而容器又需要从开始,本文将介绍如何写出一个优雅的文件。只要记住以上三点就能写出不错的。执行完成项目的构建。 导读 Kubernetes要从容器化开始,而容器又需要从Dockerfile开始,本文将介绍如何写出一个优雅的Dockerfile文件。 文章主要内容包括: Docker容器 Dockerfile 使用多阶构建 感谢公司提供大量机器资源及时间让我们可以实践...
摘要:更换源更新源使用的源通过安装脚本安装应用所需要的依赖。 showImg(https://segmentfault.com/img/remote/1460000011106825); 有了第二篇《使用 Docker 搭建简易的 Java Web 环境 (二)》,懂了如何通过单一镜像创建 Docker 环境,这篇主要学习如何使用「docker-compose」。目标是:搭建 Laravel...
阅读 2516·2021-11-22 09:34
阅读 3523·2021-11-15 11:37
阅读 2319·2021-09-13 10:37
阅读 2089·2021-09-04 16:40
阅读 1406·2021-09-02 15:40
阅读 2444·2019-08-30 13:14
阅读 3297·2019-08-29 13:42
阅读 1837·2019-08-29 13:02