官网学习
FROM
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
FROM scratch #制作base Image
FROM centos #使用base Image
FROM centos:7.9
FROM mysql:5.6
LABEL
LABEL maintainer="394498036@qq.com"
LABEL version="1.0"
LABEL description="This is description \
欢迎关注:编程坑太多,我在等你."
RUN
RUN yum update && yum install -y vim \
python-dev #反斜线换行
RUN apt-get update && apt-get install -y perl \
pwgen --no-install-recommends && rm -rf \
/var/lib/apt/lists/* #注意清理cache
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
WORKDIR
WORKDIR /test #如果没有会自动创建test目录
WORKDIR jianshu
RUN pwd #输出结果应该是/test/jianshu
ADD and COPY
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
COPY <src>... <dest>
COPY ["<src>",... "<dest>"] 用于支持包含空格的路径
ADD hello /
ADD test.tar.gz / #添加到根目录并解压
WORKDIR /root
ADD hello test/ # /root/test/hello
WORKDIR /root
COPY hello test/ # /root/test/hello
ENV
ENV <key> <value>
ENV <key>=<value> ...
ENV MYSQL_VERSION 5.6
E-NV apt-get install -y mysql-server = "${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* #引用常亮
学习下面的先了解下
- Shell格式
RUN apt-get install -y vim
CMD echo "hello docker 微信公众号:编程坑太多"
ENTRYPOINT echo "hello docker 微信公众号:编程坑太多"
- Exec格式
RUN ["apt-get", "install", " -y", "vim"]
CMD ["/bin/echo","hello docker 微信公众号:编程坑太多"]
ENTRYPOINT ["/bin/echo","hello docker 微信公众号:编程坑太多"]
- Dockerfile1
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
- Dockerfile2
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo", "hello $name"]
mkdir cmd-entrrypoint
cd cmd-entrrypoint/
vi Dockerfile
-
先执行Dockerfile1
more Dockerfile
docker build -t liming/centos-entrypoint-shell .
docker run liming/centos-entrypoint-shell
-
先执行Dockerfile2
more Dockerfile
docker build -t liming/centos-entrypoint-exec .
docker run liming/centos-entrypoint-exec
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/bash","-c", "echo hello $name"]
docker build -t liming/centos-entrypoint-exec-new .
docker run liming/centos-entrypoint-exec-new
CMD
- 容器启动时默认执行的命令
- 如果docker run 指定了其他命令,CMD命令被忽略
- 如何定义了多个CMD,只有最后一个会执行
FROM centos
ENV name Docker
CMD echo "hello $name"
docker build -t liming/centos-cmd-shell .
docker run liming/centos-cmd-shell
docker run -it liming/centos-cmd-shell /bin/bash
ENTRTYPOINT
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
docker build -t liming/centos-entrypoint-shell .
docker run liming/centos-entrypoint-shell
docker run -it liming/centos-entrypoint-shell /bin/bash
个人网站:IT人故事会 idig8.com
PS:Dockerfile详解基本就介绍这么多,可能还有很多命令没有讲解,以后用到了在说吧。一定要CMD和ENTRTYPOINT因为很多官方的都常用这两个命令。
往期精彩
- docker导学(一)
- 容器的技术概述(二)
- docker的魅力初体验-5分钟安装wordpress不走弯路(三)
- docker官网介绍(四)
- 如何在mac上安装docker(五)
- 如何在window上安装docker(六)
- 如何在mac上通过vagrant安装虚拟机(七)
- 如何在window上通过vagrant安装虚拟机(八)
- docker-Machine的本地使用(九)
- docker-Machine的本地使用(十)
- 在linux/mac下通过Docker-Machine在阿里云上的使用(11)
- docker架构和底层技术(12)
- docker Image概述(13)
- 手动建立一个base Image(14)
- 什么是Container(15)
- 构建自己的Docker镜像(16)