码迷,mamicode.com
首页 > 其他好文 > 详细

构建Docker镜像实战案例

时间:2018-08-14 23:30:01      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:装包   evel   his   -o   eve   远程登录   指定   start   安装   

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 .

技术分享图片

?

  • 加载到容器并开启服务

    [root@centos7-5 tomcat]# docker run --name tomcat01 -p 80:8080 -it  tomcat:centos /bin/bash
    //加载到容器 并 映射本地的80端口到 容器的8080端口
    [root@e238163a97e1 /]# cd /usr/local/tomcat8/bin
    [root@e238163a97e1 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镜像实战案例

标签:装包   evel   his   -o   eve   远程登录   指定   start   安装   

原文地址:http://blog.51cto.com/13630803/2160040

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!