zoukankan      html  css  js  c++  java
  • docker-通过编辑dockerfile自动生成镜像

    DockerFile简介

    DockerFile可以说是一种可以被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了写好的各种各样DockerFile文件,当后期某个镜像有额外的需求时,只要在之前的DockerFile添加或者修改相应的操作即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦。
    

    https://docs.docker.com/engine/reference/builder/ #dockerfile使用文档

    DockerFile指令介绍

    ADD:拷贝,可以自动解压tar包;
    COPY:拷贝;
    ENV:设置环境变量;
    EXPOSE:暴露容器端口;
    FROM:父镜像;
    LABEL:标签,指定生成镜像的元数据,如作者及邮箱等;
    STOPSIGNAL:指定容器退出的信号值;当容器退出时,执行所指定的信号值,如正常退出信号值;
    USER:指定容器执行操作的用户;即Dockerfile中,USER以下的所有指令,全部都以USER所指定的用户身份去执行,并且将以指定用户的身份去进入到容器中;
    VOLUME:创建挂载点,用于挂载外部存储,将容器中的数据保存到外部存储上。避免数据丢失,一次可以创建多个挂载点;
    WORKDIR:在容器中,指定工作目录;WORKIDR指定一个如/apps/nginx,则WORKDIR后面的操作,如创建删除,将在/apps/nginx目录下执行;如果指定多个WORKDIR,如一个指定了/apps/nginx/,一个指定了linux,则最终的工作目录是/apps/nginx/linux;
    RUN:在容器中执行shell命令;当执行Dockerfile文件中的RUN指令时,会生成一个临时容器,在临时容器中执行完RUN所指定的命令后,删除容器(其实是把容器提交为一个镜像);LABEL、EXPOSE、ENV、USER、WORKDIR、VOLUME、ENTRYPOINT、CMD都会在创建镜像时产生一个临时容器;
    ENTRYPOINT:也是镜像启动为容器后,所执行的指令,如果ENTRYPOINT后面有CMD,则CMD中的指令将以参数形式传递给ENTRYPOINT;如ENTRYPOINT ["nginx"]  CMD["-g", "daemon off;"]
    CMD:镜像启动为容器后,默认执行的命令;
    
    注意:
    容器中必须有一个一直运行的进程(任务),否则容器执行完所指定的任务之后,就会退出;即容器如果没有一个守护进程(一直在前台运行的进程),则容器会直接退出,如果把守护进程kill掉,容器也会直接退出。
    

    DockerFile 制作编译版 nginx 1.16.1 镜像

    1、root@test:~# mkdir /opt/dockerfile/{web/{nginx/static,php,tomcat},system/{ubuntu,centos}} -pv    #创建dockerfile文件存放目录
    
    2、root@test:~# cd /opt/dockerfile/web/nginx/
    
    3、root@test:/opt/dockerfile/web/nginx# zip static.zip static/*    #nginx所需要的数据
    
    4、root@test:/opt/dockerfile/web/nginx# vim Dockerfile             #制作dockerfile
    #Docker image for nginx      #注释信息
    
    FROM centos:7.7.1908         #指定父镜像,基于哪个镜像基础之上做自定义构建;第一行必须为FROM,如果本地有该镜像,使用本地,如果本地没有,则去官方仓库下载
    
    LABEL maintainer="dongge 903662133@qq.com"   #指定维护者信息,邮箱
    
    ENV password 123456                          #创建环境变量,将变量传递给容器
    
    RUN yum install epel-release -y && yum install vim wget unzip tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y                   #run是执行shell命令,构建镜像时,shell命令必须是非交互式的
    
    ADD nginx-1.16.1.tar.gz /usr/local/src       #没生成容器时,是打到镜像中,生成为容器时,则打到容器的/usr/local/src中;ADD会对tar.gz的包自动解压,COPY不会,tar是linux自带命令,unzip不是;如果ADD的是配置文件,则会把容器中指定目录下同名的文件进行覆盖
    
    RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm /usr/local/src/nginx-1.16.1 -rf
    
    ADD static.zip /apps/nginx/html
    
    RUN cd /apps/nginx/html && unzip static.zip && rm static.zip -f
    
    EXPOSE 80 443                                         #暴露容器的80和443端口
    
    CMD ["/apps/nginx/sbin/nginx", "-g", "daemon off;"]   #镜像启动为容器后,指定默认执行的指令;在容器前台执行nginx进程,使之成为pid为1的守护进程
    
    5、root@test:/opt/dockerfile/web/nginx# docker build -t nginx:make-v1 .         #创建镜像,指定镜像的仓库名及tag号,指定Dockerfile文件所在路径为当前目录下
    
    6、oot@test:/opt/dockerfile/web/nginx# docker run -it -p 8686:80 nginx:make-v1  #创建容器
    
    注意事项:
    dockerfile如果前面执行过,并且前面的内容没有发生过变化,则前面内容不会再执行;如果是中间某步骤发生了变化,则发声变化之后的所有步骤都需要重新执行。
    
  • 相关阅读:
    会话 终端
    linux 守护进程(daemon process)代码-详细注释
    linux进程及进程控制
    POSIX 消息队列 之 概述 链接方式
    管道和FIFO 一
    菜鸟从零学编程(七)——搭建一个完整的Java开发环境
    谈《赢》之慧眼识人
    kgdb接收一个数据包详解
    MapReduce调度与执行原理之作业初始化
    System Request 进入KDB模式过程详解
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/13301748.html
Copyright © 2011-2022 走看看