Docker基于容器制作httpd镜像

  • 1 编译安装httpd
  • 2 安装nfs共享存储
  • 3 使用nfs共享存储提供httpd网页服务
  • 4 在浏览器上进行测试访问

1 编译安装httpd

[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
caiaoc/mysql   v1.0      ba85e9d47f00   2 days ago     3.81GB
caiaoc/nginx   v1.0      a985a6973aec   2 days ago     549MB
caiaoc/php     v1.0      f5fe6827f02b   2 days ago     1.46GB
busybox        latest    d23834f29b38   6 days ago     1.24MB
httpd          latest    ad17c88403e2   2 weeks ago    143MB
nginx          latest    ea335eea17ab   2 weeks ago    141MB
centos         latest    5d0da3dc9764   2 months ago   231MB//通过centos镜像的基础上搭建httpd服务
[root@docker ~]# docker run -it --name httpd centos /bin/bash
[root@17c934af0f95 /]#     //在本地将包上传到httpd容器中
[root@docker ~]# ls
apr-1.7.0.tar.gz       httpd-2.4.48.tar.gz
apr-util-1.6.1.tar.gz  pure-css3-lighter.rar
[root@docker ~]# docker cp apr-1.7.0.tar.gz httpd:/usr/src/
[root@docker ~]# docker cp apr-util-1.6.1.tar.gz httpd:/usr/src/
[root@docker ~]# docker cp httpd-2.4.48.tar.gz httpd:/usr/src/
[root@docker ~]# //安装开发工具包组
[root@17c934af0f95 ~]# yum groups mark install 'Development Tools' -y//安装依赖包
[root@17c934af0f95 ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make//创建apache服务的用户和组
[root@17c934af0f95 ~]# useradd -r -M -s /sbin/nologin apache     //解压包
[root@17c934af0f95 ~]# cd  /usr/src/
[root@17c934af0f95 src]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  debug  httpd-2.4.48.tar.gz  kernels
[root@17c934af0f95 src]# tar xf apr-1.7.0.tar.gz
[root@17c934af0f95 src]# tar xf apr-util-1.6.1.tar.gz
[root@17c934af0f95 src]# tar xf httpd-2.4.48.tar.gz
[root@17c934af0f95 src]# ls
apr-1.7.0     apr-util-1.6.1     debug         httpd-2.4.48.tar.gz
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.48  kernels
[root@17c934af0f95 src]# //编译安装apr
[root@17c934af0f95 src]# cd apr-1.7.0
[root@17c934af0f95 apr-1.7.0]# vi configure
[root@17c934af0f95 apr-1.7.0]# cat configure
......cfgfile="${ofile}T"trap "$RM \"$cfgfile\"; exit 1" 1 2 15$RM "$cfgfile"        //将此行加上注释,或者删除此行
......
[root@17c934af0f95 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@17c934af0f95 apr-1.7.0]# make && make install//编译安装apr-util
[root@17c934af0f95 apr-util-1.6.1]# cd ../apr-util-1.6.1
[root@17c934af0f95 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@17c934af0f95 apr-util-1.6.1]# make && make install//编译安装httpd
[root@17c934af0f95 apr-util-1.6.1]# cd ../httpd-2.4.48
[root@17c934af0f95 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@17c934af0f95 httpd-2.4.48]# make && make install//安装后配置
[root@17c934af0f95 ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@17c934af0f95 ~]# vi /usr/local/apache/conf/httpd.conf
......
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80        # 取消配置文件中ServerName前面的注释
......//启动httpd
[root@17c934af0f95 ~]# /usr/local/apache/bin/httpd
[root@17c934af0f95 ~]# ss -antl
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@17c934af0f95 ~]# //编写httpd启动脚本
[root@17c934af0f95 ~]# vi /start.sh
[root@17c934af0f95 ~]# chmod + /start.sh
[root@17c934af0f95 ~]# cat /start.sh
#!/bin/sh
/usr/local/apache/bin/httpd
/bin/bash
[root@17c934af0f95 ~]# //制作httpd镜像(另起一个终端,httpd容器不能停止)
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED             STATUS             PORTS     NAMES
17c934af0f95   centos    "/bin/bash"   About an hour ago   Up About an hour             httpd
[root@docker ~]# [root@docker ~]# docker commit -p -c 'CMD ["/bin/bash","/start.sh"]' 17c934af0f95 caiaoc/httpd:v1.0
sha256:7340d8864b7ce782e2868e6b56a440d677db047e06518278e8ccb44680627fcb
[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
caiaoc/httpd   v1.0      7340d8864b7c   3 seconds ago   712MB
caiaoc/mysql   v1.0      ba85e9d47f00   2 days ago      3.81GB
caiaoc/nginx   v1.0      a985a6973aec   2 days ago      549MB
caiaoc/php     v1.0      f5fe6827f02b   2 days ago      1.46GB
busybox        latest    d23834f29b38   6 days ago      1.24MB
httpd          latest    ad17c88403e2   2 weeks ago     143MB
nginx          latest    ea335eea17ab   2 weeks ago     141MB
centos         latest    5d0da3dc9764   2 months ago    231MB
[root@docker ~]#

2 安装nfs共享存储

//首先创建nfs共享存储
[root@nfs ~]# mkdir /nfs[root@nfs ~]# vi /etc/exports
[root@nfs ~]# cat /etc/exports
/nfs 192.168.200.145(rw)
[root@nfs ~]# [root@nfs ~]# yum -y install nfs-utils[root@nfs ~]# systemctl enable --now nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@nfs ~]# systemctl restart nfs-server[root@nfs ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@nfs ~]# vi /etc/selinux/config
[root@nfs ~]# setenforce 0
[root@nfs ~]# getenforce 0
Permissive
[root@nfs ~]#  [root@nfs ~]# showmount -e 192.168.200.144
Export list for 192.168.200.144:
/nfs 192.168.200.145
[root@nfs ~]# //centos8上用的是nobody用户来共享存储(centos7上用的是nfsnobody用户来执行共享存储)
[root@nfs ~]# id nobody
uid=65534(nobody) gid=65534(nobody) 组=65534(nobody)
[root@nfs ~]# //设置/nfs读写执行
[root@nfs ~]# setfacl -m u:nobody:rwx /nfs
[root@nfs ~]# getfacl /nfs
getfacl: Removing leading '/' from absolute path names
# file: nfs
# owner: root
# group: root
user::rwx
user:nobody:rwx
group::r-x
mask::rwx
other::r-x[root@nfs ~]# 

docker主机配置


//在docker主机上安装nfs
[root@docker ~]# yum -y install nfs-utils
[root@docker ~]# mkdir /storage
[root@docker ~]# mount -t nfs 192.168.200.144:/nfs  /storage/[root@docker ~]# df -h
文件系统              容量  已用  可用 已用% 挂载点
devtmpfs              1.8G     0  1.8G    0% /dev
tmpfs                 1.9G     0  1.9G    0% /dev/shm
tmpfs                 1.9G  9.1M  1.9G    1% /run
tmpfs                 1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/cs-root    64G  8.6G   56G   14% /
/dev/mapper/cs-home    32G  255M   31G    1% /home
/dev/sda1            1014M  195M  820M   20% /boot
tmpfs                 371M     0  371M    0% /run/user/0
192.168.200.144:/nfs   62G  2.0G   60G    4% /storage
[root@docker ~]#

3 使用nfs共享存储提供httpd网页服务

//映射httpd的网页目录/usr/local/apache/htdocs到nfs挂载的/storage上
[root@docker ~]# docker run -it --name web -p 80:80 -v /storage:/usr/local/apache/htdocs 7340d8864b7c
[root@c73146535427 /]# ss -antl
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@c73146535427 /]# //提供在/storage上网页文件
[root@docker ~]# cd /storage/
[root@docker storage]# ls
[root@docker storage]#
[root@docker storage]# ls
jiaoben1765
[root@docker storage]# cd jiaoben1765/
[root@docker jiaoben1765]# ls
css  img  index.html  js
[root@docker jiaoben1765]#

4 在浏览器上进行测试访问

Docker基于容器制作httpd镜像(使用nfs共享存储部署一个网站)相关推荐

  1. Docker将容器制作成镜像并提交到远程仓库

    Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...

  2. centos基础镜像做mysql镜像_使用docker 基于centos7制作mysql镜像

    说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...

  3. Docker系列06—基于容器制作镜像并上传到Docker Registry

    Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...

  4. Docker 3.2.8:基于 Dockerfile 制作 JDK 镜像

    3.2.8:基于 Dockerfile 制作 JDK 镜像 准备基础镜像 以 centos-init:v1 为基础镜像: 编写 Dockerfile 切换到相应目录,编写 Dockerfile: ro ...

  5. Docker 3.2.12:基于 Dockerfile 制作 Redis 镜像

    3.2.12:基于 Dockerfile 制作 Redis 镜像 准备基础镜像 使用之前制作的 centos-init:8.3.2011 作为基础镜像: 编写 Dockerfile 制作 redis- ...

  6. Docker 3.2.5:基于 Dockerfile 制作 Nginx 镜像

    3.2.5:基于 Dockerfile 制作 Nginx 镜像(编译版) 准备基础镜像 使用制作好的 centos-init 作为基础镜像: 编写 Dockerfile 进入相应的 Dockerfil ...

  7. Docker把容器打包成镜像并提交到harbor仓库

    Docker把容器打包成镜像并提交到harbor仓库 如果你想要保存当前容器的状态,就可以通过commit来提交获得一个镜像,就好我们虚拟机的时候创建快照,想要回滚到某一个版本 一.首先创建要给tom ...

  8. 基于NFS共享存储实现kvm虚拟主机动态迁移

    所有主机关闭防火墙与selinux [root@localhost ~]# iptables -F [root@localhost ~]# systemctl stop firewalld [root ...

  9. NFS共享存储(用于内网) httpd协议 nginx 两种上传方式 区别

    文章目录 NFS共享存储(用于内网) 什么是NFS 为什么使用NFS 常见的数据存储方式 NFS的作用 测试:nginx页面展示 NFS原理 NFS配置详解 开机自动挂载 案例(nginx上传) ba ...

最新文章

  1. 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?
  2. 马斯克称特斯拉AutoPilot方案宛如“超人”,首要任务是“不撞车”;网友:???...
  3. iOS开发 QQ粘性动画效果
  4. Java中判断数组是否包含某值
  5. Qt5.12编译MySQl5.1.37驱动
  6. log4j配置文件及nutch中的日志配置
  7. 主打“云安全” 迅雷系帝恩思登陆新三板
  8. 如何获取STM32 MCU的唯一ID
  9. c语言中根据数据的组织形式 把文件分为,根据数据的组织形式,C中将文件分为______________和____________.._简答题试题答案...
  10. layUI数据表格可编辑扩展日期框
  11. [转载] python解析返回结果_python:解析requests返回的response(json格式)说明
  12. Q-learning学习笔记
  13. 电子证件照尺寸怎样裁剪?怎么把照片裁剪成2寸?
  14. 简单典型二阶系统_非典型二阶系统的特性
  15. android系统的官网下载地址,Android安卓10.0系统官方正式版
  16. 可重用性,可维护性,可读性,可测试性,可用性,健壮性
  17. 伯努利试验和二项分布
  18. android动态设置渐变背景
  19. XtraReport数据绑定模式比较
  20. 寄售信息记录的几个问题

热门文章

  1. 社工服务嵌入残疾人托养照料--托起残疾人幸福生活
  2. 摄像头参数介绍 ———— 动态范围
  3. 简单 坦克大战 pygame -制作
  4. 亚马逊接口NextToken分页调用时AuthFailure问题的解决
  5. 鸿蒙能用linux许可证,【HarmonyOS HiSpark AI Camera试用连载 】Linux下的鸿蒙
  6. 【Kotlin协程】基于RxJava项目的Coroutine改造
  7. 24.CAPWAP原理_CAPWAP协议介绍
  8. “买菜”凶猛,入局“三”思
  9. 瀑布流效果实现vue3
  10. Chatgpt AI这么恐怖?未就业就要失业了?