精华内容
下载资源
问答
  • Dockerfile学习

    2019-11-19 21:43:49
    Dockerfile学习 Dockerfile简介 ...Dockerfile作用 1、找一个镜像: ubuntu 2、创建一个容器: docker run ubuntu 3、进入容器: docker exec -it 容器 命令 4、操作: 各种应用配置 .... 5、...

    Dockerfile学习

    1. Dockerfile简介

      Dockerfile类似于我们学习过的脚本,将我们在上面学到的docker镜像,使用自动化的方式实现出来

    2. Dockerfile作用
      1、找一个镜像:   	ubuntu
      2、创建一个容器: 	docker run  ubuntu
      3、进入容器:		docker exec -it 容器 命令
      4、操作:			各种应用配置
      		....
      5、构造新镜像:		docker commit   
      
    3. Dockerfile使用准则
      1.大: 首字母必须大写D
      2.空: 尽量将Dockerfile放在空目录中。
      3.单: 每个容器尽量只有一个功能。
      4.少: 执行的命令越少越好。
      
    4. 具体操作(快速入门)
      1. 准备环境

        # 创建Dockerfile专用目录
        mkdir /docker/images/ssh -p
        cd /docker/images/ssh
        # 创建秘钥认证
        ssh-keygen -t rsa
        cat ~/.ssh/id_rsa.pub > authorized_keys
        # 准备软件源
        cp /etc/apt/sources.list ./
        
      2. 定制文件

        # 构建一个基于ubuntu的ssh定制镜像
        # 基础镜像
        FROM ubuntu-base
        # 镜像作者
        MAINTAINER President.Wang 000000@qq.com
        # 执行命令
        # 增加软件源
        ADD sources.list /etc/apt/sources.list
        # 安装 ssh 服务
        RUN apt-get update && apt-get install -y openssh-server curl vim net-tools && mkdir -p /var/run/sshd && mkdir -p /root/.ssh && sed -i "s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-get autoclean && apt-get clean && apt-get autoremove
        # 复制配置文件到相应位置,并赋予脚本可执行权限
        ADD authorized_keys /root/.ssh/authorized_keys
        # 对外端口
        EXPOSE 22
        # 启动ssh
        ENTRYPOINT ["/usr/sbin/sshd","-D"]
        
      3. 构造镜像

        # 构建镜像
        docker build -t ubuntu-ssh .
        
      4. 效果查看

        # 使用新镜像启动一个容器,查看效果
        docker run -d -p 10086:22 ubuntu-ssh
        # 容器检查
        docker ps
        docker port c03d146b64d4
        # ssh查看效果
        ssh 192.168.8.14 -p 10086
        
    5. 基础指令详解
      1. FROM

        # 格式:
        FROM <image>
        FROM <image>:<tag># 解释:
        # FROM 是 Dockerfile 里的第一条而且只能是除了首行注释之外的第一条指令
        
      2. MAINTAINER

        # 格式:
        # MAINTAINER <name>
        # 解释:指定该dockerfile文件的维护者信息。类似我们在docker commit 时候使用-a参数指定的信息
        
      3. RUM

        # 格式:
        RUN <command>										(shell模式)
        RUN["executable", "param1", "param2"]。			   (exec 模式)
        # 解释:表示当前镜像构建时候运行的命令
        注释:
        shell模式:类似于  /bin/bash -c command
        举例: RUN echo hello
        exec  模式:类似于 RUN ["/bin/bash", "-c", "command"]
        举例: RUN ["echo", "hello"]
        
      4. EXPOSE

        # 格式:EXPOSE <port> [<port>...]
        # 解释:设置Docker容器对外暴露的端口号,Docker为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容器时增加-p或者-P参数对容器的端口进行分配。
        
      5. ENTRYPOINT

        # 格式:
        # ENTRYPOINT ["executable", "param1","param2"] 		(exec 模式)
        # ENTRYPOINT command param1 param2 						(shell模式)
        # 解释:每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
        
    6. 文件编辑指令详解
      1. ADD

        # 格式:
        ADD <src>... <dest>
        ADD ["<src>",... "<dest>"]
        # 解释:将指定的 <src> 文件复制到容器文件系统中的 <dest> 
        # src 指的是宿主机,dest 指的是容器
        # 如果源文件是个压缩文件,则docker会自动帮解压到指定的容器中(无论目标是文件还是目录,都会当成目录处理)。
        
      2. COPY

        # 格式:
        COPY <src>... <dest>
        COPY ["<src>",... "<dest>"]
        # 解释:单纯复制文件场景,Docker推荐使用COPY  
        
      3. VOLUME

        # 格式:
        VOLUME ["/data"]
        # 解释:VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点,通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。
        # 举例:
        VOLUME ["/var/lib/tomcat7/webapps/"]
        
      4. 实践

        # ADD 拷贝普通文件
        ADD ["sources.list","/etc/apt/sources.list"]
        # ADD 拷贝压缩文件
        ADD ["linshi.tar.gz","/nihao/"]
        
        # COPY 增加文件
        COPY index.html /var/www/html/
        
        # 在上一个Dockerfile文件内容基础上,在COPY下面增加一个VOLUME
        VOLUME ["/data/"]
        
    7. 环境指令详解
      1. ENV

        # 格式:
        ENV <key> <value>
        ENV <key>=<value> ...
        # 解释:设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定
        
      2. WORKDIR

        # 格式:
        WORKDIR /path/to/workdir					(shell 模式)
        # 解释:切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。 相当于cd,可以多次切换(相当于cd命令), 也可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如
        #举例:
        WORKDIR /a
        WORKDIR b
        WORKDIR c
        RUN pwd
        # 则最终路径为 /a/b/c。
        
      3. 实践

        # 在上一个Dockerfile文件内容基础上,在RUN下面增加一个ENV
        ENV NIHAO=helloworld
        
        # 在上一个Dockerfile文件内容基础上,在RUN下面增加一个WORKDIR
        WORKDIR /nihao/xlz/
        RUN ["touch","xlz.txt"]
        
    8. Dockerfile构建过程
      从基础镜像1运行一个容器A
      遇到一条Dockerfile指令,都对容器A做一次修改操作
      执行完毕一条命令,提交生成一个新镜像2
      再基于新的镜像2运行一个容器B
      遇到一条Dockerfile指令,都对容器B做一次修改操作
      执行完毕一条命令,提交生成一个新镜像3
      

      构建历史:

      查看构建过程查看

      docker history
      

      清理构建缓存:

      docker system prune
      docker system prune --volumes
      
    9. Dockerfile案例实践
      1. 环境分析

        1、软件源文件,使用国外源,速度太慢,所以我们可以自己使用国内的软件源。
        因为我们在手工部署的时候,使用的是官方(国外)的源,所以为了部署快一点呢,我使用国内的源。
        2、软件安装,涉及到了各种软件
        3、软件运行涉及到了软件的运行目录
        4、项目访问,涉及到端口
        
      2. 关键点分析

        1、增加文件,使用 ADD 或者 COPY 指令
        2、安装软件,使用 RUN 指令
        3、命令运行,使用 WORKDIR 指令
        4、项目端口,使用 EXPOSE 指令
        5、容器运行,使用 ENTRYPOINT
        
      3. 定制方案

        1、基于ubuntu-ssh基础镜像进行操作
        2、安装环境基本软件
        3、定制命令工作目录,并增加文件
        4、开放端口
        5、执行项目
        
      4. Dockerfile定制

        # 进入标准目录
        mkdir /docker/images/django -p
        cd /docker/images/django
        
        # 第一版dockerfile内容
        # 构建一个基于ubuntu的docker定制镜像
        # 基础镜像
        FROM ubuntu-ssh
        # 镜像作者
        MAINTAINER President.Wang 000000@qq.com
        # 执行命令
        RUN apt-get install python3-pip -y
        # 增加文件
        ADD Django-2.1.2.tar.gz /data/softs/
        WORKDIR /data/softs/Django-2.1.2
        RUN python3 setup.py install
        
        # 创建项目
        WORKDIR /data/server
        RUN django-admin startproject xlz
        # 创建应用
        WORKDIR /data/server/xlz
        RUN python3 manage.py startapp test1
        RUN sed -i "/staticfiles/a\  'test1'," xlz/settings.py
        # 配置应用
        COPY views.py /data/server/xlz/test1/
        RUN sed -i '/t p/a\from test1.views import *' xlz/urls.py
        RUN sed -i "/\]/i\    path('hello/', hello)," xlz/urls.py
        # 启动项目
        RUN sed -i "s#S = \[\]#S = \['*'\]#" xlz/settings.py
        # 对外端口
        EXPOSE 8000
        # 运行项目
        ENTRYPOINT ["python3","manage.py","runserver","0.0.0.0:8000"]
        
      5. 效果查看

        # 构建镜像
        docker build -t ubuntu-django .
        # 运行镜像
        docker run -p 8000:8000 -d ubuntu-django
        
    10. 应用

      # 启动运行基本系统
      FROM ubuntu
      # 安装环境
      ADD ./requeriments.text /home
      # 进入/home
      WORKDIR /home
      # 安装
      RUN apt-get update && apt-get install python3-pip && pip install django==1.11.11
      RUM pip install -r requeriments.text
      # 导入项目文件
      ADD ./meiduo_mall /home/meiduo_mall
      # 进入/home/meiduo_mall
      WORKDIR /home/meiduo_mall
      # 指定对外开发
      EXPOSE 8001
      ENRYPOINT uwsgi --ini uwsgi.ini
      
    展开全文
  • Dockerfile

    万次阅读 2020-03-31 23:43:50
    作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker ...

    Dockerfile

    关键字 作用 备注
    FROM 指定父镜像 指定dockerfile基于那个image构建
    MAINTAINER 作者信息 用来标明这个dockerfile谁写的
    LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
    RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
    CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
    ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
    COPY 复制文件 build的时候复制文件到image中
    ADD 添加文件 build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
    ENV 环境变量 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
    ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
    VOLUME 定义外部可以挂载的数据卷 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
    EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
    WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
    USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
    HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
    ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
    STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
    SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
    展开全文
  • dockerfile

    2020-01-07 23:18:12
    作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker ...

    Dockerfile

    关键字 作用 备注
    FROM 指定父镜像 指定dockerfile基于那个image构建
    MAINTAINER 作者信息 用来标明这个dockerfile谁写的
    LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
    RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
    CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
    ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
    COPY 复制文件 build的时候复制文件到image中
    ADD 添加文件 build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
    ENV 环境变量 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
    ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
    VOLUME 定义外部可以挂载的数据卷 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
    EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
    WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
    USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
    HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
    ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
    STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
    SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
    展开全文
  • dockerFile

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

    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 ~/

     

    转载于:https://www.cnblogs.com/xwzp/p/8872233.html

    展开全文
  • DockerFile

    2021-04-20 15:57:22
    Docker定制镜像 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。...Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置、文件。**如果我们可以把

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,592
精华内容 3,836
关键字:

dockerfile作用