dcokerfile命令

dockerfile外部命令

运行dockerfile

  • docker build -t $1 $2

    $1=创建的镜像名字 $2=docker的目录位置,如果是当前位置 直接写 .

运行dockerfile并给dockerfile创建的镜像建立名字

  • docker build -t mysql:3.6.34 $1

    $1=docker的路径

mariadb容器启动前需要先设置密码方法

  • docker run -d -p -e MYSQL_PASSWORD=$1 $2

    $1=设置mysql密码 $2=容器名字或容器id

dockerfile文件命令

FROM 指定哪种镜像作为新镜像的基础镜像

  • FROM Ubuntu:14.04

MAINTAINER 指明该镜像的作者和其电子邮件

  • MAINTAINER keylin "130808991@qq.com"

ENV 设置环境变量,有两种形式

  • ENV <key> <value>

  • ENV <key>=<value>

    例如:ENV ITBILU_PATH /home/itbilu/

    $ITBILU_PATH 获得

RUN 在新镜像内部执行的命令,比如安装一些软件,配置一些基础环境,可使用\来换行

  • RUN echo 'hello docker!' > /usr/local/file.txt

    也可以用exec格式 RUN [“executable”,“param1”,“param2”]

    RUN [“yum”,"-y",“install”,“nginx”]

    注意:executable是命令,后面的param是参数

COPY 将主机的文件复制到镜像内,如果目的位置不存在,docker会自动创建所需要的目录结构,但是他只是单纯的复制,不会做文件的提取和解压工作,

  • COPY application.yml /etc/springboot/hello-service/src/resources

    注意:需要复制的目录一定要和dockerfile文件在一个目录下

ADD 将主机的文件复制到镜像中,和copy一样,只是会对压缩文件[tar,gzip,bzip2,etc]做提取和解压操作

 ```ADD jdk8_104.tar /etc/springboot/jdk/  ```

注意:他不会对zip解压哈,支持的格式有限制

EXPOSE 暴露镜像的端口,供主机做映射,启动镜像时,使用-P参数来将镜像端口与宿主机的随机端口做映射,使用方式很多(可以指定多个)

  • EXPOSE 8080

  • EXPOSE 8081

WORKDIR 在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录。如

  • WORKDIR /usr/local

  • WORKDIR webservice

  • RUN echo 'hello-docker' > text.txt

    最终会在/usr/local/webservice/目录下生产text.txt文件

ONBUILD 当一个包含ONBUILD命令的镜像被用作其他镜像的基础镜像时,(比如用户的 镜像需要从某位准备好的位置添加源码,或者用户需要执行特定于构建镜像的环境的构建脚本),改命令就会被执行,

例如:创建镜像image-A

  • FORM ubuntu

    ONBUILD ADD . /var/www

    然后创建镜像image-B

    FORM image-A

    然后构建image-b的时候,日志会显示如下:

    Step 0: FORM image-A

# Exceing 1 build triggers

Step onbuild-0 :ADD ./var/www

USER 指定该镜像以什么样的用户去执行

  • USER root

VOLUME 用来想基于镜像创建的容器添加卷。比如你可以将mongodb镜像中存储数据的data文件指定为主机的某个文件。(容器内部建议不要存储任何数据)

  • VOLUME /data/db /data/configdb

    VOLUME 主机目录 容器目录

CMD 容器启动时需要执行的命令

  • CMD /bin/bash

    也可以用exec语法,

  • CMD ["/bin/bash"]

    注意:多个CMD的时只有最后一个生效

  • ENTRYPOINT 作用和用法和CMD一模一样

注意:CMD和ENTRPOINT区别

CMD命令会被docker run 的命令覆盖 而ENTRYPOINT会追加到ENTRYPOINT 后面

例如:
如果使用CMD ["/bin/bash"]ENTRYPOINT ["/bin/bash"]后,再使用docker run -ti image启动,会自动进入容器,相当于追加了这个命令
但是,如果启动镜像的命令为 docker run -ti image /bin/ps,使用CMD后面的命令就会被覆盖转而执行bin/ps命令。但是ENTRYPOINT的则不会,而是会把docker run 后面的命令当做ENTRYPOINT执行命令的参数

例如:ENTRYPOINT ["/usr/sbin/nginx"]

然后通过启动build之后的容器

docker run -ti image -g "daemon off"

此时的-g “daemon off” 会被当成参数传递给ENTRYPOINT,最后命令变成

docker/user/sbin/nginx -g "daemon off'

CMD和ENTRYPOINT都存在时

CMD的指令变成了ENTRYPOINT的参数,并且此CMD提供的参数会被docker run 后面的命令覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值