1.dockerfile介绍

镜像分类:

  1. 基础镜像:例如centos、Ubuntu、alpine
  2. 环境镜像:例如Java、php、go
  3. 项目镜像:将项目与环境镜像打包一起

2.Dockerfile常用指令

指令                                                          描述

FROM                               构建新镜像是基于哪个镜像

LABEL                               标签

RUN                                  构建镜像时运行的shell命令

COPY                                拷贝文件或目录到镜像中

ADD                                   解压压缩包并拷贝

ENV                                   设置环境变量

USER                                为RUN、CMD和ENTRYPOINT执行命令指定运行用户

EXPOSE                           声明容器运行的服务端口

WORKDIR                        为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作面目录

CMD                                 运行容器时默认执行,如果有多个CMD指令,最后一个生效

ENTRYPOINT                  如果与CMD一起用,CMD将作为ENTRYPOINT的默认参数

如果有多个ENTRYPOINT指令,最后一个生效

3.docker build构建镜像

#docker bulid -t 镜像名 -f 指定Dockerfile文件位置

#docker build -t test .

#docker build -t 镜像名称 -f /path/Dockerfile/path

#docker build -t 镜像名称 http://www.example.com/Dockerfile

#mkdir chao

#cd chao/

#touch a.txt

#cp /root/ansible-2.4.2.0-2.el7.noarch.rpm .

#vim Dockerfile

FROM centos:7

RUN yum -y install wget curl

COPY a.txt /opt

ADD ansible-2.4.2.0-2.el7.noarch.rpm /opt

ENV ABC=123

EXPOSE 80

WORKDIR /usr/local

CMD ["sleep","36000"]

#docker build -t test .  构建

  1. CMD与ENTRYPOINT区别

CMD用法:

CMD [“executable”,”参数1”,”参数2”]: exec形式(首选)   executable可执行路径,

CMD [“param1(参数1)”,”param2”]: 作为ENTRYPOINT的默认参数

CMD command param1 param2 : Shell形式

ENTRYPOINT用法

ENTRYPOINT [“executable”,”param1”,”param2”]

ENTRYPOINT command param1 param2

小结:

  1. CMD和ENTRYPOINT指令都可以用来定义运行容器时使用的默认命令
  2. Dockerfile至少指定一个CMD或ENTRYPOINT
  3. CMD可以用作ENTRYPOINT默认参数,或者用作容器的默认命令
  4. docker run指定<command>时,将会覆盖CMD
  5. 如果是可执行文件,希望运行时传参,应该使用ENTRYPOINT

5.前端项目镜像构建与部署:nginx

FROM centos:7

RUN yum -y install wget curl gcc gcc-c++ make openssl-devel pcre-devel gd-devel \

iproute net-tools telnet && \

yum clean all && \

