Docker---使用数据卷部署nginx容器

使用数据卷部署nginx容器

1、创建两个目录分别放置配置文件和网页内容

//创建存放页面内容和配置文件目录
[root@localhost ~]# mkdir /var/www/html -p
[root@localhost ~]# mkdir /config


//把下载好的页面文件解压 放置到前面创建的目录中
[root@localhost ~]# cd htm5公路赛车游戏src-glsc/
[root@localhost htm5公路赛车游戏src-glsc]# ls
game.js  index.html  media
[root@localhost htm5公路赛车游戏src-glsc]# mv * /var/www/html/
[root@localhost htm5公路赛车游戏src-glsc]# ls /var/www/html/
game.js  index.html  media



//利用yum下载nginx,然后把配置文件全部移动到刚刚创建的/config目录中
[root@localhost ~]# yum -y install nginx
上次元数据过期检查:4:08:13 前,执行于 2021年12月07日 星期二 14时28分44秒。
依赖关系解决。
====================================================================
 软件包                  架构   版本                仓库       大小
====================================================================
安装:
 nginx                   x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82
......
......

[root@localhost nginx]# cp * -r /config/
[root@localhost nginx]# cd /config/
[root@localhost config]# ls
conf.d                  koi-utf             scgi_params
default.d               koi-win             scgi_params.default
fastcgi.conf            mime.types          uwsgi_params
fastcgi.conf.default    mime.types.default  uwsgi_params.default
fastcgi_params          nginx.conf          win-utf
fastcgi_params.default  nginx.conf.default

2、创建数据卷容器

[root@localhost ~]# docker run --name html -v /var/www/html/:/usr/share/nginx/html busybox
# 数据卷容器是不需要运行的
#-v:[本地文件]:[数据卷容器] 本地的xx文件映射到数据卷容器后的xx位置
#yum安装的nginx服务页面内容就放在/usr/share/nginx/html目录中,所以要把文件映射都在这里
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
3aab638df1a9: Pull complete 
Digest: sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad
5a101234ef1
Status: Downloaded newer image for busybox:latest
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          
            PORTS     NAMES
34657440a6dc   busybox   "sh"      21 seconds ago   Exited (0) 20 se
conds ago             html
## 数据卷容器是不需要运行的
## 数据卷容器是不需要运行的
## 数据卷容器是不需要运行的


//创建一个容器验证一下,查看是否映射到了本地的目录
[root@localhost ~]# docker run -it --rm --volumes-from html busybox
# 创建了一个容器,数据来源自html这个容器

/ # cd /usr/share/nginx/html/
/usr/share/nginx/html # ls
game.js     index.html  media


//再创建一个数据卷容器用于存放配置文件
[root@localhost ~]# docker run --volumes-from html -v /config/:/etc/nginx --name nginx_conf  busybox
#创建一个容器名称叫nginx_conf 数据来源是html这台存放页面内容的主机
#并且把本机存放配置文件的目录映射到容器中的/etc/nginx目录下面,这样新的容器既有配置文件也有页面内容了
# yum安装的nginx配置文件就放在/etc/nginx,所以要把文件映射到这个地方
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS                     PORTS     NAMES
f521b7a0260c   busybox   "sh"      7 seconds ago   Exited (0) 7 seconds ago             nginx_conf
34657440a6dc   busybox   "sh"      8 minutes ago   Exited (0) 8 minutes ago             html
## 数据卷容器时不需要运行的

//创建一个容器测试,查看nginx_conf这太主机是否有配置文件和网页内容
[root@localhost ~]# docker run -it --rm --volumes-from nginx_conf  busybox 
/ # ls /etc/nginx/
conf.d                  mime.types.default
default.d               nginx.conf
fastcgi.conf            nginx.conf.default
fastcgi.conf.default    scgi_params
fastcgi_params          scgi_params.default
fastcgi_params.default  uwsgi_params
koi-utf                 uwsgi_params.default
koi-win                 win-utf
mime.types
/ # ls /usr/share/nginx/html/
game.js     index.html  media
# 此时nginx_conf这台主机就有了配置文件和页面内容
# 这个时候是可以删除html这台主机的,因为都是映射的关系,本机映射到了html,html又映射到了nginx_conf这台主机
# 就相当于物理机上的两文件都映射到了nginx_conf这台主机了就不需要html这台主机了。
# 那么现在删除了html这台主机  物理机也是可以和nginx_conf这台主机映射连通的。


