Docker 用Dockerfile部署Apache网站

news/2024/5/10 19:48:28/文章来源:https://blog.csdn.net/qq_48289488/article/details/121778947

Dockerfile部署Apache网站

  • 基于Centos编写Apache的Dockerfile
  • 基于Alpine 编写Apache的Dockerfile(精简版)

基于Centos编写Apache的Dockerfile

//创建apache服务的dockerfile文件目录
[root@localhost ~]# mkdir httpd/files -p//上传源码包
[root@localhost ~]# ls httpd/files
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.51.tar.gz//项目结构
[root@localhost ~]# tree
.
|-- anaconda-ks.cfg
`-- httpd|-- Dockerfile`-- files|-- apr-1.7.0.tar.gz|-- apr-util-1.6.1.tar.gz|-- httpd-2.4.51.tar.gz`-- install.sh2 directories, 6 files//添加脚本权限
[root@localhost ~]# touch httpd/files/install.sh 
[root@localhost ~]# chmod +x httpd/files/install.sh 
[root@localhost ~]# ll httpd/files/install.sh 
-rwxr-xr-x. 1 root root 1444 Dec 10 18:37 httpd/files/install.sh//编写dockerfile
[root@localhost ~]# vim httpd/Dockerfile  
[root@localhost ~]# cat httpd/Dockerfile 
FROM centos  
LABEL MAINTAINER='1314444 123@qq.com'#定义变量
ENV apr_version 1.7.0  
ENV apr_util_version 1.6.1 
ENV httpd_version 2.4.51 #环境变量
ENV PATH /usr/local/apache/bin:$PATH    #把需要安装apache的源码包传输到/usr/src下
COPY files /usr/src/#运行安装脚本
RUN ["/bin/bash","-c","/usr/src/install.sh"]#暴露端口号
EXPOSE 80 443#安装路径
WORKDIR /usr/local/apache#传递给ENTRYPOINT的参数
CMD ["-D","FOREGROUND"]    #主程序
ENTRYPOINT ["httpd"]//脚本内容
[root@localhost ~]# cat httpd/files/install.sh 
rm -rf /etc/yum.repos.d/* 
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-$(awk -F'"' 'NR==5{print $2}' /etc/os-release).repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum  clean all && yum makecache
echo "alias ls='ls --color'" >> ~/.bashrc
source ~/.bashrc
yum -y install openssl-devel pcre-devel pcre  expat-devel libtool gcc gcc-c++ make                         
useradd -r -M -s /sbin/nologin apache 
cd /usr/src/ 
tar xf apr-${apr_version}.tar.gz 
tar xf apr-util-${apr_util_version}.tar.gz 
tar xf httpd-${httpd_version}.tar.gz 
cd apr-${apr_version} 
sed -i '/$RM "$cfgfile"/d' configure
./configure --prefix=/usr/local/apr && \
make -j $(nproc)&& \
make install && \
cd ../apr-util-${apr_util_version} && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
make -j $(nproc) && \
make install && \
cd ../httpd-${httpd_version} && \
./configure --prefix=/usr/local/apache \--enable-so \--enable-ssl \--enable-cgi \--enable-rewrite \--with-zlib \--with-pcre \--with-apr=/usr/local/apr \--with-apr-util=/usr/local/apr-util/ \--enable-modules=most \--enable-mpms-shared=all \--with-mpm=prefork && \
make -j $(nproc)&& \
make install && \
sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf
yum -y remove gcc gcc-c++ make
rm -rf /usr/src/* /var/cache/*//制作镜像
[root@localhost ~]# docker build -t httpd:v0.1  httpd
Sending build context to Docker daemon  11.53MB
Step 1/12 : FROM centos---> 5d0da3dc9764
Step 2/12 : LABEL MAINTAINER='1314444 123@qq.com'---> Using cache---> a8b67caa2102
Step 3/12 : ENV apr_version 1.7.0---> Using cache---> 0e34b832cb4f
Step 4/12 : ENV apr_util_version 1.6.1---> Using cache---> afb0ed0d7b75
Step 5/12 : ENV httpd_version 2.4.51---> Using cache---> 5c75f5c66090
Step 6/12 : ENV PATH /usr/local/apache/bin:$PATH---> Using cache---> 42d9a10cd81f
Step 7/12 : COPY files /usr/src/---> Using cache---> a872f04851c7
Step 8/12 : RUN ["/bin/bash","-c","/usr/src/install.sh"]---> Using cache---> 0e66941d63f0
Step 9/12 : EXPOSE 80 443---> Using cache---> e42572634c04
Step 10/12 : WORKDIR /usr/local/apache---> Using cache---> 75e478ea8d96
Step 11/12 : CMD ["-D","FOREGROUND"]---> Using cache---> b647e6a08699
Step 12/12 : ENTRYPOINT ["httpd"]---> Using cache---> 3eee02b930f6
Successfully built 3eee02b930f6
Successfully tagged httpd:v0.1//查看镜像
[root@localhost ~]# docker images 
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
1314444/httpd   v0.1      0e0d1f4bd106   10 seconds ago   372MB//基于新镜像创建容器
[root@localhost ~]# docker run  --name httpd02 -dit -p 80:80 1314444/httpd:v0.1
be35164fcf4676117558f96c164980f188246167ee4e70d949e91f391ae71ad2
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                        NAMES
be35164fcf46   1314444/httpd:v0.1   "httpd -D FOREGROUND"   5 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   httpd02
[root@localhost ~]# docker exec -it httpd02 /bin/bash
[root@be35164fcf46 /]# ss -anlt
State          Recv-Q          Send-Q                   Local Address:Port                   Peer Address:Port         Process         
LISTEN         0               128                            0.0.0.0:80                          0.0.0.0:*                            

在这里插入图片描述

上传镜像仓库

[root@localhost ~]# docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[root@localhost ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
1314444/httpd   v0.1      0e0d1f4bd106   4 minutes ago    703MB[root@localhost ~]# docker push 1314444/httpd:v0.1
The push refers to repository [docker.io/1314444/httpd]
0afddf7e7a57: Pushed 
49d8e5c1af37: Pushed 
74ddd0ec08fa: Layer already exists 
v0.1: digest: sha256:20337cdfd55de2cd1b87f796661535d6c97e6b837c03cb1390efe01a43cca342 size: 954

基于Alpine 编写Apache的Dockerfile(精简版)

//创建apache服务的dockerfile文件目录
[root@localhost ~]# mkdir httpd/files -p//上传源码包
[root@localhost ~]# ls httpd/files
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.51.tar.gz//项目结构
[root@localhost ~]# tree
.
|-- anaconda-ks.cfg
`-- httpd|-- Dockerfile`-- files|-- apr-1.7.0.tar.gz|-- apr-util-1.6.1.tar.gz|-- httpd-2.4.51.tar.gz`-- install.sh2 directories, 6 files//添加脚本权限
[root@localhost ~]# touch httpd/files/install.sh 
[root@localhost ~]# chmod +x httpd/files/install.sh 
[root@localhost ~]# ll httpd/files/install.sh 
-rwxr-xr-x. 1 root root 1444 Dec 10 18:37 httpd/files/install.sh//编写dockerfile
[root@localhost ~]# vim httpd/Dockerfile  
[root@localhost ~]# cat httpd/Dockerfile 
FROM alpine 
LABEL MAINTAINER='1314444 123@qq.com'#定义变量
ENV apr_version 1.7.0  
ENV apr_util_version 1.6.1 
ENV httpd_version 2.4.51 #环境变量
ENV PATH /usr/local/apache/bin:$PATH    #把需要安装apache的源码包传输到/tmp/下
COPY files /tmp/#运行安装脚本(alpine这个系统不支持/bin/bash)
RUN /tmp/install.sh#暴露端口号
EXPOSE 80 443#安装路径
WORKDIR /usr/local/apache#传递给ENTRYPOINT的参数
CMD ["-D","FOREGROUND"]    #主程序
ENTRYPOINT ["httpd"]//脚本内容
[root@localhost ~]# cat httpd/files/install.sh 
#!/bin/sh
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories
apk update
apk add --no-cache -U openssl-dev pcre-dev expat-dev libtool libc-dev gcc make                         
adduser -S -H -s /sbin/nologin apache 
cd /tmp/
tar xf apr-${apr_version}.tar.gz 
tar xf apr-util-${apr_util_version}.tar.gz 
tar xf httpd-${httpd_version}.tar.gz 
cd apr-${apr_version} 
sed -i '/$RM "$cfgfile"/d' configure
./configure --prefix=/usr/local/apr && \
make -j $(nproc)&& \
make install && \
cd ../apr-util-${apr_util_version} && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
make -j $(nproc) && \
make install && \
cd ../httpd-${httpd_version} && \
./configure --prefix=/usr/local/apache \--enable-so \--enable-ssl \--enable-cgi \--enable-rewrite \--with-zlib \--with-pcre \--with-apr=/usr/local/apr \--with-apr-util=/usr/local/apr-util/ \--enable-modules=most \--enable-mpms-shared=all \--with-mpm=prefork && \
make -j $(nproc)&& \
make install && \
apk del gcc make
sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf
rm -rf /tmp/* /var/cache/*//制作镜像
[root@localhost ~]# docker build -t httpd:v0.1 httpd
Sending build context to Docker daemon  11.53MB
Step 1/12 : FROM alpine---> c059bfaa849c
Step 2/12 : LABEL MAINTAINER='1314444 123@qq.com'---> Using cache---> b3a3cce99055
Step 3/12 : ENV apr_version 1.7.0---> Using cache---> cfef855a83c0
Step 4/12 : ENV apr_util_version 1.6.1---> Using cache---> 52d47a6c077a
Step 5/12 : ENV httpd_version 2.4.51---> Using cache---> ecf2f6b7cc3f
Step 6/12 : ENV PATH /usr/local/apache/bin:$PATH---> Using cache---> e28697ef72aa
Step 7/12 : COPY files /tmp/---> Using cache---> 9776e1fbebeb
Step 8/12 : RUN /tmp/install.sh---> Using cache---> 9338e6abe92a
Step 9/12 : EXPOSE 80 443---> Using cache---> ffde4f04aa9b
Step 10/12 : WORKDIR /usr/local/apache---> Using cache---> b279cd78347c
Step 11/12 : CMD ["-D","FOREGROUND"]---> Using cache---> 047746aa7a4d
Step 12/12 : ENTRYPOINT ["httpd"]---> Using cache---> 052defd35663
Successfully built 052defd35663
Successfully tagged httpd:v0.1//查看镜像
[root@localhost ~]# docker images 
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
1314444/httpd   v0.2      052defd35663   4 minutes ago    79.8MB
1314444/httpd   v0.1      0e0d1f4bd106   10 seconds ago   372MB//基于新镜像创建容器
[root@localhost ~]# docker run  --name httpd03 --rm -d -p 80:80 1314444/httpd:v0.2
3ba38bf8857403914f035f0ef6e24ab2200b369de6e825caf6eb2df02e3aafcb
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                 CREATED         STATUS         PORTS                                        NAMES
3ba38bf88574   1314444/httpd:v0.2   "httpd -D FOREGROUND"   5 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   httpd03[root@localhost ~]# docker exec -it httpd03 /bin/sh
/usr/local/apache # apk add iproute2
/usr/local/apache # ss -anlt
State          Recv-Q          Send-Q                   Local Address:Port                   Peer Address:Port         Process         
LISTEN         0               128                            0.0.0.0:80                          0.0.0.0:*                            

