设为首页 收藏本站
查看: 671|回复: 0

[经验分享] 构建Docker镜像实战案例

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2019-2-21 07:57:08 | 显示全部楼层 |阅读模式
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
    # 安装环境 下载软件包 并解压
    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



  • 测试



  • 在浏览器输入:http://192.168.200.132:32769/


    
  



  • 构建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
    # 安装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
    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

   

注意:如果执行Dockerfile文件报错会生成镜像none

删除none镜像

    # vim none.sh
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
# chmon +x none.sh
# ./none.sh



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675064-1-1.html 上篇帖子: 构建Docker镜像实战 下篇帖子: service docker start 报错 :Failed to start docker.se
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表