docker19.03制作一个基于centos8的带有nfs4服务的镜像
一,下载centos的image
1,下载centos最新image
[root@localhost ~]# docker pull centos
2,查看是否成功下载到本地image
[root@localhost ~]# docker images | grep centos
centos latest 470671670cac 7 weeks ago 237MB
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,从docker运行centos8
1,宿主机上创建目录,供docker运行后的容器挂载
[root@localhost liuhongdi]# mkdir /data/nfs
[root@localhost liuhongdi]# mkdir /data/nfs/nfs1
2,运行centos这个image
[root@localhost ~]# docker run --name nfs -v /data/nfs/nfs1:/data/nfs/nfs1 --privileged -d -i -t centos:latest /usr/sbin/init
2e6fa31c71936674bb048e663d0652e3b227db84df576e1cd1d103608ad2fe56
3,查看此容器是否运行成功
[root@localhost ~]# docker ps -a | grep centos
d0fa7ffc318d centos:latest "/usr/sbin/init" 16 seconds ago Up 15 seconds
4,登录到容器
[root@localhost ~]# docker exec -it nfs /bin/bash
[root@d0fa7ffc318d /]#
三,安装并启动nfs4
1,检查是否有安装nfs
[root@d0fa7ffc318d /]# systemctl status nfs-server
Unit nfs-server.service could not be found.
看来image很简单,自带的软件非常少
从yum安装
[root@d0fa7ffc318d /]# yum install nfs-utils
2,安装成功后,配置nfs
查看nfs的运行状态 :
[root@d0fa7ffc318d /]# systemctl start nfs-server
[root@d0fa7ffc318d /]# systemctl status nfs-server
3,检查nfs是否成功启动:查看端口:
[root@d0fa7ffc318d /]# netstat -anp
20048 mountd
2049 nfs
111 portmap
四,新加nginx账号,用来供nfs的访问使用
1,建立组
[root@d0fa7ffc318d /]# groupadd nginx
[root@d0fa7ffc318d /]# groupmod -g 973 nginx
[root@d0fa7ffc318d /]# grep nginx /etc/group
nginx:x:973:
2,建立用户
[root@d0fa7ffc318d /]# useradd -g nginx -s /sbin/nologin -M nginx
[root@d0fa7ffc318d /]# usermod -u 973 nginx
[root@d0fa7ffc318d /]# grep nginx /etc/passwd
nginx:x:973:973::/home/nginx:/sbin/nologin
五,nfs上配置export一个目录
1,配置export一个目录
[root@2e6fa31c7193 /]# vi /etc/exports
内容:
/data/nfs/nfs1 192.168.1.8(rw,sync,all_squash,anonuid=973,anongid=973)
/data/nfs/nfs1 172.17.0.1(rw,sync,all_squash,anonuid=973,anongid=973)
2,使配置文件的修改生效:
[root@2e6fa31c7193 /]# exportfs -rv
exporting 192.168.1.8:/data/nfs/nfs1
exporting 172.17.0.1:/data/nfs/nfs1
3,在客户端机器上检查nfs服务端输出的文件系统:
[root@localhost ~]# showmount -e 172.17.0.3
Export list for 172.17.0.3:
/data/nfs/nfs1 172.17.0.1,192.168.1.8
4,在客户端上测试挂载
[root@localhost ~]# mount -t nfs 172.17.0.3:/data/nfs/nfs1 /data/mnt/nfs1
5,查看挂载是否成功:列出所有的nfs文件系统
[root@localhost ~]# df -hT | grep nfs
172.17.0.3:/data/nfs/nfs1 nfs 50G 24G 23G 51% /data/mnt/nfs1
六,安装nginx
1,安装nginx
[root@2e6fa31c7193 /]# yum install nginx
2,配置nginx
1,查看nginx.conf,找到默认的server的配置
[root@2e6fa31c7193 nginx]# more /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html; # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
}
2,在root /usr/share/nginx/html; 这个目录下,给nfs建立符号链接
[root@2e6fa31c7193 html]# ln -s /data/nfs/nfs1 ./nfs
3,启动nginx
[root@2e6fa31c7193 html]# systemctl start nginx
4,测试nginx是否生效
从宿主机复制一张图片a1.jpg到/data/nfs/nfs1目录下,
然后访问这个地址进行测试:
http://172.17.0.3/nfs/a1.jpg
说明:172.17.0.3 是nfs服务所在容器的ip
七,commit一个新镜像
[root@localhost ~]# docker commit nfs nfsnginx:0.1
sha256:fa72df9fb74483e90335e99985d8c560d6b6376a66a666e42c3260f79e925691
八,查看新镜像是否生成
[root@localhost ~]# docker images | grep nfsnginx
nfsnginx 0.1 fa72df9fb744 54 seconds ago 328MB
九,测试运行新镜像:
1,启动
[root@localhost ~]# docker run --name nfsnginx -v /data/nfs/nfs1:/data/nfs/nfs1 --privileged -d -i -t nfsnginx:0.1 /usr/sbin/init
ce03496a89b0fcb4011d1c3b945449fabcc27c3438449ce856cbbdf3f2513acb
2,登录,并查看ip:
[root@localhost ~]# docker exec -it nfsnginx /bin/bash
[root@ce03496a89b0 /]# ifconfig | grep inet
inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255
3,启动服务:
[root@ce03496a89b0 /]# systemctl start nginx
[root@ce03496a89b0 /]# systemctl start nfs-server
十,查看docker的版本
[root@localhost source]# docker --version
Docker version 19.03.7, build 7141c19
docker19.03制作一个基于centos8的带有nfs4服务的镜像的更多相关文章
- 如何快速搭建一个基于ServiceStack框架的web服务
ServiceStack是一个高性能的.NET Web Service 平台,能够简化开发高性能的REST (支持JSON,XML,JSV,HTML,MsgPack,ProtoBuf,CSV等消息格式 ...
- 使用Axure RP原型设计实践03,制作一个登录界面的原型
本篇体验做一个登录界面的原型. 登录页 首先在Page Style里为页面设置背景色. 如果想在页面中加图片,就把Image部件拖入页面,并设置x和y轴.双击页面中的Image部件可以导入图片.在Im ...
- 用Kotlin写一个基于Spring Boot的RESTful服务
Spring太复杂了,配置这个东西简直就是浪费生命.尤其在没有什么并发压力,随便搞一个RESTful服务 让整个业务跑起来先的情况下,更是么有必要纠结在一堆的XML配置上.显然这么想的人是很多的,于是 ...
- 为Azure-云准备一个基于Red Hat 8.x 的虚拟机镜像
由于公司最近要求部分项目上线到Azure云上,要求操作系统使用的Redhat 8.x,而且必须加固 而在Azure官网提供的镜像中,又没有Redhat,于是只有自己自定义Redhat镜像,最后加固,作 ...
- docker19.03搭建私有容器仓库
一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...
- 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机
引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...
- IIS 中托管基于TCP绑定的WCF服务
IIS 中托管基于TCP绑定的WCF服务 一.创建一个基于TCP绑定的WCF服务 1.创建一个的简单的服务具体代码如下 服务契约定义 namespace SimpleService { // 注意: ...
- 基于小米即时消息云服务(MIMC)的Web IM
michat 一个基于小米即时消息云服务(MIMC)的Web IM. 源码地址github和gitee同步. 截图展示 如何使用 请先双击目录"需要安装的jars"的install ...
- 基于url-to-pdf-api构建docker镜像,制作一个网页另存服务
基于url-to-pdf-api构建docker镜像,制作一个网页另存服务 业务背景: 需要根据一个url路径打印这个网页的内容 解决方案: 1.使用wkhtml2pdf 2.使用puppeteer ...
随机推荐
- Fliptile(POJ 3279)
原题如下: Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16494 Accepted: 6025 D ...
- python之读取yaml数据
一.yaml简介 yaml:一种标记语言,专门用来写配置文件. 二.yaml基础语法 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元素 ...
- oracle数据处理之逻辑备份与恢复
逻辑备份与恢复 17.1 传统的导入导出exp/imp:传统的导出导入程序指的是exp/imp,用于实施数据库的逻辑备份和恢复. 导出程序exp将数据库中的对象定义和数据备份到一个操作系统二进制文件中 ...
- 使用PXE+VNC方式安装CentOS 7
U盘坏了,用个下面的方法安装 安装配置dhcp yum -y install dhcp tftp-server 修改如下,网段改为你自己的网段 vim /etc/dhcp/dhcpd.conf sub ...
- python 中简单的输出语句
1 python 中简单的输出语句 #coding:utf-8#输出的是整数,得到的也是整数,用raw_inputusername=raw_input('请输入用户名:')#输出的是整数或者字符串,得 ...
- 搭建ssm整合
一.导入依赖 二.新建java和resources目录 1.在java目录新建cn.itcat.domain包,继续添加controller,service,dao,的包 2.在domain里面创建A ...
- Tensorflow图级别随机数设置-tf.set_random_seed(seed)
tf.set_random_seed(seed) 可使得所有会话中op产生的随机序列是相等可重复的. 例如: tf.set_random_seed(1234) a = tf.random_unifor ...
- 《Head First 设计模式》:代理模式
正文 一.定义 代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问. 要点: 代理模式为一个对象创建了代理对象,让代理对象控制对该对象的访问.被代理的对象可以是远程的对象.创建开销大的对象 ...
- JMETER并发压测-自定义不同请求参数
背景 虽然可以请求相同的接口做测试,但是请求参数每次都是相同的.为了模拟不同的用户,请求不同的参数,所以要自定义参数来做多线程并发压力测试. 点赞再看,关注公众号:[地藏思维]给大家分享互联网场景设计 ...
- Python正则表达式 re.sub()函数:标志位flags与参数个数问题
这两天在写爬虫程序,涉及英文文本处理,需要规范化英文标点符号的写法.正常情况下,英文句号「.」后面需要保证有且只有一个空格,但也有例外情况,比如「i.e.」.「e.g.」.「P.S.」这种.由于无法预 ...