Docker搭建2048游戏,搭建Nginx服务器,Docker数据卷管理

一,搭建2048小游戏:

[root@foundation92 Desktop]# docker load -i game2048.tar  #导入镜像

[root@foundation92 Desktop]# docker run -d  -p 8000:80 --name game game2048  #运行小游戏,并将容器的80端口映射到本机的8090端库执行

在本机浏览器执行:
这里写图片描述

docker inspect game2048 #此命令用来查看镜像信息

二,搭建nginx服务器:

[root@foundation92 Desktop]# docker load -i nginx.tar  #导入镜像
d8bd0657b25f: Loading layer 130.9 MB/130.9 MB

a582cd499e0f: Loading layer 1.024 kB/1.024 kB
f5a1ef78853b: Loading layer 1.024 kB/1.024 kB
605083c53cc5: Loading layer 1.024 kB/1.024 kB
c95d1af3960d: Loading layer 67.97 MB/67.97 MB
0a410ba58143: Loading layer 3.584 kB/3.584 kB
fb6fc13654c9: Loading layer 1.024 kB/1.024 kB
36b0adefb2f3: Loading layer 1.024 kB/1.024 kB
[root@foundation92 Desktop]# docker images   #查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        14 months ago       55.5 MB
nginx               latest              af4b3d7d5401        23 months ago       190.5 MB

#了解nginx容器的配置:
[root@foundation92 Desktop]# docker run -it nginx bash
root@25bb2e970049:/# find / -name nginx
/etc/default/nginx
/etc/init.d/nginx
/etc/logrotate.d/nginx
/etc/nginx
/usr/lib/nginx
/usr/sbin/nginx
/usr/share/doc/nginx
/usr/share/nginx
/var/cache/nginx
/var/log/nginx
root@25bb2e970049:/# cd /etc/nginx/conf.d/         #查寻nginx的配置文件
root@25bb2e970049:/etc/nginx/conf.d# ls
default.conf
root@25bb2e970049:/etc/nginx/conf.d# vim default.conf 
bash: vim: command not found
root@25bb2e970049:/etc/nginx/conf.d# cat default.conf       #查看nginx的配置文件

[root@foundation92 Desktop]# docker run -d --name nginxserver nginx  #y运行nginx容器并起名为nginxserver
febb8ba07e84110d291b205479872755badd4d4263c2df0a355a50d83bacd509

在浏览器测试容器:
这里写图片描述

创建nginx的首页:

cd /tmp/docker/web
vim index.html
    hello,nginx
[root@foundation92 web]# docker run -d --name web -p 8080:80 -v /tmp/docker/web/:/usr/share/nginx/html nginx   #将nginx镜像命名为web容器,并以后台模式运行容器web,将容器的80端口映射到主机的8080端口,容器的nginx默认发布目录映射到本机的/tmp/docker/web/
c9eed588a91dba719ea2a1693536212eb0c96c2bcf39100465b3d26a7942dd6c

在浏览器测试:
这里写图片描述
可以成功查看到为web容器定制的nginx首页。

创建nginx虚拟主机:

cd /tmp/docker
[root@foundation92 docker]# cat vhost.conf      #创建nginx虚拟主机
server {
    listen 80;
    server_name www.westos.com;
    charset utf-8;

    location / {
        root /website;
    }
}

[root@foundation92 web]# docker run -d --name vmserver -p 80:80 -v /tmp/docker/web/:/website -v /tmp/docker/vhost.conf:/etc/nginx/conf.d/vhost.conf nginx   #创建容器,取名vmserver,将容器的80端口映射到本机的80端口,容器的/website(location)映射到本机的/tmp/docker/web/目录,容器的/etc/nginx/conf.d/vhost.conf(虚拟主机配置文件)映射到本机的/tmp/docker/vhost.conf文件。
ad733ddaafd4bc0d2cf71c94a3ae74630fb38dcf674d2515b912e55a59147407

本地添加域名解析:
vim /etc/hosts
172.25.254.92 www.westos.com
浏览器测试:
这里写图片描述
成功创建虚拟主机。

注意:每创建一个docker容器,就会生成一个虚拟的网卡,并桥接到docker0上:

[root@foundation92 web]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.f0761cf34bcf   no      enp2s0
                            vnet0
docker0     8000.02423371ed38   no      vethc6fc3b2
                            vethf14845d
