Dockerfile学习笔记

原创
2017/10/25 17:38
阅读数 69

最小的Dockerfile

FROM ubuntu:16.04

将上述内容保存为Dockerfile,并在当前目录执行

$ docker build -t ubuntu:own .

然后执行docker images可以发现有一个ubuntu:own的镜像

有趣的是新生成的ubuntu:own镜像和ubuntu:16.04进项的IMAGE ID是一致的

如果执行docker rmi ubuntu:own的话,输出内容是Untagged: ubuntu:own

  • 最小的Dockerfile只需要指定基于的镜像就可以

设置镜像维护人

FROM ubuntu:16.04

MAINTAINER alazyer
  • 维护人是任意字符串

拷贝文件到镜像

有两个命令可以实现将文件拷贝到镜像中: COPY和ADD

# Using COPY
FROM ubuntu:16.04

COPY src dest


# Using ADD
FROM ubuntu:16.04

ADD src dest
  • 如果拷贝的内容不存在(docker build命令执行目录),则无法通过Dockerfile生成新的镜像
  • 如果src指定文件的话,则会拷贝文件
  • 如果src指定目录的话,不会拷贝指定的目录,只会拷贝指定目录下内容

设置环境变量和执行命令

FROM ubuntu:16.04

ENV VERSION 1.9.6

RUN pip install django==$VERSION

暴露映射端口

FROM ubuntu:16.04

EXPOSE 8000

设置工作目录

所谓工作目录就是执行docker run -it后,默认进入的目录,下面命令设置工作目录为/opt目录

FROM ubuntu:16.04

WORKDIR /opt

启动容器时执行

FROM ubuntu:16.04

ENTRYPOINT ["ls", "/opt"]
  • ENTRYPOINT配置容器启动时运行的命令
  • ENTRYPOINT内容总可以通过docker ps -a在容器COMMAND中看到

启动容器后执行

FROM ubuntu:16.04

CMD ["/bin/bash"]
  • CMD设置容器启动后默认执行的命令及其参数
  • 可以指定多个CMD,但是只有最后一个可能会生效
  • 如果docker run时,指定命令,则会覆盖CMD
  • 最终的CMD都会跟在ENTRYPOINT中命令后面作为docker容器的启动命令

TODO(VOLUME)

Note

  • Dockerfile中每一条命令都会生成一个中间容器,因而应该将能够合并的命令尽量合并
  • 合并规则,同样的命令紧挨着写的话,一般都可以合并
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部