zoukankan      html  css  js  c++  java
  • docker镜像

    创建镜像

    镜像概述
    docker镜像是docker容器技术的核心,也是应用打包构建发布的标准格式。一个完整的镜像可以支撑多个容器的运行。

    镜像构建方式

    • 基于已有的容器创建镜像
    • 基于本地模板创建镜像
    • 基于dockerfile创建镜像

    镜像构建

    • 基于已有容器创建镜像 好比于一个容器的导入与导出
      基于现有镜像创建主要使用docker commit 命令,也就是将一个容器里运行的程序以及环境打包成一个新的镜像
      格式:docker commit (选项) 容器 ID/名称 仓库名称:[标签]

      -m:说明信息
      -a:作者信息
      -p:生成过程中停止容器的运行

      [root@localhost ~]# docker run -it centos:7 /bin/bash  #启动并进入容器
      [root@94ae368b757b /]# touch whml  创建一个文件
      [root@localhost ~]# docker commit -m "whml test images" -a "whml" 94ae368b757b centos:new
      -m :说明信息
      -a :作者  
      #打包成一个名字叫做centos:new的镜像
      [root@localhost ~]# docker images
      REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
      centos       new       4eedfa364e2a   About a minute ago   589MB
      [root@localhost ~]# docker run -it centos:new /bin/bash
      [root@672f7166243b /]# ls
      whml
      
    • 基于本地模板导入镜像
      也就是别人导出一个新的镜像,自己在导入使用

    • 基于Dockerfile创建镜像
      Docker镜像结构:镜像是由多层堆叠构成的(可以使用命令docker history 镜像:标签来查看),Docker镜像默认存储在/var/lib/docker/目录中。容器其实就是在镜像最上面加了一层读写层。

      docker 镜像特点:

      • dockerfile中的每一个指令都会创建一个新的镜像层
      • 镜像层可以被缓存和复用,类似于快照
      • 当Dockerfile中的指令被修改,复制的文件变化或者构建镜像时指定的变量更换,那对应的镜像层换粗也将会失效
      • 某一层的镜像缓存失效,后面所有的镜像缓存层都会失效
      • 镜像层是不可变的,如果某一层中添加一个文件,然后某一层中删除它,则镜像中依然会包含该文件,只是这个文件在docker容器中不可见了

      dockerfile介绍:
      Dockerfile是一种可以被Docker程序解释的脚本,由多条指令堆叠组成,每条指令都对应linux下的一条命令。
      Dockerfile结构:基础镜像信息,维护者信息,镜像操作,容器启动执行指令

      Dockerfile详解

      • Dockerfile 的指令根据作用分为:构建指令:构建生成镜像中使用的,不会在image容器上执行,设置指令:设置image属性。

      • from 镜像:Tag
        构建指令,必须指定且需要在dockerfile文件中其他指令的前面,后续的指令都依赖于改指令指定的image,from指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库

      • MAINYAINER 作者信息
        执行docker inspect可以查看

      • RUN指令
        run可以运行任何被基础image支持的命令。

      • CMD[“要运行的程序”,“参数1”,“参数2”]
        设置指令,容器启动时要执行的操作,只能在文件中存在一次,多条只执行最后一条

      • ENTRYPOINT(设置container启动执行的操作)
        设置指令,指定容器启动时执行的命令,可以多次所设置,但只有最后一个有效。

      • USER 用户名/UID
        设置指令,设置启动容器的用户,默认是root

      • EXPOSE端口(暴露端口)

      • ENV环境变量,变量值
        在image中设置一个环境变量,可以通过docker inspect 查看 或者docker run --env key=value 设置修改环境变量

      • Copy 源文件 目标文件
        copy命令用于将于Dockerfile所在目录中的文件在镜像构建阶段从宿主机拷贝到镜像中,可以将文件直接复制到镜像中,将目录中的内容复制到镜像中不包括目录

      • ADD源文件 目标文件
        更高级的复制,相对于copy,可以压缩文件并把它们添加到镜像中,还可以从URL拷贝文件到镜像中,但是会创建更多的镜像层,镜像的size会更大。

      • Volume ["目录"]
        关联数据卷的

      • workdir
        设置指令相当于cd命令。

      • onbuild命令
        指定一所生产的镜像作为一个基础镜像时所要运行的命令

      • HealthCheck
        健康检查
        https://www.cnblogs.com/ityouknow/p/8595384.html

      • Dockerfile构建SSHD镜像(包含ssh服务,包括密钥对连接)
        基于Dockerfile制作镜像,首先要建立工作目录,然后创建Dockerfile文件,需要运行的脚本,以及要复制到容器中的文件

        docker images  #查看已有镜像
        mkdir sshd    #创建一个新的目录
        ssh-keygen    #创意一个密钥对
        cp .ssh/id_rsa.pud sshd/  #将密钥对复制到目录中
        cd sshd  
        vim Dockerfile  #目录中写入Dockerfile
        ls
        Dockerfile id_rsa.pud    #查看目录内容
        docker build -t sshd.new .   #.在当前目录执行这条命令
        docker images sshd:new  #查看创建的镜像
        docker run -p -d 2222:22 --name sshd-test --restart=always sshd:new  #启动这个镜像容器,并赋值端口
        netstat -lnpt | grep :22  #查看镜像端口
        ssh localhost -p 2222  #用ssh连接本机localhost端口2222并进入,因为有密钥
        
    • Dockerfile构建httpd镜像

      #开局都是要创建一个新的目录,在目录里创建一个新的Dockerfile文件
      docker build -t sshd.new .
      #主要是Dockerfile文件内容
      
    sshd.Dockerfile
    #基于镜像
    FROM centos:7
    
    #镜像作者信息
    MAINTAINER whml<whml@163.com>
    
    #安装相关依赖包
    RUN yum -y install openssh-server net-tools openssh-devel lsof telnet
    
    #开始安装
    RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
    RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
    RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    ADD id_rsa.pud /root/.ssh/authorized_keys
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    #打开暴露端口
    EXPOSE 22
    
    #启动
    CMD ["/usr/sbin/sshd" , "-D"]
    
    
    • 基于Dockerfile创建mysql
    • 基于Dockerfile创建Tomcat
    • 基于Dockerfile创建nginx
      ...
  • 相关阅读:
    IIS大量出现Connections_Refused的错误提示
    SQL分类汇总统计聚合查询
    PHP_保留两位小数并且四舍五入_保留两位小数并且不四舍五入
    忘记Ucenter创始人密码的最快速解决方法
    NetBeans无法使用编码GBK安全地打开该文件
    PHP连续输出字母AZ
    C# 和 Linux 时间戳转换
    php中使用header在下载时乱码问题解决
    PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]
    一些PHP性能优化
  • 原文地址:https://www.cnblogs.com/wml3030/p/15458745.html
Copyright © 2011-2022 走看看