virbr0      8000.5254003a28a3   yes     virbr0-nic
virbr1      8000.525400cf9b32   yes     virbr1-nic

[root@foundation92 web]# ip addr | grep veth
44: vethf14845d@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
48: vethc6fc3b2@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 

三,Docker数据卷管理:

Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层.如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏.当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失.在Docker中,只读层以及在顶部的读写层的组合被称为Union FIle System(联合文件系统).
为了能够保存(持久)数据以及共享容器间的数据,Docker提出了Volumes的概念。
-v 目录 :它存在于联合文件系统外部并可以在主机上直接访问。任何在该镜像/data路径的文件将被复制到volume。我们可以使用docker inspect命令找出Volume在主机存储的地方,Dockerfile中通过使用VOLUME指令来达到相同的效果。

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。
1,创建数据卷

[root@foundation92 Desktop]# mkdir /tmp/data1 /tmp/data2
[root@foundation92 Desktop]# ls /tmp/
data1  data2  docker
[root@foundation92 Desktop]# docker run -t -i --name test -v /tmp/data1:/voldata1 -v /tmp/data2:/voldata2 ubuntu /bin/bash   #使用ubuntu镜像构建test容器,-v的作用是将宿主机的一个目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。-v参数可以使用多次,并挂在多个数据卷到容器中。后面的参数信息中冒号前面是宿主机的本地目录,冒号后面是容器中的挂载目录。

root@12892af26651:/# ls        
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var       voldata2
boot  etc  lib   media  opt  root  sbin  sys  usr  voldata1
root@12892af26651:/# cd voldata1/        #进入容器中的挂载数据卷中,创建文件
root@12892af26651:/voldata1# touch testdata1
root@12892af26651:/voldata1# cd ..
root@12892af26651:/# cd voldata2/
root@12892af26651:/voldata2# touch testdata2
root@12892af26651:/voldata2# exit                  #退出容器
exit 
[root@foundation92 Desktop]# ls /tmp/data1/        #在真实主机的目录下也可以看见在容器挂载目录下创建的文件
testdata1
[root@foundation92 Desktop]# ls /tmp/data2/
testdata2

2,挂载宿主主机上的文件:

在宿主主机上创建文件:
[root@foundation92 docker]# vim /tmp/docker/share 
share file 

在容器中创建挂载宿主主机文件挂载点(此处创建和宿主主机通名的文件,也可以创建不同名的文件)
[root@foundation92 docker]# docker run -it --name test2 ubuntu bash
root@2b9981f52566:/# mkdir /tmp/docker
root@2b9981f52566:/# cd /tmp/docker/
root@2b9981f52566:/tmp/docker# ls    
root@2b9981f52566:/tmp/docker# touch share
root@2b9981f52566:/tmp/docker# exit

将宿主主机的文件挂载到容器中:
[root@foundation92 docker]# docker run -it --name test3 -v /tmp/docker/share:/tmp/docker/share:ro ubuntu      #以只读权限挂载容器
root@79185602ed9c:/# cat /tmp/docker/share     #可也看见容器成功挂载宿主主机的文件
share file
root@79185602ed9c:/# eixt

即容器可以共享宿主主机的指定文件。

3,数据卷容器:
如果需要在多个容器间共享数据,并希望永久保存这些数据,最好的方式是使用数据卷容器,类似于一个提供网络文件共享服务的NFS服务器。

数据卷容器创建方法跟普通容器一样,只需要指定宿主机的一个文件夹作为数据卷即可,使用docker create命令创建但不启动数据卷容器:

4,备份数据卷:
备份方法:a,创建一个新的容器 b,挂载数据卷容器 c,挂载宿主主机本地目录作为数据卷 d,将数据卷容器的内容备份到宿主主机本地木路

docker create --name sharedata -v /tmp/docker/data1/:/data1 -v /tmp/docker/data2:/data2 ubuntu          #创建数据卷容器,但不启动

mkdir /tmp/docker/data1
mkdir /tmp/docker/data2

[root@foundation92 docker]# docker run -it --name web2 --volumes-from sharedata ubuntu    #连接到数据卷并创建新的容器
root@78f4b083f4cf:/# ls
bin   data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  data2  etc  lib   media  opt  root  sbin  sys  usr

#备份数=数据卷:
docker run --rm --volumes-from data -v /tmp/backup:/backup  rhel7 tar cf /backup/test.tar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值