Docker进阶之九:Dockerfile 及 通过Dockerfile搭建lnmp
一.Dockerfile指令
|
指令 |
描述 |
指令 |
描述 |
|
FROM |
构建的新镜像是基于哪个镜像 例如:FROM centos:6 |
COPY |
拷贝文件或目录到镜像,用法同上例如:COPY ./start.sh /start.sh |
|
MAINTAINER |
镜像维护者姓名或邮箱地址 例如:MAINTAINER fruit |
ENTRYPOINT |
ENTRYPOINT的格式和RUN指令格式一样,分为exec格式和shell格式。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行时 也可以替代,不过比CMD要略显繁琐,需要通过docker run的参数–entrypoint来指定。 当指定了ENTRYPOINT后,CMD的含义就发生了改变,不再是直接的运行其命令,而是将CMD的内容作为参数传给ENTRYPOINT指令。 运行容器时执行的Shell命令 |
|
RUN |
构建镜像时运行的Shell命令 RUN yum install httpd. (shell形式,该命令在shell中运行,默认情况下/bin/sh -c在Linux中运行) |
VOLUME |
指定容器挂载点到宿主机自动生成的目录或其他容器 |
|
CMD |
CMD的主要是为一个正运行的容器提供默认执行命令。 如果存在多个CMD指令,那么只有最后一个会被执行。如果在容器运行时指定了命令,则CMD指定的默认内容会被替代。 通常在最后,启动一个前台服务保证服务可持续运行 运行容器时执行的Shell命令 CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd –D |
USER |
为RUN、CMD和ENTRYPOINT执行命令指定运行用户 |
|
EXPOSE |
声明容器运行的服务端口 |
WORKDIR |
为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 |
|
ENV |
设置容器内环境变量 |
HEALTHCHECK |
健康检查 CMD curl -f http://localhost/ || exit 1 |
|
ADD |
拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解压 ADD <src>... <dest> ADD html.tar.gz /var/www/html |
ARG |
在构建镜像时指定一些参数 例如: USER $user # docker build --build-arg user=fruit Dockerfile . |
二.Build镜像命令
-t, --tag list # 镜像名称
-f, --file string # 指定Dockerfile文件位置
示例:
docker build .
docker build -t shykes/myapp .
docker build -t shykes/myapp -f /path/Dockerfile /path
##从网络中构建
docker build -t shykes/myapp http://www.example.com/Dockerfile.
三.构建PHP网站环境镜像(切记安装目录中存在php-5.6.31.tar.gz,php.ini)
FROM centos:7
MAINTAINER www.fruit.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/
RUN cd /tmp/php-5.6.31 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql --with-mysqli \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && \
make install && \
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc
RUN rm -rf /tmp/php-5.6.31* && yum clean all
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
四.构建nginx环境镜像(切记下载依赖包)
----Dockerfile----
FROM centos:7
MAINTAINER www.xubl.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp
RUN cd /tmp/nginx-1.12.1 && \
./configure --prefix=/usr/local/nginx && \
make -j 2 && \
make install
RUN rm -rf /tmp/nginx-1.12.1* && yum clean all
COPY nginx.conf /usr/local/nginx/conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
----nginx.conf----
user root;
worker_processes auto;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root html;
index index.html index.php;
location ~ \.php$ {
root html;
fastcgi_pass lnmp_php:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
# docker image build -t nginx:v1 -f Dockerfile .
五.部署lnmp
docker network create lnmp
2、创建PHP容器
# docker run -itd --name lnmp_php --net lnmp --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html php:v1
3、创建Nginx容器
# docker run -itd --name lnmp_nginx --net lnmp -p 888:80 --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html nginx:v1
4、创建MySQL容器(如果之前存在lnmp_mysql可不执行)
# docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8
测试是否部署成功:
echo "<?php phpinfo();?>" > /app/wwwroot/index.php
http://192.168.2.73:888/
http://192.168.2.73:88/wordpress
六.构建JAVA网站环境镜像
FROM centos:7
MAINTAINER www.xubl.com
ADD jdk-8u45-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_45
ADD apache-tomcat-8.0.46.tar.gz /usr/local
COPY server.xml /usr/local/apache-tomcat-8.0.46/conf
WORKDIR /usr/local/apache-tomcat-8.0.46
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"]
创建容器:
mkdir -p /app/webapps/
docker
run -itd --name=tomcat -p 8080:8080 --mount
type=bind,src=/app/webapps/,dst=/usr/local/apache-tomcat-8.0.46/webapps
tomcat:v1
mkdir -p /app/webapps/ROOT/
vim /app/webapps/ROOT/index.html
hello
http://192.168.2.73:8080/
七.书写Dockerfile总结
1.先创建一个基础系统镜像,然后exec进入到容器内,再把无问题的部署命令复制到dockerfile中
2.不经常修改的文件打包到镜像中,经常改变的配置文件可以用type=bind方式每次只要修改宿主机文件或者nfs文件即可.
备注:依赖包下载地址
tomcat 链接:https://pan.baidu.com/s/1jkC8VoGODK_1JaZKpcc8aw 密码:ndj2
nginx 链接:https://pan.baidu.com/s/1hCPMigLSCuoJpRzCa3bq7w 密码:4le2
pph 链接:https://pan.baidu.com/s/1sRv7azcx5rAnuk5zZZyPzA 密码:5ffk
Docker进阶之九:Dockerfile 及 通过Dockerfile搭建lnmp的更多相关文章
- docker创建nginx+php-fpm+mysql环境(一分钟搭建lnmp)
下载镜像 docker pull bitnami/php-fpm #下载php-fpm镜像 docker pull nginx #下载nginx镜像docker pull mysql:5.5.59 # ...
- Docker快速搭建LNMP环境
一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...
- Docker进阶:容器卷、DockerFile、Docker网络原理
1.Docker镜像 1.1镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件. 包含一个软件的所有内容.蒋所有的应用和环境,直接打包为docker镜像,直 ...
- Docker学习笔记之二,基于Dockerfile搭建JAVA Tomcat运行环境
前言 在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个 java tomcat运行环境,虽然也初见成效,但很累人.如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而 ...
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...
- 面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧
接上一篇:30分钟快速上手Docker,看这篇就对了! 一. 带着问题学Dockerfile 1.疑问 我们都知道从远程仓库可以pull一个tomcat等镜像下来,然后docker run启动容器,然 ...
- 掌握了Docker Layer Caching才敢自称精通Dockerfile
长话短说: 本次原创将向您展示在Docker中使用Layer Cache以加快镜像构建. 这个话题的初衷在于:应用程序打包过程是很慢的(下载并安装框架&第三方依赖包.生成assets),这在D ...
- Docker:四、Docker进阶 Windows Docker IIS 部署
前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...
- 测试工程师Docker进阶
学习整理来源 B站 狂神说Java https://space.bilibili.com/95256449/ 四.docker镜像 1.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运 ...
随机推荐
- BZOJ_1823_[JSOI2010]满汉全席_2-sat+tarjan
BZOJ_1823_[JSOI2010]满汉全席_2-sat 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1823 分析:一道比较容易看出来的 ...
- BZOJ_2956_模积和_数学
BZOJ_2956_模积和_数学 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数 ...
- 单台PC玩转NEUTRON(一:环境准备)
要开始从事云计算网络领域的技术研究.过去10年一直是从事传统网络相关的工作,新的事务在知识结构上还有一些差异,边学边写,作为个人总结,也共享给大家. 工欲善其事必先利其器,好的开发调测环境让人学习工作 ...
- Android 两种方式实现类似水波扩散效果
原文链接 https://mp.weixin.qq.com/s/M19tp_ShOO6esKdozi7Nlg 两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 ...
- C# winform 检测当前电脑安装的.net framework版本
private static bool GetDotNetRelease(int release) { const string subkey = @"SOFTWARE\Microsoft\ ...
- Kubernetes集群部署关键知识总结
Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...
- Nginx技术进阶详讲
Nginx技术进阶详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 并发数问题 讲到并发数这个概念,想必各位应该都知道是什么意思,就是同时访问一个项目,就比我们现在做的一些项目完 ...
- netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布
上一篇我们用jenkins做了一个简单的自动化发布,在shell中采用的是 BUILD_ID=dontKillMe nohup dotnet xxx.dll & 这种简单的后台承载,如果你的 ...
- android事件分发源码分析—笔记
昨天晚上从源码角度复习了一下android的事件分发机制,今天将笔记整理下放在网上.其实说复习,也是按着<android开发艺术探索>这本书作者的思路做的笔记. 目录 事件是如何从Acti ...
- 详解mybatis映射配置文件
一 mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的 ...