• dockerFile


    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

    dockerfile一般与程序在同一级目录下。

    touch Dockerfile(D要大写)

    vi Dockerfile

    一.编写第一个Dockerfile(jdk8,tomcat8的java环境)

    # 版本信息

    FROM centos

    MAINTAINER wzp"wanzepeng@zailingtech.com"

    # OS环境配置

    RUN yum install -y wget

    # 安装JDK

    RUN mkdir /var/tmp/jdk RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" -P /var/tmp/jdk http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz

    RUN tar xzf /var/tmp/jdk/jdk-8u111-linux-x64.tar.gz -C /var/tmp/jdk && rm -rf /var/tmp/jdk/jdk-8u111-linux-x64.tar.gz

    # 安装tomcat

    RUN mkdir /var/tmp/tomcat

    RUN wget -P /var/tmp/tomcat http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.8/bin/apache-tomcat-8.5.8.tar.gz

    RUN tar xzf /var/tmp/tomcat/apache-tomcat-8.5.8.tar.gz -C /var/tmp/tomcat && rm -rf /var/tmp/tomcat/apache-tomcat-8.5.8.tar.gz

    #设置环境变量

    ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_111

    ENV CATALINA_HOME /var/tmp/tomcat/apache-tomcat-8.5.8

    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

    #打包项目并拷贝到tomcat webapps目录

    RUN mkdir /var/tmp/webapp

    ADD ./ /var/tmp/webapp

    RUN cd /var/tmp/webapp && cp /var/tmp/webapp/war/sm_new.war /var/tmp/tomcat/apache-tomcat-8.5.8/webapps/

    #开启内部服务端口

    EXPOSE 8080

    #启动tomcat服务器

    CMD ["./var/tmp/tomcat/apache-tomcat-8.5.8/bin/catalina.sh","run"] && tail -f /var/tmp/tomcat/apache-tomcat-8.5.8/logs/catalina.out

    使用Dockerfile构建镜像

    # docker build -t tomcat .

        tomcat是镜像的名字。 . 表示Dockerfile在当前文件夹下,也可使用绝对路径(/path/to/Dockerfile)来表示。

    运行容器

    # docker run -it -p 12345:8080 --name=tomcat-test  tomcat 

       tomcat-test是容器的名字。12345是映射到外部的端口。然后在命令行键入 Ctrl + p , Ctrl + q,使容器在后台运行。

    jdk1.7 tomcat7

    1. # 安装jdk  
    2. RUN wget --no-cookies --no-check-certificate --header "Cookie:gpw_e24=http%3a%2f%2fwww.oracle.com%2ftechnetwork%2fjava%2fjavase%2fdownloads%2fjdk7-downloads-1880260.html;oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz  
    3. RUN tar -zxf jdk-7u79-linux-x64.tar.gz  
    4.   
    5. # 配置环境变量  
    6. ENV JAVA_HOME /home/jdk1.7.0_79  
    7. ENV JRE_HOME $JAVA_HOME/jre  
    8. ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib  
    9. ENV PATH $PATH:$JAVA_HOME/bin  
    10.   
    11. #安装 tomcat7  
    12. #RUN apt-get update  
    13. RUN wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.62/bin/apache-tomcat-7.0.62.tar.gz  
    14. RUN tar xvf apache-tomcat-7.0.62.tar.gz  
    15.   
    16. #配置tomcat的环境变量  
    17. ENV CATALINA_HOME /home/apache-tomcat-7.0.62

    二.DockerFile常用命令

    Dockerfile 语法示例

    Dockerfile语法由两部分构成,注释和命令+参数

    1. # Line blocks used for commenting
    2. command argument argument ..

    一个简单的例子:

    1. # Print "Hello docker!"
    2. RUN echo "Hello docker!"

    Dockerfile 命令

    Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。

    ADD

    ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。

    1. # Usage: ADD [source directory or URL] [destination directory]
    2. ADD /my_app_folder /my_app_folder 

    CMD

    和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

    1. # Usage 1: CMD application "argument", "argument", ..
    2. CMD "echo" "Hello docker!"

    ENTRYPOINT

    配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

    每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

    ENTRYPOINT 帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。

    1. # Usage: ENTRYPOINT application "argument", "argument", ..
    2. # Remember: arguments are optional. They can be provided by CMD
    3. # or during the creation of a container.
    4. ENTRYPOINT echo
    5. # Usage example with CMD:
    6. # Arguments set with CMD can be overridden during *run*
    7. CMD "Hello docker!"
    8. ENTRYPOINT echo

    ENV 

    ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。

    1. # Usage: ENV key value
    2. ENV SERVER_WORKS 4

     

    EXPOSE

    EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。

    1. # Usage: EXPOSE [port]
    2. EXPOSE 8080

    FROM

    FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。

    1. # Usage: FROM [image name]
    2. FROM ubuntu 

    MAINTAINER

    我建议这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用于声明作者,并应该放在FROM的后面。

    1. # Usage: MAINTAINER [name]
    2. MAINTAINER authors_name 

    RUN

    RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。

    1. # Usage: RUN [command]
    2. RUN aptitude install -y riak

    USER

    USER命令用于设置运行容器的UID。

    1. # Usage: USER [UID]
    2. USER 751

    VOLUME

    VOLUME命令用于让你的容器访问宿主机上的目录。

    1. # Usage: VOLUME ["/dir_1", "/dir_2" ..]
    2. VOLUME ["/my_files"]

    WORKDIR

    WORKDIR命令用于设置CMD指明的命令的运行目录。

    1. # Usage: WORKDIR /path
    2. WORKDIR ~/
  • 相关阅读:
    phpcms V9 MVC模式 与 URL访问解析
    PHPCMS V9 框架代码分析(入口程序)
    批处理命令——for
    批处理命令——set
    批处理命令——if
    AndroidStudio简单的apk混淆
    CKEditor与CKFinder学习--CKFinder源代码改动自己定义上传文件名称
    LeetCode_Path Sum
    Java 并发:内置锁 Synchronized
    做游戏长知识------基于行为树与状态机的游戏AI(一)
  • 原文地址:https://www.cnblogs.com/xwzp/p/8872233.html
Copyright © 2020-2023  润新知