• docker随笔5---dockfile


    创建新的镜像的有三种方式,一种是在原来的镜像基础上进行commit的修改产生新的镜像,一种是导入模版,还有一种就是通过dockerfile文件生成。

    下面是一个基于dockerfile生成含有ssh服务的实例:

    dockerfile脚本:

    #设置要使用的镜像(必填)
    FROM ubuntu:16.04
    #作者的信息(非必填)
    MAINTAINER      callmelx

    #运行命令,在镜像加载的时候 RUN apt
    -get update
    #安装ssh服务 RUN apt
    -get install -y openssh-server RUN mkdir -p /var/run/sshd RUN mkdir -p /var/run/.ssh #取消pam限制:注释session reuired pam_loginuid.so/ RUN sed -ri 's/session reuired pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
    #将本地的公钥载入容器中。。。

    宿主机的公钥生成:

    ssh-keygen -t rsa
    
    echo ~/.ssh/id_rsa.pub>>authorized_keys

    编写run.sh脚本

    run.sh

    #!/bin/bash
    /usr/sbin/sshd -D

    继续上面的dockerfile的编写

    #将本地宿主机的公钥导入容器 :ADD 【宿主机目录地址】   【容器目录地址】
    ADD authorized_keys  /root/.ssh/authorized_keys
    
    #增加自启动脚本
    ADD run.sh /run.sh
    
    #开放22端口
    EXPOSE 22
    
    #设置开机自动启动,如果指定命令的话cmd中的命令会被覆盖
    CMD  ["/run.sh"] #注意这里是双引号,否则不起作用。

     创建镜像:

    docker build -t  ssh:dockerfile(自定义镜像名)  .

    .表示当前目录下的dockerfile,build的后面必须是文件夹也就是 "." 

    进行add命令的时候,需要加载的文件放到dockerfile的文件夹内,外部文件无法访问,dockerfile在加载文件时,现在当前文件夹中查找文件,如果没有回到/var/lib/docker/tmp/ 中查找

    运行ssh服务

    docker run -d -p 10023:22 ssh:dockerfile 

    解释一下dockerfile中的指令:

    FROM:  第一行必须指定的基础镜像
    MAINTAINER: 维护者信息
    RUN:镜像的操作指令一种是以shell的方式运行,也可以指定终端
    ADD:将宿主机中的文件加载到容器中。跟COPY类似
    EXPOSE:告诉docker服务暴露的端口号
    CMD:容器启动时运行的指令,每个dockerfile只能有一个cmd,如果后多条,最后一条生效。

    建议:建议每次新建dockerfile的时候,最好新建一个文件夹,将所有需要加载的文件都放到该文件目录下。

  • 相关阅读:
    Android使用文件存储数据
    Android Sudoku第一版
    Android Preference
    Android Sudoku应用挂掉的问题
    Android刷新Dialog
    Android应用增加计时器
    使用Jquery的Ajax实现无刷新更新,修改,删除页面
    鼠标划过用户名时在鼠标右下角显示div展示用户资料
    网页宽高自适应大小
    学会读JQuery等JS插件源码
  • 原文地址:https://www.cnblogs.com/callmelx/p/11040438.html
Copyright © 2020-2023  润新知