作者:80后女孩香香521 | 来源:互联网 | 2023-06-17 17:58
众所周知,httpd是一个服务,里面有很多配置要改,通过dockerfile编写很复杂,所以这里,我们【采用进入容器内修改的方式,去生成一个新的httpd容器】
httpd我们平常用yum安装,所以一定要最好是自带Yum的centos7
拉取容器基础环境
docker pull centos:7
启动容器,以特权模式启动,否则无法修改httpd
docker run -dit --name httpd --privileged=true docker.io/centos:7 init
然后进入容器
docker exec -it httpd /bin/bash
进入容器内部后,安装httpd
yum install httpd
修改httpd指定你想访问的端口
vi /etc/httpd/conf/httpd.conf
改成自己喜欢的端口
vi /etc/httpd/conf.d/welcome.conf
减号改加号,意思是不用默认页面
重启(这里centos的版本不一样,启动的代码也不一样)
systemctl restart httpd.service
构建新镜像
docker commit -a="clark" -m="i install httpd" httpd dahua-httpd
启动容器
docker run -di --name dahua-httpd -p 9998:9999 dahua-httpd:latest
前面9998是,映射出来的端口号,9999是容器内部端口号,我们通过9998访问来观察是否成功
不成功!要进入容器里面在把他给启动
docker exec -it dahua-httpd /bin/bash
systemctl start httpd.service
成功
但是,你是不是会觉得很蠢!为什么还要进入容器里面使用,容器之所以出来,就是让大家run一下服务就能用的
ok,下面,老弟带你加一个小参数就搞定,在run的时候也启动内部服务
我来给大家演示一下,想搞定,必备Dockerfile
创建一个httpd2的文件夹,在里面创建一个Dockerfile
dockerfile意思是:拉取我们刚生成的带httpd的镜像,然后运行run.sh脚本,并且暴露端口
FROM dahua-httpd
RUN echo "Asia/Shanghai" > /etc/timezone
COPY run.sh /run.sh
RUN chmod 777 /run.sh
EXPOSE 9999
ENTRYPOINT [ "/run.sh" ]
为什么要用run.sh,而不是直接执行,因为从外部执行docker会有很多限制,很多不会生效
run.sh脚本的内容
#!/bin/sh
httpd
bash
解释,运行httpd,然后bash表示,他运行完不会退出,不加bash会导致容器关闭
注意httpd,不要写成systemctl start httpd.service这样不安全(并且run的时候还要多加很多操作),httpd就代表httpd start
构建新的自动运行的镜像,其中httpd2是名称
docker build -t dahua-httpd-new .
启动
docker run -dit --name dahua-httpd -p 9998:9999 dahua-httpd-new:latest
浏览器访问
参考:
另外特别鸣谢-感谢公司某雷哥的支持
Docker 镜像构建之 docker commit - 知乎
Centos7文件服务器的搭建(含域名访问)_我要用代码向我喜欢的女孩表白的博客-CSDN博客_centos7文件服务器搭建