zoukankan      html  css  js  c++  java
  • Dockerfile创建镜像的方法以(推荐docker file这种方法)及Docker常用命令

    一、镜像制作的方法

    1、本地导入导出镜像

    导出命令

    这里默认是把文件导出到当前运行shell的位置,后面跟的是导出路径和文件名

    docker save (imageId) > (fileName).tar
    
    

    导入命令

    后面跟的是导出文件的位置

    docker load < (fileName).tar
    
    

    2、docker commit 命令创建镜像副本

    下载一个centos镜像

    docker pull 镜像名
    例如:
    docker pull centos
    

    使用docker commit 来提交容器副本 -m 提交时的描述文字

    dock commit -m 容器 镜像名
    例如:
    docker commit -m  centosid centos 
    或
    docker commit -m 'add centos images' centosid centos
    
    
    #提交当前容器到镜像: docker commit <容器ID> <NAME:VERSION>
    
    

    制作好的镜像可以上传官网(需要注册账号)

    docker login
    
    docker tag 镜像id  Dockerhub用户名/仓库名/镜像名 #打标签
    
    docker push Dockerhub用户名/仓库名/镜像名 #推送
    
    
    
    
    

    二、docker file方法制作镜像

    1、什么是docker file

    用来全自动构建镜像文件,命名为Dockerfile

    2、Dockerfile 文件编写指令及语法

    vi Dockerfile #编辑Dockerfile文件指令
    
    FROM       
    MAINTAINER   
    RUN       
    CMD      
    EXPOSE
    ENV
    ADD
    COPY
    ENTRYPOINT
    VOLUME
    USER
    WORKDIR
    ONBUILD
    
    
    
    

    3、语法

    1、FROM       <image>
      例子:FROM centos
      FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从Docker的公共库pull镜像下来。
      FROM必须是Dockerfile中非注释行的第一个指令,即一个Dockerfile从FROM语句开始
      FROM可以在一个DOCKERfile中出现多次,如果有需求在一个Dockerfile中创建多个镜像
    
    2、MAINTAINER   <name>
      例子:MAINTAINER zxg zhutoyearn@163.com
      指定创建镜像的用户
    
    3、RUN       <"executable","parm1","param2">
      两种使用方式:
    RUN
    RUN  "executable", "param1", "param2"
    
      例子:RUN yum install wget -y
     
    
      每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的 版本控制 。
    
      exec 方式会被解析为一个 JSON 数组,所以必须使用双引号而不是单引号。exec 方式不会调用一个命令 shell,所以也就不会继承相应的变量,如:
    
        RUN [ "echo", "$HOME" ]  #错误,这个个方法不会输出HOME变量,下面为正确方式
        RUN [ "sh", "-c", "echo", "$HOME" ]
     RUN 产生的缓存在下一次构建的适合是不会失效的,会被重用,可以使用--no-cache选择,即docker build-no-cache,如此便不会缓存
    
    
    
    4、CMD       <"executable",>
     三种使用方式:
    CMD  "executable","param1","param2"
    CMD  "param1","param2"
    CMD command param1 param2 (shell form)
     例子:CMD["nginx"] 
    CMD指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
    
    CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
    
    CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了,这个初学者容易弄混这个概念,这里简单注解一下。
    
    
      
    5、EXPOSE  <port>[<port>...]
      告诉docker服务端容器对外映射的本地端口,需要在docker run的使用使用-p或者-P选项生效
    
      例子:EXPOSE 80
    6、ENV
      ENV <key> <value>
      ENV <key>=<value>。。。
      指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留
    
      例子:ENV myname zxg
         ENV myhome beijing
         ENV myname="zxg" myhome=beijing
      
    7、ADD
      ADD <src>...<dest>
      ADD复制本地主机文件、目录或者远程文件URLS从并且添加到容器指定路径中
      支持通过Go的正则模式匹配,具体规则可参见Go filepath.Match
    
      例子:ADD hom* /mydir/  #adds all files starting with ”hom“
         ADD hom?.txt /mydir/ #?is replaced with any single character
        ADD index.html /usr/share/nginx/html/index.html
    
    
      注意如下:
    路径必须是绝对路径,如果 不存在,会自动创建对应目录
    路径必须是 Dockerfile 所在路径的相对路径
    如果是一个目录,只会复制目录下的内容,而目录本身则不会被复制
    
      
    
    8、COPY
      COPY <src>...<dest>
      COPY复制新文件或者目录并且添加到容器指定路径中,用法和ADD相同,唯一区别时不能指定远程文件URLS。
    
    9、ENTRYPOINT
      ENTRYPOINT "executable","param1","param2"
      ENTRYPOINT command param1 param2(shell form)
        配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint选项。
    
        每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效。
    
        Exec form ENTRYPOINT 例子
        通过ENTRYPOINT使用 exec form 方式设置稳定的默认命令和选项,而使用CMD添加默认之外经常被改动的选项。
    
        FROM ubuntu
        ENTRYPOINT ["top", "-b"]
        CMD ["-c"]
        通过 Dockerfile 使用ENTRYPOINT展示前台运行 Apache 服务
    
        FROM debian:stable
        RUN apt-get update && apt-get install -y --force-yes apache2
        EXPOSE 80 443
        VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
        ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
        Shell form ENTRYPOINT 例子
        这种方式会在/bin/sh -c中执行,会忽略任何CMD或者docker run命令行选项,为了确保docker stop能够停止长时间运行ENTRYPOINT的容器,确保执行的时候使用exec选项。
    
        FROM ubuntu
        ENTRYPOINT exec top -b
        如果在ENTRYPOINT忘记使用exec选项,则可以使用CMD补上:
    
        FROM ubuntu
        ENTRYPOINT top -b
        CMD --ignored-param1 # --ignored-param2 ... --ignored-param3 ... 依此类推
    
    
    10、VOLUME 
      VOLUME ["/data"]
      创建一个可以从本地主机或其他容器挂载的挂载点,后续具体介绍
    11、USER
      USER daemon
      指定运行容器时的用户名或UID,后续RUN、CMD、ENTERPOINT也会使用指定用户
    
    12、WORKDIR 
     WORKDIR /path/to/workdir
      为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
      WORKDIR /a
      WORKDIR b
      WORKDIR c
      RUN pwd
      最终路径是/a/b/c
      WORKDIR指令可以在ENV设置变量之后调用环境变量:
      ENV DIRPATH /path
      WORKDIR $DIRPATH/$DIRNAME
      最终路径则为 /path/$DIRNAME
     
    13、ONBUILD
      ONBUILD [INSTRUCTION]
      配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令
      例如:Dockerfile 使用如下的内容创建了镜像image-A:
        [...]
        ONBUILD ADD . /app/src
        ONBUILD RUN /usr/local/bin/python-build --dri /app/src
        [...]
    

    4、使用build命令制作镜像

    打包镜像 docker build 路径 -it 镜像名:版本号
    
    例如:
    
    sudo docker build . -t centos-lhq:1.0
    
    
    
    

    三、Docker常用命令

    #1.查看镜像
    
    sudo docker images
    
    #2.启动镜像
    
    sudo docker run -it -p 端口:8000(映射端口) 镜像id /bin/bash
    
    例如:
    
    sudo docker run -it -p 8000:8000 751a8f9dda48 /bin/bash
    
    #3.查看容器
    
    sudo docker ps -all
    
    #4.进入容器
    
    sudo docker exec -it 容器id /bin/bash 
    
    #5.停止容器
    
    docker stop <容器ID>
    
    #6.将外部文件拷贝到docker容器中
    
    例如:
    
    #将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
    
    sudo docker cp /www/runoob 96f7f14e99ab:/www/
    
    #7.扩展
    
    #导入sql文件
    
    mysql -uroot -p密码 #进入mysql
    
    use database; #使用数据库
    
    使用source 命令
    
    例如:
    source /root/StaticAnalyzer_so_and_sdk.sql;  导入sql文件
    
    
    
    
  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/lihouqi/p/13943674.html
Copyright © 2011-2022 走看看