• Docker之Docker文件,一篇就够了


    一、Dockerfile文件的概要

    指令 含义
    FROM镜像

    指定新镜像所基于的镜像,第一条指令必须为FROM指令没创建

    一个镜像就需要一条FROM指令

    MAINTAINER 说明新镜像的维护人信息
    RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
    CMD["要运行的程序"参数1""参数2] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
    EXPOSE端口号 指定新镜像加载到Docker时要开启的端口
    ENV环境变量变量值 设置一个环境变量的值,会被后面的RUN使用
    ADD源文件/目录目标文件/目录 将源文件辅助到目标文件,源文件要Dockerfile位于相同目录中,或者是一个url
    COPY 源文件、目录文件目录 将本地主机上的文件、目录复制到目标地点,源文件。目录要和DOCKERfile在同一个目录中
    VOLUME["目录"] 在容器中创建一个挂载带你
    user用户名/uid 指定运行容器时的用户
    WORKDIR路径 为后续的RUN/CMD/ENTRYPOINT指定工作目录
    ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
    HEALTHCHECK 健康检查

    注:ADD命令还有解压的功能

    二、构建ssh服务镜像

    • docker exec 命令登录容器不需要密码,安全性比较低,为了提升安全性,可以构建ssh密钥服务镜像,来新建一个容器
    • 创建一个sshd目录,用于存放Dockerfile文件
    [root@server3 ~]# mkdir sshd
    [root@server3 ~]# cd sshd
    创建文件Dockerfile
    [root@server3 sshd]# vi Dockerfile
    
    FROM centos:7
    MAINTAINER The CentOS Project <cloud-centos>
    #更新容器的yum源
    RUN yum -y update
    #安装ssh和其他服务的软件包
    RUN yum -y install openssh* net-tools lsof telnet passwd
    #修改root用户密码
    RUN echo '123123' | passwd --stdin root
    #设置不使用ssh服务端的pam模块
    RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
    #创建非对称秘钥
    RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    #s表示空格+表示匹配一次或多次,关闭pam.d机制里的ssh会话模块
    RUN sed -i '/^sessions+requireds+pam_loginuid.so/s/^ /#/' /etc/pam.d/sshd
    #创建ssh工作目录并给予权限
    RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
    #开放端口
    EXPOSE 22
    #sshd服务 
    CMD ["/usr/sbin/sshd","-D"]  
    • 生成镜像
    [root@server3 sshd]# docker build -t sshd:new .
    • 启动容器并修改root密码
    [root@server3 sshd]# docker run -d -P sshd:new  #-P随机分配一个端口,起始端口号为32768
    d847901a28bedde6f6fd90151e00fd65b5e7e5f134dcc189ab0b37b4a3a6d0f4
    
    •   登录测试

     三、构建systemctl镜像

    • centos容器镜像里面没有systemctl命令,不能使用此命令管理服务,构建镜像后才能使用

    1、创建目录,用于存放Dockerfile文件,并配置Dockerfile  

    mkdir /systemctl
    cd /systemctl
    vi Dockerfile 
    #基于ssh服务搭建systemctl服务
    FROM sshd:new
    #基于容器  
    ENV container docker
    RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i== 
    systemd-tmpfiles-setup.service ] || rm -f $i; done); 
    rm- f /lib/systemd/system/multi-user.target.wants/*; 
    rm -f /etc/systemd/system/*.wants/*; 
    rm -f /lib/systemd/system/local-fs.target.wants/*; 
    rm -f /lib/systemd/system/sockets.target.wants/*udev*; 
    rm -f /lib/systemd/system/sockets.target.wants/*initctl*; 
    rm -f /lib/systemd/system/basic.target.wants/*; 
    rm -f /lib/systemd/system/anaconda.target.wants/*;
    VOLUME ["/sys/fs/cgroup"]
    CMD ["/usr/sbin/init"]
    

    2、生成镜像,并启动容器  

    docker build -t systemd:new .
    
    #privateged container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户
    docker run --privileged -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:new /sbin/init

    3、登录容器后进行测试

     四、构建nginx镜像

    • 创建目录,存放Dockerfile文件,并进行配置
    mkdir nginx
    cd nginx
    将nginx-1.12.2源码包放在nginx目录下
    FROM centos:7
    MAINTAINER this is nginx
    RUN yum install -y gcc gcc-c++ make pcre-devel zlib-devel
    RUN useradd -M -s /sbin/nologin nginx
    ADD nginx-1.12.2.tar.gz /opt/
    WORKDIR /opt/nginx-1.12.2/
    RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
    ENV PATH /usr/local/nginx/sbin:$PATH
    #指定http和https端口
    EXPOSE 443
    EXPOSE 80
    #关闭守护进程,这里必须设置
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    ADD run.sh /run.sh
    RUN chmod 775 /run.sh
    CMD ["/run.sh"]  
    • 生成镜像,并启动镜像
    [root@server3 nginx]# docker build -t nginx:new .
    Sending build context to Docker daemon  986.1kB
    Step 1/14 : FROM centos:7
     ---> 8652b9f0cb4c
    Step 2/14 : MAINTAINER this is nginx
    [root@server3 nginx]# docker run -d -P nginx:new
    0fee269b45f4c368d06517239e8a4020af58fcfca9c34cc95e2d77033244eeb8
    

     

    •  在浏览器中访问

     

     五、构建tomcat镜像

    • 创建目录,存放Dockerfile文件,并对其进行配置
    mkdir tomcat
    cd tomcat#将jdk-8u91-linux-x64.tar.gz、apache-tomcat-9.0.16.tar.gz放在目录里
    FROM centos:7
    MAINTAINER this is tomcat
    ADD jdk-8u91-linux-x64.tar.gz /opt  #将压缩包解压,放在/opt目录下
    WORKDIR /opt/jdk1.8.0_91/      #进入目录
    WORKDIR /opt
    RUN mv jdk1.8.0_91 /usr/local/java    #重命名方便使用
    ENV JAVA_HOME /usr/local/java     #设置环境变量
    ENV JRE_HOME /usr/local/java/jre
    ENV CLASSPATH /usr/local/java/lib:/usr/local/java/jre/lib
    ENV PATH /usr/local/java/bin:$PATH
    ADD apache-tomcat-8.5.16.tar.gz /opt   #解压
    WORKDIR /opt    
    RUN mv apache-tomcat-8.5.16 /usr/local/tomcat8
    RUN /usr/local/tomcat8/bin/startup.sh
    EXPOSE 8080   #开放端口好
    ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]   #启动服务  
    • 创建镜像和容器
    docker build -t tomcat.new .
    docker run -d -P tomcat.new
    • 查看容器状态,并查看端口号,用浏览器对其进行测试

  • 相关阅读:
    【洛谷P3374】【模板】树状数组 1
    【vijos1460】拉力赛
    NOIp2013货车运输
    【codevs1519】过路费
    【codevs1036】商务旅行
    【codevs2370】小机房的树
    【洛谷P3398】仓鼠找sugar
    【洛谷P2912】[USACO08OCT]牧场散步Pasture Walking
    sql语句绑定方法
    单实例asm,修改主机名和ip地址后的重配置+集群重新配置GI
  • 原文地址:https://www.cnblogs.com/tianzhendengni/p/14049160.html
Copyright © 2020-2023  润新知