zoukankan      html  css  js  c++  java
  • Dockerfile、push到阿里云

    docker 官网 contos6.8 Dockerfile

    FROM scratch
    MAINTAINER The CentOS Project <cloud-ops@centos.org>
    ADD c68-docker.tar.xz /
    LABEL name="CentOS Base Image" 
        vendor="CentOS" 
         license="GPLv2" 
         build-date="2016-06-02"
    
    # Default command
    CMD ["/bin/bash"]

    scratch[skrætʃ],所有镜像的基础镜像,类似于Java Object类。

    MAINTAINER,maintainer[meɪnˈteɪnə],译为维护者;作者、邮箱。
    LABEL[ˈleɪbl],译为标签;一些说明。


    Dockerfile语法

    1、每个命令必须大写,且命令后必须有参数,如 FROM scratch,命令FROM大写,后面有参数 scratch
    2、指令从上到下顺序执行
    3、# 表示注释
    4、每条命令都会创建一个镜像层


    执行Dockerfile大致流程

    1、从基础镜像运行一个容器
    2、执行Dockerfile一条指令对容器做出修改,并提交为一个新的镜像层
    3、基于新提交的镜像运行一个新容器
    4、...


    Dockerfile命令简介

    FROM  指定基础镜像
    MAINTAINER   镜像维护者的姓名和邮箱
    RUN   执行一些额外的命令,类比Java 类里的System.out.print();
    EXPOSE   暴露的端口号
    WORKDIR   工作目录,使用 -it 进入容器后的目录
    ENV   设置变量,如ENV MY_PATH /usr/mytest,WORKDIR $MY_PATH
    COPY   复制宿主机目录下的文件到镜像
    ADD   复制宿主机目录下的文件到镜像,并自动处理url和压缩包解压
    VOLUME   指定容器卷
    CMD   指定容器启动时要运行的命令;可以有多个CMD命令,但只有最后一个生效;CMD会被docker run之后的参数替换
    ENTRYPOINT   指定容器启动时要运行的命令;docker run之后的参数不会被替换,并追加行为
    ONBUILD   构建子镜像时,父镜像的onbuild会被触发


    修改官方 centos:7

    以精减版的centos为基础镜像,通过Dockerfile自定义一个centos,修改工作目录为/tmp,安装vim,安装ifconfig
    1、编写Dockerfile

    FROM centos:7
    
    MAINTAINER Prince <zhangrunwei@aliyun.com>
    
    ENV my_work_dir /tmp
    WORKDIR $my_work_dir
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    
    EXPOSE 80
    
    CMD echo "----------------successful----------------"
    CMD /bin/bash
    View Code

    2、构建新镜像

    docker build -f Dockerfile -t centos:myself .
    末尾的点不可少
    3、查看镜像历史
    docker history 镜像ID


    CMD会被docker run之后的参数替换

    docker下载的tomcat的DockerFile文件有以下内容:

    ENV CATALINA_HOME /usr/local/tomcat // 指定一个变量
    ENV PATH $CATALINA_HOME/bin:$PATH // 指定tomcat的可执行程序目录
    RUN mkdir -p "$CATALINA_HOME" // 创建目录
    WORKDIR $CATALINA_HOME // 指定工作目录
    EXPOSE 8080 // 指定端口号
    CMD ["catalina.sh", "run"] // 运行脚本,来启动tomcat

    运行docker run -it -p 8888:8080 tomcat:7.0 ls -l

    1、ls -l命令会替换CMD ["catalina.sh", "run"],所以tomcat并没有执行启动脚本
    2、只对工作目录执行了ls -l


    ENTRYPOINT 指定容器启动时要运行的命令;docker run之后的参数不会被替换,并追加行为

    1、Dockerfile

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

    linux命令行执行 curl www.baidu.com ,命令行返回form表单

    浏览器输入 http://ip.cn ,会返回自己的ip

    2、docker build -f ./Dockerfile -t centos:my .
    3、docker run centos:my  // 会返回自己的ip
    4、docker run contos:my -i // 添加参数-i,还要求返回报文头
    报错,原因,-i 替换了 ["curl", "-s", "http://ip.cn"],而-i只是一个参数并不是完整的命令。
    修改方案:
    修改Dockerfile的CMD为ENTRYPOINT


    ONBUILD示例

    1、Dockerfile文件

    FROM centos:7
    ONBUILD RUN echo "----------------father image onbuild----------------"

    2、docker build -f ./Dockerfile -t centos:father .

    3、Dockerfile文件

    FROM centos:father
    RUN echo "----------------son image onbuild----------------"

    4、docker build -f ./Dockerfile -t centos:son .  // 构建子容器时,父容器的onbuild会执行


    push/pull镜像之阿里云

    1、访问dev.aliyun.com,登陆用户名:prince_chuang
    2、创建镜像仓库后点击管理,看到操作指南

    登录阿里云Docker Registry
    docker login --username=prince_chuang registry.cn-hangzhou.aliyuncs.com
    设置镜像的版本号
    docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号]
    推送镜像到阿里
    docker push registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号]

    3、下载镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号]
  • 相关阅读:
    iOS,Android,WP, .NET通用AES加密算法
    iOS开发笔记-图标和图片大小官方最新标准
    因为对 Docker 不熟悉建了 N 多个 Nginx
    Docker 学习笔记 2019-05-27
    Linux Mint 19.1 安装 Docker 过程笔记
    W600 一块新的 KiCad PCB
    KiCad Mark 点名称
    一次乙型流感记录(2019-05-24)
    为什么不喜欢在 QQ 群里回答问题?
    Git 的两种忽略文件方式 gitignore 和 exclude
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/12966744.html
Copyright © 2011-2022 走看看