• Docker 制作镜像


    docker镜像制作的两种方法:
    1,基于docker commit 制作镜像
    2,基于dockerfile制作镜像,为主流镜像制作方式。

    ▪docker镜像命名规则:仓库IP:端口号/分类名/镜像名:标签
    例:192.168.0.1:5000/web/nginx:v1
           192.168.0.1:5000/db/mysql:v1

    基于基础镜像定制后,使用commit制作自定义镜像
    1,使用docker commit利用运行的容器来制作自定义镜像
    docker commit 容器id centos7_ifconfig #简单制作一个有ifconfig命令的镜像

    2,查看制作的镜像信息
    docker inspect centos7_ifconfig

    3,使用自定义的镜像来启动容器
    docker run -it centos7_ifconfig /bin/bash
    ifconfig #测试一下是否支持ifconfig命令

    4,使用自定义的镜像来启动后台容器
    docker run -d centos7_ifconfig /bin/bash -c 'while true;do echo hello; sleep 3; done'

    ★以tomcat容器为例:

    ▶启动 tomcat 容器
    docker run -it -p 主机端口:容器端口 镜像名称

    ▶修改tomcat
    保存提交重命名镜像
    docker commit -a=”作者” -m=”备注” 容器ID 镜像名:tag
    启动新的镜像

    ●例:
    ①连接tomcat容器:docker exec -it 容器id /bin/bash #需要提供一个终端
    ②修改webapps下的内容。
    提交:docker commit -a="mydocker_tomcat" -m="delete examples" 容器id nm/tomcat:1.0

    基于DockerFile制作自定义镜像

    (1),DockerFile 文件
    Docker可以通过从Dockerfile中读取指令来自动构建镜像。
    Dockerfile是一个文本文档,包含用户可以在命令行上调用的所有命令,以组合镜像。
    使用docker build,docker即可启动构建工作,构建过程为连续执行DockerFile中的
    多个命令行指令。
    •官方例:
    FROM scratch
    ADD centos-7-x86_64-docker.tar.xz /

    LABEL org.label-schema.schema-version="1.0"
    org.label-schema.name="CentOS Base Image"
    org.label-schema.vendor="CentOS"
    org.label-schema.license="GPLv2"
    org.label-schema.build-date="20190305"

    CMD ["/bin/bash"]

    (2),DockerFile 基础语法
    •关键字指令必须为大写字母,且至少需要一个参数;
    •关键字指令从上到下顺序执行;
    •#表示注释;
    •每条指令执行都会创建一个镜像层;

    (3),DockerFile 执行流程
    •docker从基础镜像运行一个容器。
    •执行一条指令并对容器做出修改。
    •执行类似docker commit的操作,提交一个新的镜像层。
    •docker再基于刚刚提交的镜像,运行一个新容器。
    •执行dockerfile中的下一条指令直到所有的指令都执行完成。

    (4),DockerFile 关键字指令

    FROM : 初始化新的构建阶段,设置基本镜像。即新镜像是基于那个基本镜像。
    MAINTAINER(过期): 维护者指令,设置新镜像的作者信息等。
    RUN: 将在当前镜像之上的新层中执行的shell命令,并提交结果。
    EXPOSE: 容器在运行时监听指定的网络端口,即容器运行的服务端口。EXPORT不会让主机访问容器的端口。
    WORKDIR: 为文件中跟随它的任何RUN、CMD、ENTRYPONT、COPY和ADD指令设置工作目录。
    ENV: 设置环境变量
    ADD: 复制文件,并将它们添加到镜像文件系统的指定目录。
    COPY: 类似ADD,向镜像中拷贝文件或目录。
    VOLUME: 设置数据卷
    CMD: 一个文件中只能有一条CMD指令。若列出了多个CMD,则只有最后一个CMD生效。
    ENTRYPOINT: 类似CMD,镜像启动时运行的命令,不可替换。若有多个命令,则仅最后一个生效。
    ONBUILD : 当镜像被用作另一个构建的基础时,ONBUILD指令在镜像中添加了一个稍后要执行的触发指令。
    USER: 为RUN、CMD和ENTRYPOINT执行命令指定运行用户.
    HEALTHCHECK:容器中服务健康检查

    ●阿里云镜像搜索:https://cr.console.aliyun.com/cn-qingdao/instances/images


    (5)docker制作镜像示例1(Centos镜像)

    ★自定义镜像 centos
    1、编写DockerFile 文件
    2、使用docker build 构建镜像
    3、使用docker run 创建容器

    ★DockerFile

    FROM centos:mytag
    LABEL author="xxx@zzz.com" #或:MAINTAINER liming liming_01@163.com
    ENV myhome /tmp
    WORKDIR $myhome
    RUN yum -y install vim
    COPY test.txt /etc/ #拷贝test.txt到etc下。
    RUN mkdir /datavolume
    VOLUME /datavolume #设置一个数据卷。此时,主机中的数据卷自动生成。
    
    CMD /bin/bash

    ★构建镜像

    docker build -f dockerfile_path -t image:tag . #最后的.勿忘。
    例:docker build -f /mydocker/DockerFile -t my_centos:1.1 .
    测试:docker run -it my_centos:1.1 /bin/bash


    (6)docker制作镜像示例2(tomcat镜像)
    环境:centos + jdk8 + tomcat + vim

     1 #选择基础镜像
     2 FROM centos
     3 #设置描述信息
     4 LABEL maintainer="xxx@zzz.com"
     5 #测试COPY从主机拷贝文件到容器
     6 COPY testcp.txt /usr/local/testcp.txt
     7 #在基础镜像上安装软件 apache-tomcat-9.0.13.tar.gz 和 jdk-8u181-linux-x64.tar.gz
     8 ADD jdk-8u181-linux-x64.tar.gz /usr/local/ #从主机的当前路径拷贝jdk-8u181到容器的/usr/local/
     9 ADD apache-tomcat-9.0.13.tar.gz /usr/local/
    10 #安装 vim 编辑器
    11 RUN yum -y install vim
    12 #设置 容器数据卷
    13 RUN mkdir /dataVolume
    14 VOLUME /dataVolume
    15 
    16 #设置工作路径
    17 ENV MYPATH /usr/local
    18 WORKDIR $MYPATH
    19 #设置环境变量
    20 ENV JAVA_HOME /usr/local/jdk1.8.0_181
    21 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    22 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.13
    23 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.13
    24 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    25 #容器监听端口
    26 EXPOSE 8080
    27 #启动时运行 tomcat
    28 CMD /usr/local/apache-tomcat-9.0.13/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.13/bin/logs/catalina.out
    View Code

    ★构建镜像

    docker build -t my_tomcat . #省略的参数,从当前目录找。

    ★利用当前镜像创建容器。
    docker run -d -p 8888:8080 --name mytomcat01 mytomcat

    ★附:

    docker build [OPTIONS] PATH | URL | -

    OPTIONS说明:
    -f : 指定要使用的Dockerfile路径;
    --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
    --build-arg=[] :设置镜像创建时的变量;
    --cpu-shares :设置 cpu 使用权重;
    --cpu-period :限制 CPU CFS周期;
    --cpu-quota :限制 CPU CFS配额;
    --cpuset-cpus :指定使用的CPU id;
    --cpuset-mems :指定使用的内存 id;
    --disable-content-trust :忽略校验,默认开启;
    --force-rm :设置镜像过程中删除中间容器;
    --isolation :使用容器隔离技术;
    --label=[] :设置镜像使用的元数据;
    -m :设置内存最大值;
    --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
    --no-cache :创建镜像的过程不使用缓存;
    --pull :尝试去更新镜像的新版本;
    --quiet, -q :安静模式,成功后只输出镜像 ID;
    --rm : 设置镜像成功后删除中间容器;
    --shm-size : 设置/dev/shm的大小,默认值是64M;
    --ulimit :Ulimit配置。
    --network: 默认 default。在构建期间设置RUN指令的网络模式
    例:
    docker build . #从当前文件读取docker file文件。
    docker build -t my_tomcat:tag01 -f /path/dockerfile #从指定路径读取dockerfile。
    docker build -t my_tomcat:tag02 -f http://www.test.com/dockerfile #从指定网址读取dockerfile。

  • 相关阅读:
    linux下将一个大的文件拆分成若干小文件
    linux远程下载文件 的两种方法之 ftp命令和scp命令
    Python正则表达式的七个使用范例
    isinstance()和type()
    “可变的”tuple
    Tomcat常用面试题
    Tomcat常用配置详解
    Java工程师该如何编写高效代码?
    收集100条实用的网络知识
    MySQL 19个规则数据库设计总结
  • 原文地址:https://www.cnblogs.com/mountain2011/p/11223452.html
Copyright © 2020-2023  润新知