FROM
FROM scratch
FROM centos
FROM ubuntu:14.04
LABEL
LABEL maintainer="jack18588951684@163.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/*
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
WORKDIR
WORKDIR /root
WORKDIR /test
WORKDIR demo
RUN pwd
ADD and COPY
ADD hello /
ADD test.tar.gz /
WORKDIR /root
ADD hello test/
WORKDIR /root
COPY hello test/
ENV
ENV MYSQL_VERSION 5.6
RUN apt-get install -y mysql-server = "${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/*
CMD
- 容器启动时默认执行的命令
- 如果docker run指定了其它命令,CMD命令被忽略
- 如果定义了多个CMD,只有最后一个会执行
FROM centos
ENV name Docker
CMD echo "hello $name"
======================================
情况1.docker run [image]输出?
>> hello Docker
情况2.docker run -it [image] /bin/bash输出?
无输出,进入容器内
======================================
ENTRYPOINT
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
- 最佳实践:写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
================================================
情况1.docker run [image]输出?
>> hello Docker
情况2.docker run -it [image] /bin/bash输出?
>> hello Docker
================================================
RUN vs CMD vs ENTRY
- RUN:执行命令并创建新的Image Layer
- CMD:设置容器启动后默认执行的命令和参数
- ENTRYPOINT:设置容器启动时运行的命令
Shell和Exec格式
RUN apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
RUN ["apt-get","install","-y","vim"]
CMD ["/bin/echo","hello docker"]
ENTRYPOINT ["/bin/echo","hello docker"]
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo","hello $name"]
ENTRYPOINT ["/bin/bash","-c","echo hello $name"]
Dockerfile创建工具镜像
==========================================
FROM ubuntu
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD []
==========================================
docker build -t jack0117/ubuntu-stress .
docker run -it jack0117/ubuntu-stress --vm 1 --verbose