官方起步文档—第二节: https://docs.docker.com/get-started/part2/#your-new-development-environment
Dockerfile文档:https://docs.docker.com/engine/reference/builder/#usage
Dockerfile
A
Dockerfile
is a text document that contains all the commands a user could call on the command line to assemble an image.
dockerfile文件实际上就是一个包含了一堆指令的文件,在执行docker build path
的时候,Docker的后台程序会自动从上至下依次执行dockerfile中的指令。
**注意:**执行docker build的时候,会将你填写的路径中的全部内容发送给Docker后台程序,因此千万不要使用根目录/
作为build的路径,因为这么程序会将你的整个硬盘发送给Docker后台进程。
最佳实践:docker build path
的时候,永远在新建的文件夹中执行。
.dockerignore
与.gitignore文件一样,可以在path目录下新建.dockerignore文件来避免发送、COPY
、ADD
某些希望忽略的文件。docker build的时候会先检查.dockerignore文件,之后才会将路径下的全部内容发送给Docker后台进程。
Dockerfile格式
# 注释
INSTRUCTION(命令) arguments(参数)
**最佳实践:**命令保持全部大写。虽然Docker本身并不要求一定需要大写,但是大写可以更好的区分命令与参数。
注意:#的注释只有在一行的开头才会认为是注释,出现在一行中的其他地方均会被当成正常字符。
常用Dockerfile命令
FROM <image>[:<tag>] [AS <name>]
使用哪一个基础image来build(构建)新的image,每一个Dockerfile必须至少有一个FROM命令。如果不设置tag,默认使用lastest标签的image。ENV <key> <value>
设置环境变量,dockerfile本身可以使用${var}
来使用环境变量。最终生成的容器中也可以通过不同程序调用系统的接口,获取到该环境变量。例如python的os包中的os.getenv()。RUN <command>
执行任意的shell命令。CMD ["executable","param1","param2"]
执行shell命令,和RUN的区别就是CMD指令只会执行最终的那一条设置,因此一般用来结尾执行某些只需要执行一次的命令。**注意:**该指令格式,RUN
命令也支持。LABEL <key>=<value>
为image设置一些元数据,例如作者、版本等,使用docker inspect imagename
可以查看image的label。EXPOSE <port> [<port>/<protocol>...]
对外界暴露指定的端口以及协议。ADD [--chown=<user>:<group>] <src>... <dest>
将src的文件、内容,新增到image的dest目标路径中。并清除src的源文件。COPY [--chown=<user>:<group>] <src>... <dest>
将src的文件、内容,复制到image的dest目标路径中。不会清除src的源文件。VOLUME ["dir",...]
生成一个挂载点。关于更多挂载点的内容,可以查看这里USER <user>[:<group>]
设置运行shell命令的用户与用户组。WORKDIR /path/to/workdir
工作路径,dockerfile中所有的命令都会以workdir为根目录。
构建/运行image
docker build -t imagename path
构建image,并命名。docker run -p 4000:80 imagename
运行image并将暴露的80端口绑定至本机的4000端口,如果这里的image本地不存在,docker会尝试从远端直接pull并运行该image。
分享、上传image
docker login
登录docker,需要先在hub.docker.com注册,所需的用户名不是邮箱而是唯一的用户名。docker tag image username/repository:tag
tag image。docker push username/repository:tag
发布image至远端。
常用指令列表:
- docker ps # 查看运行中的container
- docker image ls # 查看image list
- docker image rm #删除指定的image
- docker inspect # 查看image label信息
- docker container ls # 查看container list
- docker container ls --all # 查看全部模式的container
- docker login # 登录docker
- docker tag username/repository:tag # tag image
- docker push username/repository:tag # 推送image至远端
- docker run username/repository:tag # 运行image
欢迎大家关注我的个人博客:http://blog.geek-scorpion.com/