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

[经验分享] 【Docker江湖】之创建Web应用服务镜像——Apache/Nginx

[复制链接]

尚未签到

发表于 2018-5-27 07:44:33 | 显示全部楼层 |阅读模式
写在前边的话
Web应用服务器的价格是真的贵,而且在一个web服务器上创建多个web应用也不是很方便,那么有没有好办法来解决这个问题,答案是肯定的,有了Docker那就可以在在一个服务器上创建多个docker容器了,每个容器启动一个web服务,这要管理起来也相对方便
Start Apache
1:创建一个apache-ubuntu的工作目录
mkdir apache-ubuntucd apache-ubuntu/vim Dockerfile123在Docker中添加以下内容(thinkgamer/sshd_dockerfile:latest是在上一篇博客中创建的sshd镜像)
FROM thinkgamer/sshd_dockerfile:latest#设置继承自我们创建的sshd镜像#设置环境变量,所有操作都是非交互的ENV DEBIAN_FRONTEND noninteractive#安装RUN apt-get -yq install apache2 && rm -rf /var/lib/apt/lists/*
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata#注意这里要更改系统的时区,因为在web应用中经常会用到时区这个系统变量,默认的ubuntu会让你的应用程序发生不可思议的效果#添加我们的脚本,并设置权限,这会覆盖之前放在这个位置的脚本ADD run.sh /run.sh
RUN chmod 755 /*.sh#添加一个示例的web站点,删除默认安装在apache文件夹下面的文件,并将我们添加的示例用软连接链接到/var/www/html目录下面RUN mkdir -p /var/lock/apache2
RUN rm -fr /var/www/html/*
COPY sample/* /var/www/html/#设置Apache相关的一些变量,在容器启动的时候可以使用-e参数替代ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_SERVERADMIN admin@localhostENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www
EXPOSE 80WORKDIR /
CMD ["/run.sh"]1234567891011121314151617181920212223242526272829303132333435363738这里我们只做测试,所以sample的站点内容相对简单
在apache-ubunt目录下,创建sample目录
mkdir samplecd samplevim index.html123index.html内容为
<!DOCTYPE html><html><body><p> hello docker</p></body></html>12345678在apache-ubuntu目录下创建执行
vim run.sh
添加以下内容
$cat run.sh#!/bin/bashexec apache2 -D FOREGROUND1232:build镜像
在apache-ubuntu目录下执行
sudo docker build -t apache:ubuntu .
最终会输出类似下面这样的信息
Removing intermediate container 0933c4f11b73
Successfully built f244e1db152e12查看我们build的镜像
sudo docker images
[redhat@localhost apache-ubuntu]$ sudo docker images
[sudo] password for redhat:
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
apache                       ubuntu              821f09bee815        8 minutes ago       310.3 MB
thinkgamer/sshd_dockerfile   latest              f530a7a43fd7        33 hours ago        220.6 MB
thinkgamer/sshd_ubuntu       latest              cc0c1d242d82        34 hours ago        255 MB
ubuntu                       latest              f753707788c5        2 weeks ago         127.1 MB12345673:测试镜像
运行镜像,并使用-p参数映射需要开放的端口(22和80端口)
[redhat@localhost apache-ubuntu]$ sudo docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                       NAMES8059064935c5        apache:ubuntu       "/bin/bash"         5 minutes ago       Up 5 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:10022->22/tcp   clever_yalow
[redhat@localhost apache-ubuntu]$ sudo docker exec -it 80 /bin/bash
root@8059064935c5:/# ./run.sh./run.sh: line 1: run.sh: command not foundAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message12345678在宿主机用curl抓取网页来验证刚才创建的sample站点
curl localhost
<!DOCTYPE html><html><body><p> hello docker</p></body></html>123456784:Docker创建的镜像拥有继承的特性
       需要说明的是在apache镜像的dockerfile中只用EXPOSE定义了对外开放的80端口,而在查看容器的时候,是映射两个端口:22和80
       但是实际上,当尝试使用SSH登录到容器时,会发现无法登录,这是因为在run.sh中并未启动ssh服务,这说明在使用Dockerfile创建镜像时,会继承父镜像的开放端口,但却不会继承启动命令,因此,需要在run.sh脚本中添加启动sshd的服务的命令:
$ cat run.sh#!/bin/bash/usr/sbin/sshd &exec apache2 -D FOREGROUND1234再次创建镜像
sudo docker build -t apache:ubuntu .
这次创建的镜像将会同时启动ssh和Apache服务
5:映射本地目录
可以通过映射本地目录的方式来指定容器内Apache服务相应的内容,这个时候只需要在启动命令中加入 -v参数即可
Start Nginx
1:创建nginx-ubuntu目录
mkdir nginx-ubuntu
vim Dockerfile
#设置继承自己创建的sshd镜像FROM thinkgamer/sshd_dockerfile:latest#创建者的基本信息MAINTAINER http://blog.csdn.net/gamer_gyt#安装nginx,设置nginx以非daemon启动RUN apt-get install -y nginx && rm -rf /var/lib/apt/lists/*RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf && chown -R www-data:www-data /var/lib/nginxRUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata#注意这里要更改系统的时区,因为在web应用中会常用到时区这个系统变量,默认的ubuntu会让你的应用程序发送不可思议的效果#添加我们的脚本,并设置权限,这回覆盖之前放在这个位置的脚本ADD run.sh /run.shRUN chmod 755 /*.sh#定义可以被挂载的目录,分别是虚拟主机的挂载目录,证书目录,配置目录和日志目录VOLUME ["/etc/nginx/sites-enabled","/etc/nginx/certs","/etc/nginx/conf.d","/var/log/nginx"]#定义工作目录WORKDIR /etc/nginx#定义输出命令CMD ["/run.sh"]#定义输出端口EXPOSE 80EXPOSE 44312345678910111213141516171819202122232425262728创建run.sh
$cat run.sh#!/bin/bash/usr/sbin/sshd &
/usr/sbin/nginx12342:build镜像
sudo docker build -t thinkgamer/nginx:a2_u16
3:测试
启动并进入容器
[redhat@bogon nginx-ubuntu]$ sudo docker run -it -d -p 10022:22 -p 80:80 thinkgamer/nginx:a2_u16 /bin/bash074466a9a455ee581fcdd21f6195a4575eb7dbb9ee50aa341dd093ca369b2246
[redhat@bogon nginx-ubuntu]$ sudo docker psCONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                                                NAMES074466a9a455        thinkgamer/nginx:a2_u16   "/bin/bash"         3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp   silly_bartik
[redhat@bogon nginx-ubuntu]$ sudo docker exec -it 07 /bin/bash123456执行run.sh
/run.sh
web访问ip
DSC0000.png

运维网声明 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-481575-1-1.html 上篇帖子: docker容器时区与宿主机不一致的解决方法 下篇帖子: 使用Dockerfile创建带Apache服务的Centos Docker镜像
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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