docker学习(二)

(一) 镜像

1.1镜像原理

 在docker中镜像采用分层结构(多文件联合系统),就像依赖关系的层层叠加。
 如下图,对外暴露的是一个整体,也就是最外层的tomcat,因为它是需要依赖里层的镜像的, 所以看起来tomcat镜像size会非常大。
在这里插入图片描述
在这里插入图片描述

1.2 镜像commit

 docker commit 镜像,生成一个新的镜像副本。
语法:
docker commit -m=“描述信息” -a=“作者” 容器id 自定义镜像名:[标签名]

docker commit -m="define" -a='souten' bf4709e77b18 souten/tomcat:1.2

在这里插入图片描述

(二) 容器数据卷

2.1 作用

 一个容器的文件系统,或者数据文件都存放在属于自己的空间里的,如果容器不小心被删除了,所有的数据和文件也都没了
 所以为了解决这个问题,就出现了容器数据卷。
 容器数据卷的作用是:将容器里的文件数据和宿主机的文件做一个映射,实现数据的持久化,以及同步和共享(软链接?);除此之外,它还能实现容器和容器之间的数据共享。

2.2 使用(容器–宿主机)

2.2.1 方式一:全路径挂载

docker run -it -v 宿主机目录:容器文件目录 目标容器id

挂载完毕后,可以通过docker inspect 容器id 命令的输出信息查看是否挂载成功
在这里插入图片描述

在MacOS上,方便起见我们会直接安装docker desktop,但是这种情况下使用docker volume inspect查看到的Mountpoint 实际不是我们mac os的路径,而是docker运行的虚拟机上的路径。解决办法是创建下面的容器,然后进入到数据卷内。
As we mentioned before, containers on Mac are running inside a virtual machine. You could have a docker client on your local machine and the docker engine on a remote server. It would give you the same result. The volume would not exist on your local machine. docker inspect will talk to the remote server (virtual machine in this case) and get the information about the environment on that remote machine, not on your local machine.

docker run --pid=host --privileged -it --rm justincormack/nsenter1
cd /var/lib/docker/volumes/xxxx

2.2.2 方式二:具名挂载和匿名挂载

2.2.2.1 容器卷相关命令
docker volume --help
2.2.2.2 具名挂载

docker run -it -v 容器卷名字(自定义) :容器文件目录 目标容器id
给容器卷自定一个名字,目录会由系统自动分配,如何查看该容器卷放在主机哪个目录下

#挂载
[root@localhost ~]# docker run -it -v souten:/etc/nginx nginx
.........

#查看所有容器卷
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     souten

#查看容器卷详细信息
[root@localhost ~]# docker volume inspect souten
[
    {
        "CreatedAt": "2021-04-11T16:08:07+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/souten/_data", #主机挂载目录地址
        "Name": "souten",
        "Options": null,
        "Scope": "local"
    }
]

2.2.2.2 匿名挂载

docker run -it -v 容器文件目录 目标容器id
省去容器卷名字,只用指定容器文件目录。容器卷名字和目录由系统去自动生成。

2.2.3 方式三:使用dockerfile

dockerfile是一个文件,文件里面的内容是命令脚本,用来构建镜像。

1.创建dockerfile

[root@localhost volume-test]# cat dockerfile1
FROM centos

# 容器卷(括号内指定的是容器内部的,容器卷数据存放的目录,会自动生成)
VOLUME ["volume1", "volume02"]

CMD echo "---end---"
CMD /bin/bash

2.根据dockerfile生成镜像
docker build 根据dockerfile创建镜像
-f 指定dockerfile地址
-t 指定镜像名字

[root@localhost volume-test]# docker build -f /root/volume-test/dockerfile1 -t souten/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume1", "volume02"]
 ---> Running in 778d5e59abaf
Removing intermediate container 778d5e59abaf
 ---> c1e3e542bc8e
Step 3/4 : CMD echo "---end---"
 ---> Running in 5d0efb794319
Removing intermediate container 5d0efb794319
 ---> 396103db746b
Step 4/4 : CMD /bin/bash
 ---> Running in 07ebed778b92
Removing intermediate container 07ebed778b92
 ---> 8b33ab129734
Successfully built 8b33ab129734
Successfully tagged souten/centos:latest

在这里插入图片描述
3. 查看数据卷
进入容器内部
在这里插入图片描述
查看数据卷的挂载点(外部主机目录),相当于匿名挂载
docker inspect ****
在这里插入图片描述

2.3 使用(容器–容器)

以上都是介绍的,容器和宿主机之间的容器卷的使用。容器和容器之间也是可以通过容器卷实现数据持久化的。

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
8f266f4ebae6   8b33ab129734   "/bin/bash"              18 minutes ago   Up 18 minutes             sweet_shtern

# 新建一个容器,并继承寄存容器(父容器)的数据卷
# --volumes-from sweet_shtern
[root@localhost ~]# docker run -it --name='son' --volumes-from sweet_shtern 8b33ab129734

(三)容器化技术

虚拟机技术:
在这里插入图片描述容器化技术:
在这里插入图片描述
比较Docker和虚拟机技术的不同:

  • 传统虚拟机,根据宿主资源,虚拟出一整套硬件,运行一个完整的操作系统,然后在这之上安装和运行软件。
  • 容器内的应用运行在宿主的内核之上,容器没有自己的内核,也没有虚拟硬件,比较轻便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值