在这里插入图片描述

上传镜像仓库

[root@localhost ~]# docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[root@localhost ~]# docker images 
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
1314444/httpd   v0.2      052defd35663   4 minutes ago    79.8MB
1314444/httpd   v0.1      0e0d1f4bd106   10 seconds ago   372MB[root@localhost ~]# docker push 1314444/httpd:v0.2
The push refers to repository [docker.io/1314444/httpd]
b50b4eb08a17: Pushed 
90442442cbcf: Pushed 
8d3ac3489996: Mounted from library/alpine 
v0.2: digest: sha256:2854a599479f4531c75d0b2d2232ccf93ba217707b638f392b994974a93312d6 size: 952

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_722236.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网博士自助建站系统_浅析企业自助建站系统的特性

在第三代企业网站建设浪潮掀起之前自主式系统的出现既省时省力还省钱,因此大家对于应用之后二十分钟就可以出现一个功能完善且精致美观的网址有很大的好感。但是这类可以推动现代化建设的产品也需要让大家了解一下它的方方面面,那么它的其他层面特性该怎…

前端不同服务器之间的通信_网页?服务器?http协议?网站?前端开发工具?...

一、什么是http协议?什么是协议,就是一群人协商好了,统一认知的规则。【例】你,我,他,还有她他他,大家一致认定结婚的时候都要给份子钱,这种大家认同的就是协议。http协议,就规定了…

