使用数据卷部署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
/ #