3、创建nginx镜像

[root@localhost ~]# docker  run -d --name web --volumes-from nginx_conf -P  nginx
#创建一个nginx镜像数据来源是nginx_conf这台主机,
#并且把nginx主机的所有端口全部暴露出来了
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
e5ae68f74026: Pull complete 
21e0df283cd6: Pull complete 
ed835de16acd: Pull complete 
881ff011f1c9: Pull complete 
77700c52c969: Pull complete 
44be98c0fab6: Pull complete 
Digest: sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
Status: Downloaded newer image for nginx:latest
90ab85b70979bd88d00c52fac3c5ad3bb748f7dd005b85ca317a2fc7776a96ea
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                     NAMES
90ab85b70979   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp   web


//进入到容器查看文件信息
[root@localhost ~]# docker exec -it web  /bin/bash
root@90ab85b70979:/# ls /etc/nginx/
conf.d                  koi-utf             scgi_params
default.d               koi-win             scgi_params.default
fastcgi.conf            mime.types          uwsgi_params
fastcgi.conf.default    mime.types.default  uwsgi_params.default
fastcgi_params          nginx.conf          win-utf
fastcgi_params.default  nginx.conf.default

root@90ab85b70979:/# ls /usr/share/nginx/html/
game.js  index.html  media

# 因为添加了映射所以nginx容器源有的文件被隐藏起来了,并不是被删了或者覆盖了 只是隐藏了
# 因为添加了映射所以nginx容器源有的文件被隐藏起来了,并不是被删了或者覆盖了 只是隐藏了
# 因为添加了映射所以nginx容器源有的文件被隐藏起来了,并不是被删了或者覆盖了 只是隐藏了

IP加49153端口访问即可
在这里插入图片描述

利用数据卷容器迁移数据

可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。

备份

[root@localhost ~]# docker run --volumes-from web -v $(pwd):/backup centos tar zcf /backup/nginx_conf.tar.gz /etc/nginx
tar: Removing leading `/' from member names
[root@localhost ~]# ll
total 12
-rw-------. 1 root root 1169 Jul 10 20:37 anaconda-ks.cfg
-rw-r--r--. 1 root root 6090 Dec  7 20:01 nginx_conf.tar.gz

[root@localhost ~]# tar xf nginx_conf.tar.gz 
[root@localhost ~]# ls 
anaconda-ks.cfg  etc  nginx_conf.tar.gz
[root@localhost ~]# ls etc/nginx/
conf.d                  koi-utf             scgi_params
default.d               koi-win             scgi_params.default
fastcgi.conf            mime.types          uwsgi_params
fastcgi.conf.default    mime.types.default  uwsgi_params.default
fastcgi_params          nginx.conf          win-utf
fastcgi_params.default  nginx.conf.default

首先利用centos镜像创建了一个容器。使用–volumes-from web参数来让容器挂载web容器的数据卷(即web数据卷);使用-v $(pwd):/backup参数来挂载本地的当前目录到容器的/backup目录。
容器启动后,使用了tar zcf /backup/nginx_conf.tar.gz /etc/nginx命令来将/etc/nginx下内容备份为容器内的/backup/nginx_conf.tar.gz,即宿主主机当前目录下的nginx_conf.tar.gz。

恢复

//开启一个容器,此时目录下为空
[root@localhost ~]# docker run -it --name test --rm -v /etc/nginx busybox
/ # ls /etc/nginx/
/ # 

//恢复数据
[root@localhost ~]# docker run --volumes-from test -v $(pwd):/backup centos tar xf /backup/nginx_conf.tar.gz

//test容器查看内容
/ # ls /etc/nginx/
conf.d                  koi-utf                 scgi_params
default.d               koi-win                 scgi_params.default
fastcgi.conf            mime.types              uwsgi_params
fastcgi.conf.default    mime.types.default      uwsgi_params.default
fastcgi_params          nginx.conf              win-utf
fastcgi_params.default  nginx.conf.default
/ # 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值