RPM包管理工具的常规命令及网站发布

RPM包管理工具的常规命令及网站发布前言一.Linux安装软件和程序的三种方式1.rpm包管理工具2.yun源3.源码安装二..典型应用程序的目录结构三.常见的软件包封装类型四.RPM包管理工具及包格式五.RPM包的下载,网站发布5.1挂载镜像光盘5.2安装软件以及RPM常用命令5.3启动…

DNS正向域名解析,别名域名解析,泛域名域名解析,邮件域名解析和web服务网站搭建

DNS正向域名解析,别名域名解析,泛域名域名解析,邮件域名解析和web服务网站搭建一DNS域名解析的分类:二.域名正向解析2.1载bind软件2.1.2bind产生的配置文件2.2修改主配置文件vim /etc/named.conf2.2 修改区域配置文件/etc/named.r…

网站地图生成器_WordPress谷歌网站地图生成插件:Google XML Sitemap Generator

WordPress谷歌网站地图生成插件:Google XML Sitemap Generator,近期站长平台网站地图索引型sitemap不予处理,更新网站地图插件为Google XML Sitemap Generator见图可知,搜索引擎更新了网站地图提交格式规则,相应的&…

网站打开速度慢如何压缩图片_网站打开速度慢的原因及优化策略

昨天在和一个做“三丰量具”的朋友交流,在看了他的整体网站后,发现整个网站打开速度非常慢,在用站长工具查询后,尽管使用的是国内空间,但发现打开的速度居然高达2978毫秒,这个响应时间会让用户直接关闭网站…