rm -rf /var/cache/yum/*

ADD nginx-1.15.5.tar.gz /

RUN cd nginx-1.15.5 && \

./configure --prefix=/usr/local/nginx \

--with-http_ssl_module \

--with-http_stub_status_module && \

make -j 4 && make install && \

mkdir /usr/local/nginx/conf/vhost && \

cd / && rm -rf nginx* && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/nginx/sbin

COPY nginx.conf /usr/local/nginx/conf/nginx.conf

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ["nginx","-g","daemon off;"]

6.php项目镜像构建

FROM centos:7

RUN yum -y install epel-release && \

yum -y install gcc gcc-c++ make gd-devel libxml2-devel \

libcurl-devel libjpeg-devel libpng-devel openssl-devel \

libmcrypt-devel libxslt-devel libtidy-devel autoconf \

iproute net-tools telnet wget curl && yum clean all && \

rm -rf /var/cache/yum/*

ADD php-5.6.36.tar.gz /

RUN cd php-5.6.36 && \

./configure --prefix=/usr/local/php \

--with-config-file-path=/usr/local/php/etc \

--enable-fpm --enable-opcache \

--with-mysql --with-mysqli --with-pdo-mysql \

--with-openssl --with-zlib --with-curl --with-gd \

--with-jpeg-dir --with-png-dir --with-freetype-dir \

--enable-mbstring --with-mcrypt --enable-hash && \

make -j 4 && make install && 、

cp php.ini-production /usr/local/php/etc/php.ini && \

cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \

sed -i “90a \daemonize = no” /usr/local/php/etc/php-fpm.conf && \

mkdir /usr/local/php/log && \

cd / && rm -rf php* && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV   PATH $PATH:/usr/local/php/sbin

COPY php.ini /usr/local/php/etc/

COPY php-fpm.conf /usr/local/php/etc/

WORKDIR /usr/local/php

EXPOSE 9000

CMD ["php-fpm"]

7.java项目镜像构建tomcat

FROM centos:7

ENV VERSION=8.5.43

RUN yum -y install java-1.8.0-openjdk wget curl unzip iproute net-tools && \

yum clean all && \

rm -rf /var/cache/yum/*

ADD apache-tomcat-${VERSION}.tar.gz /usr/local/

RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \

sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'

/usr/local/tomcat/bin/catalina.sh && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080

CMD ["catalina.sh","run"]

编写Dockerfile最佳实践

减少镜像层:一次RUN指令形成新得一层,尽量Shell命令都写在一行,减少镜像层

优化镜像大小:一个RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减少镜像大小

减少网络传输时间:例如软件包、mvn仓库等

多阶段构建:代码编译、部署在一个dockerfile完成,只会保留部署阶段产生的数据

选择最小的基础镜像:例如alpine

Dockerfile使用,示例的更多相关文章

  1. 【云计算】Dockerfile、镜像、容器快速入门

    Dockerfile.镜像.容器快速入门 1.1.Dockerfile书写示例 Dockerfile可以用来生成Docker镜像,它明确的定义了Image的生成过程.虽然直接修改容器也可以提交生成镜像 ...

  2. dockerfile 介绍

    Docker简介 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具.其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖.Docker通过Docker容器, ...

  3. docker:(2)通过Dockerfile构建镜像并发布web项目

    上一篇讲解了docker的基本使用 http://www.cnblogs.com/xiaochangwei/p/8204511.html 虽然通过修改获取到的镜像可以达到使用目的,但是多操作几次就会发 ...

  4. 转 dockerfile 介绍 及 编写

    Docker简介 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具.其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖.Docker通过Docker容器, ...

  5. 你必须知道的Dockerfile

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Dockerfile 在Docker中创建镜像最常用的方式,就是使用D ...

  6. Dockerfile创建tomcat和jdk,并发布java项目

    1.准备好需要的jdk 和 tomcat kun@ubuntu:~$ cd tomcat-docker/ kun@ubuntu:~/tomcat-docker$ ll total drwxrwxr-x ...

  7. Docker 常用命令和Dockerfile

    Docker 简介 官方的解释为:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现 ...

  8. 掌握了Docker Layer Caching才敢自称精通Dockerfile

    长话短说: 本次原创将向您展示在Docker中使用Layer Cache以加快镜像构建. 这个话题的初衷在于:应用程序打包过程是很慢的(下载并安装框架&第三方依赖包.生成assets),这在D ...

  9. 关于Dockerfile

    在Docker中创建镜像最常用的方式,就是使用Dockerfile.Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A.B.C.D-的步骤.Dockerfile其内部包含 ...

  10. Dockerfile 命令详解及最佳实践

    Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...

随机推荐

  1. Hexo博客中插入 Chart 动态图表

    该文基本(全部)来自于chatjs中文文档 由于使用pjax,导致页面需要二次刷新才会显示表格,故引入了自动刷新的JS,但这样会导致回退标签失效 背景 今天在谷歌上逛博客时,突然发现shen-yu大佬 ...

  2. 树堆(Treap)学习笔记 2020.8.12

    如果一棵二叉排序树的节点插入的顺序是随机的,那么这样建立的二叉排序树在大多数情况下是平衡的,可以证明,其高度期望值为 \(O( \log_2 n )\).即使存在一些极端情况,但是这种情况发生的概率很 ...

  3. 面试中的老大难-mysql事务和锁,一次性讲清楚!

    众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解. 本文主要内容是根据掘金小册& ...

  4. 炼技术(9): 简约而不简单,永不停歇的测试 -- always_run

    最强战力,永不停歇的测试:always_run 许多工程师写完程序后,都不愿意对自己的程序做仔细测试. 很多测试说会做自动化测试,可能工作好几年都没真做过多少自动化测试. 我们的解决方案是,在系统的测 ...

  5. React 17 要来了,非常特别的一版

    写在前面 React 最近发布了v17.0.0-rc.0,距上一个大版本v16.0(发布于 2017/9/27)已经过去近 3 年了 与新特性云集的 React 16及先前的大版本相比,React 1 ...

  6. Networks of Spiking Neurons: The Third Generation of Neural Network Models

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 顺便安利一下同组的大佬做的SNN教程:https://spikingflow.readthedocs.io/zh_CN/latest/Tu ...

  7. vue路由守卫+cookie实现页面跳转时验证用户是否登录----(二)设置路由守卫

    上一篇我们已经封装好了cookie方法,登录成功之后也可以吧用户信息存到cookie中,接下来需要在router/index.js中引入一下cookie.js文件 然后继续添加以下代码 /* * be ...

  8. Node.js调试相关

    如何进行Nodejs性能分析? nodejs性能最重要的两个部分:CPU耗时查看和内存泄漏排查 一,CPU相关 主要思路是两个:借助第三方的工具,以及借助v8自带的性能分析工具 借助第三方的工具 主要 ...

  9. zabbix如何监控Nvidia显卡的各项指标?

    如何实现zabbix监控windows机器的N卡GPU指标呢? Nvidia卡在安装驱动程序的时候,已经自带安装了一个命令行工具来获取显卡的各个性能指标值 在windows机器上,我们可以把该路径加入 ...

  10. 长沙做假证u

    长沙做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...