• [置顶] docker--基础镜像和dockerfile


    制作基础镜像

    注意:需要在CentOS6下操作

    准备工作

    yum -y install febootstrap

    下载ISO镜像文件到服务器

    mkdir /mnt/centos6/

    mount -o loopCentOS-6.8-x86_64-bin-DVD1.iso /mnt/centos6/

    安装基础包

    febootstrap -i bash -i yum -i iputils -iiproute -i openssh-server  -i gcc -ilibgcc centos6 centos68file:///mnt/centos6/

     (-i 安装package, centos6 操作系统版本,centos68安装目录,最后是源地址,必须是http://、ftp://、file://、https://、"")

    配置

    cd centos68/

    vim etc/resolv.conf

    ; generated by /sbin/dhclient-script
    nameserver 114.114.114.114
    nameserver 8.8.8.8

    cp -rf /root/.bash_profile /root/.bashrcroot/

    vim root/.bashrc

    # .bashrc
    
    # User specific aliases and functions
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias ll='ls -l'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
        ./etc/bashrc
    fi

    chroot ./

    yum upgrade -y

    如果不需要使用sshd服务,下面不需要配置

    生成sshd的key:service sshd restart

    配置sshd

    etc/ssh/sshd_conf修改

    UseDNS no

    cat etc/pam.d/sshd

    #%PAM-1.0
    auth      required pam_sepermit.so
    auth      include      password-auth
    account   required     pam_nologin.so
    account   include      password-auth
    password  include      password-auth
    # pam_selinux.so close should be the firstsession rule
    #session   required     pam_selinux.so close
    #session   required     pam_loginuid.so
    # pam_selinux.so open should only befollowed by sessions to be executed in the user context
    #session   required     pam_selinux.so openenv_params
    session   optional     pam_keyinit.so forcerevoke
    session   include      password-auth

    yum clean all

    exit


    删除不要的目录:rm -rf dev/ index.txt media/ mnt/proc/ selinux/ srv/ sys/ boot/

    更改时区为中国cp /usr/share/zoneinfo/Asia/Shanghaietc/localtime

    echo > root/.viminfo

    echo > root/.bash_history

    压缩打包成tar.gz格式

    tar --numeric-owner -zcvf /opt/centos6.tar.gz/

    需要注意的是,文件打包支持的类型只有(.tar,.tar.gz, .tgz, .bzip, .tar.xz, or .txz)这几种。

    导入到docker

    注意:在docker机器上执行

    dockerimport centos6.tar.gz centos6

    编写Dockerfile

    注意:在docker机器上执行

    cd dockerfile/nginx

    注意:下面的env、cgroup的影响范围仅限于在dockerfile中

    from centos6:20170620
    maintainer lykops
    env PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin/
    env PWD /root/
    add nginx.repo /etc/yum.repos.d/
    run yum install nginx -y
    run echo /usr/sbin/nginx >>/etc/rc.local
    run echo 'sleep 50000000000000000' >>/etc/rc.local
    cmd sh /etc/rc.local

    命令不应该立即退出,否则造成容器关闭

    生成image

    docker build -t centos6:nginx .

    docker create centos6:nginx

    dockerfile基础知识

    概念

        Dockerfile来解决自动化部署的问题

    Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。

    Dockerfile的指令是忽略大小写的,建议使用大写,使用 # 作为注释,每一行只支持一条指令,每条指令可以携带多个参数。

    Dockerfile的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。

    基本命令

    1、FROM

    构建指令,指定基础image,后续的指令都依赖于该指令指定的image。

    FROM <image>【:<tag>】

    2、MAINTAINER

    构建指令,用于将image的制作者相关的信息写入到image中。

    MAINTAINER<name> 

    3、RUN

    构建指令,RUN可以运行任何被基础image支持的命令。

       RUN <command> 

       RUN ["executable", "param1", "param2" ... ]

    4、CMD

    设置指令,用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条

    CMD ["executable","param1","param2"]

            CMD command param1 param2

    当Dockerfile指定了ENTRYPOINT,那么使用下面的格式:

    CMD ["param1","param2"]

    ENTRYPOINT指定的是一个可执行的脚本或者程序的路径,该指定的脚本或者程序将会以param1和param2作为参数执行。所以如果CMD指令使用上面的形式,那么Dockerfile中必须要有配套的ENTRYPOINT。

    5、ENTRYPOINT

    设置指令,指定容器启动时执行的命令,可以多次设置,但只有最后一个有效。

    ENTRYPOINT["executable", "param1", "param2"]

    ENTRYPOINTcommand param1 param2

    该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。

    独自使用时,CMD指令和ENTRYPOINT会互相覆盖,只有最后一个CMD或者ENTRYPOINT有效。

    CMD指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT指令只能使用JSON方式指定执行命令,而不能指定参数。

       FROM ubuntu 

       CMD ["-l"] 

        ENTRYPOINT ["/usr/bin/ls"] 

    6、USER

    设置指令,设置启动容器的用户,默认是root用户。

       USER daemon

    7、EXPOSE

    设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器时,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器时指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会映射成宿主机器中的一个端口号。端口映射是docker比较重要的一个功能,原因在于每次运行容器时,容器的IP地址随机生成的。

    8、ENV

    构建指令,在image中设置一个环境变量。

    ENV <key><value> 

    设置了后,后续的RUN命令都可以使用,container启动后,可以通过docker inspect查看这个环境变量,也可以通过在docker run --env key=value时设置或修改环境变量。

    假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:

    ENV JAVA_HOME /path/to/java/dirent

    9、ADD

    构建指令,所有拷贝到容器中的文件和文件夹权限为0755,uid和gid为0;如果是一个目录,会将该目录下的所有文件添加到容器中,不包括目录;如果文件是可识别的压缩格式,则docker会自动解压;如果<src>是文件且<dest>中不使用斜杠结束,则会将<dest>视为文件,<src>的内容会写入<dest>;如果<src>是文件且<dest>中使用斜杠结束,则会<src>文件拷贝到<dest>目录下。

    10、VOLUME

    设置指令。

       VOLUME ["<mountpoint>"] 

    11、WORKDIR(切换目录)

    设置指令,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效。

    WORKDIR /path/to/workdir 

  • 相关阅读:
    PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
    Unity3d + PureMVC框架搭建
    PureMVC--一款多平台MVC框架
    如何在本地搭建IIS服务器
    EasyTouch5初步用法和其中的一个Bug
    kubernetes基础知识点
    CKA认证考试题
    通过接口获取手机号所属城市
    程序员刷题必备
    文件的相对路径详解
  • 原文地址:https://www.cnblogs.com/lykops/p/7348005.html
Copyright © 2020-2023  润新知