ios旧版本app网站_旧版 App 屏蔽更新

这篇给小伙伴们介绍一下怎么屏蔽旧版应用更新提示吧。有时候大家用了公众号里的 Apple ID 下载了某些付费应用,可能过段时间会提示你要去更新升级,但又觉得没必要去更新Ta。怎么一劳永逸永久屏蔽它的更新提示呢?下面就详细地向小伙伴们介绍一…

网站服务器高主频还是多核心,服务器中的高主频与核心数有什么区别?

一些名字解释这儿就不过多的阐明了,大家自已可以到网上找一下,比小编的更详细,小编在下面就浅显易懂的说明下服务器主频高的作用和核心数多的作用。cpu核心越多,处理器的并行计算能力越强,或者是说,就是可以…

织梦网站地图更新自由列表html,织梦CMS怎么设置网站地图自动更新?

织梦的使用者已经二次开发版本实在太多,小编不得不感叹其强大,已经度过十二个年头的Dedecms(织梦)由于其简单便捷的二次开发流程,依然强劲的占领着部分CMS的市场份额,是个人站长和中小企业最受欢迎的CMS之一。说起来很像是给dede打…

漫谈《大型网站技术架构》

转载请标明出处: http://blog.csdn.net/forezp/article/details/69196483 本文出自方志朋的博客 本文的内容来自阿里巴巴员工李智慧的著作《大型网站技术架构 核心原理与案例分析》,这本书很值得一看,故整理之。 一、大型网站的架构演化 1.…

