Docker学习(三)——docker容器与主机,容器与容器数据共享

1.容器、主机间数据拷贝

常用作将容器中的数据拷贝至主机保存,当然也可以将主机中的数据使用docker cp 命令拷贝至容器(但不常用)

docker cp 主机文件路径 容器ID:文件目的地路径

#命令
sudo docker cp ./python/test.py f2bb0df657a3:/test  #将主机中的./python/test.py 文件拷贝至容器中的 /test目录下
./python/test.py 中的 . 代表相对路径
#结果
sudo docker exec -it f2bb0df657a3 /bin/bash #进入容器
#查看文件
root@:/$ ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
#进入test目录,发现test。py已经成功拷贝
root@:/$ cd test
root@:/test$ ls
test.py

2.容器、主机间数据挂载(volume技术)

容器与主机通过volume技术实现双向数据互通,自动实时更新(推荐)

2.1 命令行方式挂载

docker run -it -v 主机目录:容器目录 镜像名
Ps:注意,挂载是在run镜像的时候进行挂载

#测试
root@i:~$ sudo docker run -it -v ~/python:/test --name test python:3.6 /bin/bash
#参数解释
-i 开启输入流
-t 开启伪终端
/bin/bash -使用bash作为命令行shell
-v 挂载容器内的/test目录至主机的/python目录
~/python:/test目录映射中的 ~ 代表root目录→→ root/python:/test
--name 对新建的容器自定义命名

可通过新开一个终端或者Ctrl+P+Q 的方式进入主机命令行
使用docker inspect 容器ID 查看容器信息,并查看挂载是否成功

root@i:~$ sudo docker inspect ced15a99198f
[
    {
        ...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "root/python",
                "Destination": "/test",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
       ...
#Mounts中标明了挂载信息可以 查看挂载路径 
"Source": "/python", "Destination": "/test",

至此,主机/python目录下的内容和容器内/test目录下的内容完成映射,其中内容将自动同步

下面进行测试,查看是否完成了数据互通以及自动同步
在这里插入图片描述
docker的挂载技术方便我们在本机完成代码的编辑,自动同步至容器

2.2 补充:涉及到的简单linux命令

cd 目录名				#——进入指定的文件夹目录
cd ..					#——返回上一级目录
ls						#——列出当前目录下的文件夹
mddir 文件夹名			#——创建文件夹
rmdir 文件夹名			#——删除文件夹,注意文件夹必须为空
touch 文件名				#——创建文件
rm    文件名		 		#——删除文件
cp source des			#——复制文件/夹至指定目录
clear                   #——清空屏幕
echo                    #——打印信息
#文件编辑操作
vim 文件名 →i →Esc →:wq  #——进入文件→开启输入流→退出编辑→保存文件并退出vim
cat 文件名               #——查看文件内容

2.3 命令行挂载的三种格式

#-v 容器内目录   ——匿名挂载
sudo docker run -it -v /test --name test python:3.6 /bin/bash
#-v 卷名:容器内目录   ——具名挂载
sudo docker run -it -v /test --name test python:3.6 /bin/bash
通过以上两种方法挂载的数据卷,在本机的/var/lib/docker/volumes目录下

#-v 主机目录:容器内目录  ——指定路径挂载
sudo docker run -it -v ~/python:/test --name test python:3.6 /bin/bash

2.4 dockerfile挂载

通过编写一个dockerfile脚本,在dockerfile中编写挂载命令

#打开dockerfile文件,无后缀
VOLUME ['数据卷路径名1','数据卷路径名2']
VOLUME ['/etc/volume1','/etc/volume2']    #属于匿名挂载

有关dockerfile内容将在dockerfile学习中详写

3. 数据卷容器——容器间数据共享

使用 –volumes-from 容器ID/名命令,完成容器间的数据共享
容器间数据卷挂载的形式,与java中的继承相似,子容器-继承-父容器数据卷

#测试
root@iZ2ze2tw7cm243uv3wr3e6Z:~$ docker ps   #查看正在运行的容器
CONTAINER ID   IMAGE        COMMAND       CREATED          STATUS          PORTS     NAMES
055a25ecd6b8   python:3.6   "/bin/bash"   56 minutes ago   Up 56 minutes             test
root@iZ2ze2tw7cm243uv3wr3e6Z:~$ docker run -it --name test2 --volumes-from test python:3.6 /bin/bash   #创建新容器test2,并挂载至test
root@62903f129cc4:~$ ls   #查看test2容器中的目录,发现存在test文件夹(共享自test)
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
root@62903f129cc4:~$ cd test   #进入test文件夹,查看文件,发现与test中文件相同
root@62903f129cc4:/test$ ls
a.java  b.java  test.py

4. 若容器被删除,会发生什么?

进行挂载的容器若被停止或被删除,与它存在挂载关系的容器/主机中的数据不会丢失

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值