构建Docker镜像实战案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建Docker镜像实战案例相关的知识,希望对你有一定的参考价值。

Dockerfile介绍

  • Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。
  • Dockerfile大致结构:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释。
  • Dockerfile操作指令:

FROM 镜像 : 指定新的镜像所基于的镜像
MAINTAINER 名字 :说明新镜像的维护人
RUN 命令 : 在所基于的镜像上执行命令,并提交到新的镜像中
CMD ["要运行的程序","参数1","参数2"] : 指定启动容器时要运行的命令或脚本
EXPOSE端口号 : 指定新镜像加载到Docker时要开启的端口
ENV环境变量 变量值 : 设置一个环境变量的值,会背后面的RUN用到
ADD源文件/目录 目标文件/目录 :将源文件复制到目标文件 ,源文件和Dockerfile位于同一目录
COPY源文件/目录 目标文件/目录 :将本地主机的源文件复制到目标目录,源文件和Dockerfile位于同一目录
VOLUME["目录"] : 在容器中创建一个挂载点
USER 用户名 /UID :指定运行容器时的用户
WORKDIR路径 : 为后续的RUN 、CMD、ENTRYPOINT 指定工作目录
ONBUILD命令 : 指定所生成的镜像作为一个基础镜像时所要运行的命令。

?

实战 下面详解三个案例:构建nginx、tomcat、mysql镜像

?

  • 构建Nginx镜像

  • 建立工作目录

    # docker pull centos    //下载基础镜像
    # mkdir nginx
    # cd nginx/
  • 创建Dockerfile文件

    # vim Dockerfile    //编写Dockerfile
    
    # 设置基础镜像
    FROM centos 
    # 维护该镜像的用户
    MAINTAINER this is nginx image <zkc>
    # 安装环境 下载软件包 并解压
    RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
    RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
    RUN tar zxvf nginx-1.9.7.tar.gz
    # 工作目录 编译安装
    WORKDIR nginx-1.9.7
    RUN ./configure --prefix=/usr/local/nginx && make && make install
    # 开启 80 和443端口
    EXPOSE 80
    EXPOSE 443
    # 修改配置文件,以非 deamon方式启动
    RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
    # 复制服务脚本并设置权限
    WORKDIR /root/nginx
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    # 启动容器时执行脚本
    CMD ["/run.sh"]
  • 编写执行脚本

    # vim run.sh
    #!/bin/bash
    /usr/local/nginx/sbin/nginx
  • 生成镜像

    # docker build -t nginx:new .
    # docker run -d -P nginx:new
    # docker ps -a

    技术分享图片技术分享图片
    ?

  • 测试

技术分享图片

??
??

  • 构建Tomcat 镜像

  • 建立工作目录

    # mkdir /root/tomcat
    # cp jdk-8u91-linux-x64.tar.gz /root/tomcat/     //将安装包复制到该目录并解压
    # cp apache-tomcat-8.5.16.tar.gz /root/tomcat/
    # cd /root/tomcat/
    # tar zxvf jdk-8u91-linux-x64.tar.gz
    # tar zxvf apache-tomcat-8.5.16.tar.gz
  • 创建Dockerfile文件

    # vim Dockerfile   //编写Dockerfile
    
    FROM centos
    MAINTAINER this is tomcat image <zkc>
    # 安装JDK环境,设置其环境变量
    ADD jdk1.8.0_91 /usr/local/java
    ENV JAVA_HOME /usr/local/java
    ENV JAVA_BIN /usr/local/java/bin
    ENV JRE_HOME /usr/local/java/jre
    ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
    ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
    ADD apache-tomcat-8.5.16 /usr/local/tomcat8
    EXPOSE 8080
  • 生成镜像

    # docker build -t tomcat:centos .

技术分享图片

?

  • 加载到容器并开启服务

    [[email protected] tomcat]# docker run --name tomcat01 -p 80:8080 -it  tomcat:centos /bin/bash
    //加载到容器 并 映射本地的80端口到 容器的8080端口
    [[email protected] /]# cd /usr/local/tomcat8/bin
    [[email protected] bin]# ./startup.sh
  • 测试
  • 在浏览器输入:192.168.200.132 (宿主机IP)

技术分享图片

?
?

  • 构建Mysql镜像

  • 建立工作目录

    # mkdir /mysql
    # cd /mysql
  • 创建Dockerfile文件

    # vim Dockerfile      //编写Dockerfile
    
    # 设置基础镜像为centos6
    FROM guyton/centos6
    MAINTAINER this is msyql images <zkc>
    RUN yum -y install mysql mysql-server
    # 开启mysql服务并授权
    RUN /etc/init.d/mysqld start &&mysql -e "grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘abc123‘;" &&mysql -e "grant all privileges on *.* to ‘root‘@‘localhost‘ identified by ‘abc123‘;"
    EXPOSE 3306
    # 运行初始化脚本mysql_safe
    CMD ["mysqld_safe"]
  • 生成镜像

    # docker build -t centos6:mysql .    //后面有个点 . 
    # docker run --name=mysqlserver -d -P centos6:mysql  
    //加载到容器并映射本地随机端口到容器的3306端口
    # docker ps -a

技术分享图片

?

  • 测试
  • 注意:两边防火墙都要关
  • 使用其他mysql服务器远程登录容器mysql

    # mysql -h 192.168.200.132 -u root -P 32770 -pabc123

技术分享图片

以上是关于构建Docker镜像实战案例的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器dockerfile镜像实战案例

Docker容器dockerfile镜像实战案例

Docker容器dockerfile镜像实战案例

Maven实战技巧「Docker实战系列」使用Maven插件构建Docker镜像的方法

企业运维实战--最全Docker学习笔记1.Docker简介安装部署镜像构建Dockerfile详解镜像构建镜像优化本地私有仓库搭建

云原生之Docker实战使用Dockerfile构建docker镜像