php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)

web网站是我们上网的窗口,而网站是如何搭建的呢?今天我们来做一个介绍,以php代码为例来进行介绍(后续会介绍一下java代码搭建,如果想要我这里涉及的工具或源码请私信我)。1、首先你需要去网上下载你想搭建的源码。2、安装phpstudy…

网站f12怎么查询服务器,网页f12查看服务器

网页f12查看服务器 内容精选换一换主机管理的云服务器列表中仅显示以下主机的防护状态:在所选区域购买的华为云主机已接入所选区域的非华为云主机在所选区域购买的华为云主机已接入所选区域的非华为云主机若未找到您的主机,请切换到正确的区域后再进行查…

帝国cms网站迁移到新的服务器,帝国cms网站迁移教程

帝国cms网站迁移教程步骤如下:网站迁移步骤:1、在旧服务器备份数据库、“d”附件目录与表单目录;2、到新服务器安装新的帝国网站管理系统;3、登陆后台恢复备份的数据库、“d”附件目录与表单目录;4、重新生成前台页面&…

我要自学网视频教程ajax,这么逆天的自学网站,还是第一次见,难怪考不上清华北大...

原标题:这么逆天的自学网站,还是第一次见,难怪考不上清华北大有很多朋友,工作了N年之后,工资一直不涨,其实就是没有找到正确的方法,这个时候呢,我们就需要用到一些非常好用的自学网站…

1h2g云服务器做网站,云服务器1H2G和1H1G的区别

云服务器1H2G和1H1G的区别 内容精选换一换简要介绍一组Java命令行工具,用于处理高通量排序(HTS)数据和格式。开发语言:Java一句话描述:Java命令行工具开源协议:MIT建议的版本根据实际需要选择版本,本文档以picard-2.23…

java jsp静态_Java jsp网站首页静态化解决方案

缓存静态化处理流程:关键代码:本代码以jsp为例,其实还可以用freemarker等模板语言,但本人认为页面静态化属于后期优化工作,目前jsp应用要比freemarker要广泛,所以jsp更具有意义。protected void doPost(Htt…

python怎么爬取图片地址_Python爬虫爬取一个网站上的图片地址实例代码

本文实例主要是实现爬取一个网站上的图片地址,详细如下。读取一个网站的源码:import urllib.requestdef getHtml(url):htmlurllib.request.urlopen(url).read()return htmlprint(getHtml(http://image.baidu.com/search/flip?tnbaiduimage&ieutf-8&…

服务器怎么部署静态网站,纯静态网站部署服务器

纯静态网站部署服务器 内容精选换一换PHPWind(简称:PW)是一个基于PHP和MySQL的开源社区程序,是国内较受欢迎的论坛之一。轻架构,高效易开发,使用户可快速搭建并轻松管理。本文档指导用户使用华为云市场镜像“PHPWind 论坛社区系统…

使用 Nginx 提升网站访问速度

本文主要介绍如何在 Linux 系统上安装高性能的 HTTP 服务器 —— Nginx、并在不改变原有网站结构的条件下用 Nginx 来提升网站的访问速度。Nginx 简介Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 N…

建立标准CA部署安全的SSL网站

概述: 随着网络安全的概念日益深入人心,公钥架构(PKI)在网络得到越来越广泛的应用。PKI使用证书进行身份验证,数据加密和数据签名,是目前信息安全保障的一种重要方法。 证书是PKI的基础,是实现网络安全&…