Docker基于容器制作httpd镜像(使用nfs共享存储部署一个网站)
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共享存储部署一个网站)相关推荐
- Docker将容器制作成镜像并提交到远程仓库
Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...
- centos基础镜像做mysql镜像_使用docker 基于centos7制作mysql镜像
说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...
- Docker系列06—基于容器制作镜像并上传到Docker Registry
Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...
- Docker 3.2.8:基于 Dockerfile 制作 JDK 镜像
3.2.8:基于 Dockerfile 制作 JDK 镜像 准备基础镜像 以 centos-init:v1 为基础镜像: 编写 Dockerfile 切换到相应目录,编写 Dockerfile: ro ...
- Docker 3.2.12:基于 Dockerfile 制作 Redis 镜像
3.2.12:基于 Dockerfile 制作 Redis 镜像 准备基础镜像 使用之前制作的 centos-init:8.3.2011 作为基础镜像: 编写 Dockerfile 制作 redis- ...
- Docker 3.2.5:基于 Dockerfile 制作 Nginx 镜像
3.2.5:基于 Dockerfile 制作 Nginx 镜像(编译版) 准备基础镜像 使用制作好的 centos-init 作为基础镜像: 编写 Dockerfile 进入相应的 Dockerfil ...
- Docker把容器打包成镜像并提交到harbor仓库
Docker把容器打包成镜像并提交到harbor仓库 如果你想要保存当前容器的状态,就可以通过commit来提交获得一个镜像,就好我们虚拟机的时候创建快照,想要回滚到某一个版本 一.首先创建要给tom ...
- 基于NFS共享存储实现kvm虚拟主机动态迁移
所有主机关闭防火墙与selinux [root@localhost ~]# iptables -F [root@localhost ~]# systemctl stop firewalld [root ...
- NFS共享存储(用于内网) httpd协议 nginx 两种上传方式 区别
文章目录 NFS共享存储(用于内网) 什么是NFS 为什么使用NFS 常见的数据存储方式 NFS的作用 测试:nginx页面展示 NFS原理 NFS配置详解 开机自动挂载 案例(nginx上传) ba ...
最新文章
- 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?
- 马斯克称特斯拉AutoPilot方案宛如“超人”,首要任务是“不撞车”;网友:???...
- iOS开发 QQ粘性动画效果
- Java中判断数组是否包含某值
- Qt5.12编译MySQl5.1.37驱动
- log4j配置文件及nutch中的日志配置
- 主打“云安全” 迅雷系帝恩思登陆新三板
- 如何获取STM32 MCU的唯一ID
- c语言中根据数据的组织形式 把文件分为,根据数据的组织形式,C中将文件分为______________和____________.._简答题试题答案...
- layUI数据表格可编辑扩展日期框
- [转载] python解析返回结果_python:解析requests返回的response(json格式)说明
- Q-learning学习笔记
- 电子证件照尺寸怎样裁剪?怎么把照片裁剪成2寸?
- 简单典型二阶系统_非典型二阶系统的特性
- android系统的官网下载地址,Android安卓10.0系统官方正式版
- 可重用性,可维护性,可读性,可测试性,可用性,健壮性
- 伯努利试验和二项分布
- android动态设置渐变背景
- XtraReport数据绑定模式比较
- 寄售信息记录的几个问题
热门文章
- 社工服务嵌入残疾人托养照料--托起残疾人幸福生活
- 摄像头参数介绍 ———— 动态范围
- 简单 坦克大战 pygame -制作
- 亚马逊接口NextToken分页调用时AuthFailure问题的解决
- 鸿蒙能用linux许可证,【HarmonyOS HiSpark AI Camera试用连载 】Linux下的鸿蒙
- 【Kotlin协程】基于RxJava项目的Coroutine改造
- 24.CAPWAP原理_CAPWAP协议介绍
- “买菜”凶猛,入局“三”思
- 瀑布流效果实现vue3
- Chatgpt AI这么恐怖?未就业就要失业了?