Docker构建Apache镜像
本篇主要介绍apache镜像的构建
使用DockerHub镜像
1.创建工作目录,准备Dockerfile文件及index.html
[root@localhost docker]# mkdir apache
[root@localhost docker]# cd apache/
[root@localhost apache]# vim Dockerfile
[root@localhost apache]# vim public-html
[root@localhost apache]# cat Dockerfile
FROM httpd:2.4
COPY ./public-html /usr/local/apache2/htdocs/
[root@localhost apache]# mkdir public-html
[root@localhost apache]# cat public-html/index.html
<! DOCTYPE html>
<html>
<body>
<p>Hello Docker!</p>
</body>
</html>
2.构建镜像并启动
[root@localhost apache]# docker build -t apache2-image .
[root@localhost apache]# docker run -d -P apache2-image
eef5ae35db15501f758c5fb78fd9b2724a46b0031dbee259b9fa42cb991b5d10
[root@localhost apache]# docker ps|grep apache
eef5ae35db15 apache2-image "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:32775->80/tcp mystifying_ride
[root@localhost apache]# curl localhost:32775
<! DOCTYPE html>
<html>
<body>
<p>Hello Docker!</p>
</body>
</html>
[root@localhost apache]#
3.除了使用Dockerfile打包镜像外,也可以使用挂载数据卷的方式来启动服务
[root@localhost apache]# docker run -d -it --rm --name my-apache-app -P -v /u01/learn/docker/apache/:/usr/local/apache2/htdocs httpd:2.4
6f75d2f4e0dc4d750af0ff0e29ea790fdfe3e0b973aab6117a45ed0f447b6611
[root@localhost apache]# docker ps|grep my
6f75d2f4e0dc httpd:2.4 "httpd-foreground" 7 seconds ago Up 7 seconds 0.0.0.0:32777->80/tcp my-apache-app
[root@localhost apache]# curl localhost:32777
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /</title>
</head>
<body>
<h1>Index of /</h1>
<ul><li><a href="Dockerfile"> Dockerfile</a></li>
<li><a href="public-html/"> public-html/</a></li>
</ul>
</body></html>
[root@localhost apache]# curl http://192.168.15.79:32777/public-html/
<! DOCTYPE html>
<html>
<body>
<p>Hello Docker!</p>
</body>
</html>
[root@localhost apache]#
使用自定义镜像
1.准备工作目录及文件
[root@localhost docker]# mkdir apache_ubuntu && cd apache_ubuntu
[root@localhost apache_ubuntu]# touch Dockerfile run.sh
[root@localhost apache_ubuntu]# mkdir sample
2.Dockerfile编写
[root@localhost apache_ubuntu]# cat Dockerfile
#基于Docker入门-为镜像添加SSH服务文章中使用Dockerfile创建镜像
#https://blog.csdn.net/weixin_43169156/article/details/115127894
FROM sshd:dockerfile
#创建者信息
MAINTAINER docker_user(chundaoc@docker.com)
#设置环境变量,所有操作都是非交互的
ENV DEBIAN_FRONTEND noninteractive
#安装
RUN apt-get -yq install apache2 && apt-get -y install tzdata &&\
rm -rf /var/lib/apt/lists/*
#更改系统的时区设置
RUN echo "Asia/Shanghai">/etc/timezone && dpkg-reconfigure -f noninteractive tzdata
#添加用户的脚本,并设置权限,这里会覆盖之前用于启动ssh的run脚本
ADD run.sh /run.sh
RUN chmod +x /*.sh
#添加测试web页面,删掉apache默认的文件,将示例软连接到/var/www/html目录
RUN mkdir -p /var/lock/apache2 && mkdir -p /var/run/apache2 && mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
COPY sample/ /app
#设置apache变量,在容器启动时可以使用-e参数代替
ENV APACHE_RUN_GROUP wwww-data
ENV APACHE_RUN_USER 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@localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www
EXPOSE 80
WORKDIR /app
CMD ["/run.sh"]
[root@localhost apache_ubuntu]#
3.sample站点添加html文件
[root@localhost apache_ubuntu]# cat sample/index.html
<! DOCTYPE html>
<html>
<body>
<p>Hello Docker!</p>
</body>
</html>
4.编写run脚本
[root@localhost apache_ubuntu]# cat run.sh
#! /bin/bash
exec apache2 -D FOREGROUND
[root@localhost apache_ubuntu]#
5.构建镜像并启动,不过启动报错,此报错待解决
[root@localhost apache_ubuntu]# docker build -t apache:ubuntu .
[root@localhost apache_ubuntu]# docker run -P apache:ubuntu
AH00544: apache2: bad group name wwww-data
[root@localhost apache_ubuntu]#