docker数据管理
容器中管理数据主要有两种方式1、数据卷
2、数据卷容器
一、数据卷
1、基于training/webapp镜像创建一个容器,并在容器内创建一个数据卷
使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录
root@docker-test:~# root@docker-test:/# docker run -idt -P --name web -v /tantianran training/webapp python run.py
4c5baed6426181815ddd9f0884855bd9e22a27b460eb1c77b5a97a07ecbbd813
提示:
-P 发布所有暴露的端口到随机端口
创建的数据卷/tantianran ,挂载给名字为web的容器时,会在容器内部的根目录下自动创建一个名为tantianran的目录
2、查看运行的容器
root@docker-test:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bf5a39b85f0 training/webapp:latest "python app.py" 6 minutes ago Up 6 minutes 0.0.0.0:32772->5000/tcp web
提示:0.0.0.0:32772->5000/tcp 表示访问172.17.42.1:32772端口都会重定向到容器侦听的5000端口(flask web程序)
3、进入这个容器后查看IP地址
docker exec -ti 078519be8a26 /bin/bash #进入容器
root@8bf5a39b85f0:/opt/webapp# ifconfig #查看IP地址
eth0 Link encap:EthernetHWaddr 02:42:ac:11:00:16
inet addr:172.17.0.22Bcast:0.0.0.0Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:16/64 Scope:Link
UP BROADCAST RUNNINGMTU:1500Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:39 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2868 (2.8 KB)TX bytes:3034 (3.0 KB)
4、在本地主机查看IP地址
root@docker-test:~# ifconfig
docker0 Link encap:EthernetHWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1Bcast:0.0.0.0Mask:255.255.0.0
inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:288 errors:0 dropped:0 overruns:0 frame:0
TX packets:181 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:19306 (19.3 KB)TX bytes:15494 (15.4 KB)
提示:那么,通过查看本地主机的IP地址,和进入容器后查看IP地址,就一目了然了,docker会在本地主机虚拟出一块网卡
作为docker容器网络连接的网关,以及给docker容器分配IP地址
5、挂载一个主机目录作为数据卷 (在做这个操作之前,之前的容器需停止掉,或者删除掉,或者将创建此容器时命名为别的名字,不然会存在冲突)
在本地主机根目录下创建目录:local_mydata/ #其实不用创建也行,docker会自动创建
并创建几个文件:touch my_test.py my_config.py
root@docker-test:~# docker run -d -P --name testweb -v /local_mydata:/mydata training/webapp python run.py #加载本地主机的/local_mydata目录到容器的/mydata目录
9fa32094da848d2b5817edc49b9971ffdb72319589a10334b442174dd0061c81
注意,容器中的/mydata目录会自动创建,另外,本地主机的目录的路径必须是绝对路径,如果目录不存在,docker会自动创建
6、挂载一个本地主机作为数据卷
二、数据卷容器
1、基于ubuntu镜像创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata
root@docker-test:~# docker run -idt -v /dbdata/ --name dbdata ubuntu
2、基于ubuntu镜像创建db1和db2两个容器,并从dbdata容器挂载数据卷
root@docker-test:~# docker run -idt --volumes-from dbdata --name db1 ubuntu #创建db1容器
593de70961a07bc1af5d12591833a62d691d594f302f92ee96c3587d87ae6aa6
root@docker-test:~# docker run -idt --volumes-from dbdata --name db2 ubuntu #创建db2容器
39d71abc194d66f53211893efcdcd1cdff6cc5b52c0365a03d2a1e55aa225216
root@docker-test:~# docker ps -a #查看容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39d71abc194d ubuntu:latest "/bin/bash" 5 seconds ago Up 4 seconds db2
593de70961a0 ubuntu:latest "/bin/bash" 12 seconds ago Up 11 seconds db1
a6a32f7838ee ubuntu:latest "/bin/bash" 4 minutes ago Up 4 minutes dbdata
此时,容器db1和db2都同时挂载同一个数据卷到相同的/dbdata目录,任何一方在该目录下写入数据,其它容器都能看到
3、进入dbdata容器中创建一些文件
root@docker-test:~# docker exec -ti dbdata /bin/bash #进入容器
4、分别进入db1和db2查看
root@docker-test:~# docker exec -ti db1 /bin/bash
root@docker-test:~# docker exec -ti db2 /bin/bash
页:
[1]