dockerfile经常使用参数及实例


dockerfile

容器构建文件

----基本讲解:
            1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
            2.指令按顺序执行
            3.#表示注释
            4.每条指令都会建立一个镜像层,而且提交,终端会按步骤显示

    ----执行步骤:
            1.docker从基础镜像运行一个容器
            2.执行一条指令并对容器作出修改
            3.执行相似docker commit的操做提交镜像层
            4.docker再基于刚提交的镜像运行一个新容器
            5.执行dockerfile中的下一条指令直到执行完毕

dockerfile体系结构(保留字指令)

FROM            基础镜像
MAINTAINER      镜像做者信息
RUN             容器须要运行的指令
EXPOSE          容器对外端口号
WORKDIR         进入镜像后的登录目录
ENV             用来构建镜像过程当中设置环境变量
ADD             将宿主机文件拷贝进镜像且ADD会自动解压缩包和处理URL连接
COPY            将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>
VOLUME          容器数据卷,用于数据保存和持久化
    CMD             指定一个容器启动时要运行的命令(dockerfile中能够写多个CMD指令,但只有最后一个生效,CMD会被docker run以后的参数替换)
ENTRYPOINT      指定一个容器启动时要运行的命令(和CMD同样,都是在指定容器启动程序及参数)
ONBUILD         当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

##实例一:
vim /mydocker/Dockerile02

FROM    centos
MAINTAINER  redrain<redrain@163.com>
ENV     mypath /tmp
WORKDIR $mypath
RUN     yum -y install net-tools vim
EXPOSE  80
CMD     echo $mypath
    CMD     echo -e "\033[32mpath-set sucess----------ok\033[0m"\\n"\033[32minstall net-tools vim success---------ok\033[0m"
CMD     /bin/bash

#建立镜像,须要引用已有的centos镜像
docker build -f /mydocker/Dockerfile02 -t mycentos:1.2 .

cat >>/.bash_profile<<EOF
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
EOF

##实例二:
#CMD与ENTRYPOINT的区别:
vim /mydocker/Dockerile03

FROM centos
RUN  yum install curl -y
CMD  [ "curl", "-s", "https://ip.cn" ]

打包镜像一:
    docker build -f /mydocker/Dockerile03 -t ipself .

运行镜像:
    #这里会得到本身的IP
    docker run ifself

#此处加参数启动就没法执行,报错参数没法执行,由于已经覆盖dockerfile中的CMD指令
docker run ipself -i

报错内容:docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown

vim /mydocker/Dockerile04

FROM centos
RUN  yum install curl -y
ENTRYPOINT [ "curl", "-s", "https://ip.cn" ]

打包镜像二:
    docker build -f /mydocker/Dockerile04 -t ipself2 .

运行镜像:
    #这里会得到本身的IP
    docker run ipself2

#此处加参数可正常启动,它会将后面的-i参数传递进ENTRYPOINT中
docker run ipself -i

##实例三:

mkdir /dockerapp/tomcat/{test,tomcatlogs} -p
cd /dockerapp/tomcat

在/dockerapp/tomcat目录下放入jdk和tomcat的对应版本的压缩包

vim Dockerfie
####
FROM centos
MAINTAINER redrain<2477835252@qq.com>
COPY c.txt /usr/local/cincontainer.txt

ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.16.tar.gz /usr/local/

RUN yum install vim -y
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.16
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.16
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

#ENTRYPOINT [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh" ]
#CMD [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh","run" ]
    CMD /usr/local/apache-tomcat-9.0.16/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.16/bin/logs/catalina.out

#启动容器同步对应卷
    docker run -d -p 8080:8080 --name tomcat8080 -v /dockerapp/tomcat/test:/usr/local/apache-tomcat-9.0.16/webapps/test -v /dockerapp/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.16/logs --privileged=true tomcat8080
相关文章
相关标签/搜索