Dockerfile
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dockerfile相关的知识,希望对你有一定的参考价值。
Dockerfile格式
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
Dockerfile指令
Build镜像 --》存为镜像
编辑dockerfile文件
[[email protected] wwwroot]# vi httpdfile
FROM centos:latest
MAINTAINER jacker
RUN yum install httpd -y
COPY index.html /var/www/html/
ENV HTTP_V=2.0
EXPOSE 80
WORKDIR /data/wwwroot
CMD ["httpd","-D","FOREGROUND"] #这个是httpd在前台运行
index.html 是放在/data/wwwroot/ 中,所以在最后要指定,不然系统找不到
[[email protected] ~]# docker build -t httpd:v1 -f httpdfile /data/wwwroot/
[[email protected] wwwroot]# docker run -d httpd:v2
验证:
进入容器后,可以看到更改了index.html
构建业务基础镜像
快速部署LNMP网站平台
构建php服务器
结构:
[[email protected] php-docker]# tree
.
├── Dockerfile-php
├── php-5.6.32.tar.gz
├── php-fpm.conf
└── php.ini
0 directories, 4 files
[[email protected] php-docker]# cat Dockerfile-php
FROM centos:7
MAINTAINER jacker
ENV VERSION=5.6.32
RUN yum install epel-release -y && yum install -y 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/*
COPY php-${VERSION}.tar.gz /
RUN cd / && tar zxf php-${VERSION}.tar.gz && mv php-${VERSION} /usr/local/ && cd /usr/local/php-${VERSION} && ./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* && cd /usr/local/ && rm -rf php-${VERSION}
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"]
执行(这一步是创建镜像):docker build -t php:v5.6.32 -f Dockerfile-php .
- 说明:
- 执行dockerfile是从上往下执行,跟shell执行顺序一致
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 这个是设置时间,因为容器精装版的系统,没有crontab任务计划模块,需要自己安装
- WORKDIR 工作目录,进入容器后就是/usr/local/php
- 自己配置好php.ini、php-fpm.conf 再复制到容器上
- EXPOSE:转发的端口
- CMD:前台运行php-fpm ,这样好处:创建容器时就自动在前台运行,不用进入虚拟机开启php服务
构建nginx服务器
[[email protected] nginx-docker]# tree
.
├── Dockerfile-nginx
└── nginx.conf
[[email protected] nginx-docker]# cat Dockerfile-nginx
FROM centos:7
MAINTAINER jacker
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel gd-devel iproute net-tools telnet wget curl && yum clean all && rm -rf /var/cache/yum/*
RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && tar zxf nginx-1.15.5.tar.gz && cd nginx-1.15.5 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make -j 4 && make install && rm -rf /usr/local/nginx/html/* && echo "ok" >> /usr/local/nginx/html/status.html && cd / && rm -rf nginx-1.15.5* && 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;"]
执行(这一步是创建镜像):docker build -t nginx:v1.15 -f Dockerfile-nginx-1.15 .
说明:
CMD:nginx前台运行,避免断开
nginx+php结合:是通过nginx.conf配置文件
lnmp验证:
1、自定义网络
docker network create lnmp
2、创建Mysql容器
docker run -d --name lnmp_mysql --net lnmp --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8
3、创建PHP容器
docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1
4、创建Nginx容器
docker run -d --name lnmp_nginx --net lnmp -p 88:80 --mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf --mount src=wwwroot,dst=/wwwroot nginx:v1
5、以wordpress博客为例
https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
6、mv wordpress /var/lib/docker/volumes/wwwroot/_data/
7、cd /var/lib/docker/volumes/wwwroot/_data/
8、[[email protected] _data]# cat test.php
<?php phpinfo()?>
9、[[email protected] _data]# cat index.html
lnmp
10、访问 http://192.168.1.13:88/wordpress/
http://192.168.1.13:88/test.php
http://192.168.1.13:88 是否正常
11、数据库名是容器名称,这样来通信
JAVA项目
以上是关于Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章