用存储卷部署一个网站
//创建容器
[root@localhost ~]# docker run --name centos -dit centos /bin/bash
4aceab993d472d30ff93a09a1b70c47f31b17324ad9b0d269f590e48b13d8e85
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4aceab993d47 centos "/bin/bash" 33 seconds ago Up 31 seconds centos
//传输httpd编译所需的资源包
[root@localhost ~]# ls
anaconda-ks.cfg apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.48.tar.gz
[root@localhost ~]# docker cp httpd-2.4.48.tar.gz centos:/usr/src/
[root@localhost ~]# docker cp apr-1.7.0.tar.gz centos:/usr/src/
[root@localhost ~]# docker cp apr-util-1.6.1.tar.gz centos:/usr/src/
//连接容器
[root@localhost ~]# docker exec -it centos /bin/bash
[root@4aceab993d47 /]# ls usr/src
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz debug httpd-2.4.48.tar.gz kernels
//下载依赖包
[root@4aceab993d47 /]# yum -y groups mark install 'Development Tools'
[root@4aceab993d47 /]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make
//创建用户和组
[root@4aceab993d47 /]# useradd -r -M -s /sbin/nologin apache
//安装依赖包apr
[root@4aceab993d47 src]# tar -xf apr-1.7.0.tar.gz
[root@4aceab993d47 src]# tar -xf apr-util-1.6.1.tar.gz
[root@4aceab993d47 src]# tar -xf httpd-2.4.48.tar.gz
[root@4aceab993d47 src]# ls
apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1 apr-util-1.6.1.tar.gz debug httpd-2.4.48 httpd-2.4.48.tar.gz kernels
[root@4aceab993d47 src]# cd apr-1.7.0
[root@4aceab993d47 apr-1.7.0]# sed -i '/$RM "$cfgfile"/d' configure
[root@4aceab993d47 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@4aceab993d47 apr-1.7.0]# make && make install
//安装依赖包apr-util
[root@4aceab993d47 apr-1.7.0]# cd ../apr-util-1.6.1
[root@4aceab993d47 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@4aceab993d47 apr-util-1.6.1]# make && make install
//安装依赖包httpd
[root@4aceab993d47 apr-util-1.6.1]# cd ../httpd-2.4.48
[root@4aceab993d47 httpd-2.4.48]# ./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
[root@4aceab993d47 httpd-2.4.48]# make && make install
//配置环境变量
[root@4aceab993d47 httpd-2.4.48]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@4aceab993d47 httpd-2.4.48]# source /etc/profile.d/httpd.sh
[root@4aceab993d47 httpd-2.4.48]# which httpd
/usr/local/apache/bin/httpd
//头文件、man帮助
[root@4aceab993d47 httpd-2.4.48]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@4aceab993d47 httpd-2.4.48]# echo 'MANPATH /usr/local/apache/man' >> /etc/man.config
//取消ServerName前面的注释,避免出现报错
[root@4aceab993d47 httpd-2.4.48]# sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf
//编写启动脚本
[root@4aceab993d47 /]# vi start.sh
[root@4aceab993d47 /]# cat start.sh
#!/bin/bash
/usr/local/apache/bin/apachectl start
/bin/bash
[root@4aceab993d47 /]# chmod +x /start.sh
//制作镜像
[root@localhost ~]# docker commit -a 'hhr <123@qq.com>' -c 'CMD ["/start.sh"]' centos httpd:v1.0
sha256:9a3d5ee27769253e2784f9f1db3494d4374c18174c56d98662c2156a76860d29
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1.0 9a3d5ee27769 5 seconds ago 712MB
//根据新镜像启动一个容器
[root@localhost ~]# docker run --name httpd -dit -p 80:80 -v /var/www/html:/usr/local/apache/htdocs httpd:v1.0
96f9bede244046b94d138592129cd937897132cefa22e51ed7f5900c25454465
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96f9bede2440 httpd:v1.0 "/start.sh" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp httpd
[root@localhost ~]# docker exec -it httpd /bin/bash
[root@96f9bede2440 /]# 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@96f9bede2440 /]# cd /usr/local/apache/htdocs/
[root@96f9bede2440 htdocs]# ls
//上传网页文件
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
css index.html js
//查看容器中
[root@localhost html]# ls
index.html
访问测试