Docker学习笔记(一):理解docker

帖子用于记录docker学习中自己碰见的疑惑,方便日后回看:

docker组成

在这里插入图片描述
先记录一个困扰我很久的问题:就是dockerfile与docker-compose.yml及image、container之间到底是什么关系?
首先,我在官网上看到这样一个docker-compose.yml的示例:
在这里插入图片描述
看完这个示例之后,让我疑惑的是,在一个container(容器)中可以运行多个image?实际,docker的逻辑应该是:
在这里插入图片描述
如果把一个docker比喻成房子的话,那么:
1.dockerfile就是基石。在dokerfile中会指定基础image(父image,文件中的FROM命令)。除此之外,还有各种docker指令。这些指令类似linux命令,用于在启动时执行,比如:RUN xxxx、COPY xxxx、ADD xxxx、USER xxx等。
2.docker-compose.yml就是框架。在docker-compose.yml中可以配置多个子image,以及子image的基础配置(端口号、目录、网络配置等等)。多个子image就是一个多服务的docke程序。
3.container就是成品。这个成品是image run之后形成的。

当dockerfile与docker-compose.yml配置好了之后,运行build命令。那么,所获得image就是我所需要的最终的image。这就好像,image是一个完整的java项目,dockerfile定义了运行的环境(linux或者window),docker-compose.yml则定义了需要用的各项目服务(数据库、jdk等)

image(镜像)与container(容器)的区别:
image(镜像)是”只读“的,当image通过docker run命令启动后会创建一个container(容器)。简单理解,这个container(容器)与image(镜像)可以说是关系不大了。container有操作层,并且对container的操作会保存到文件中。而image是“只读”的,并且,image可以通过docker run创建多个container。

整理一下,到目前的收获。自己启动的container(容器)分为两种,一种是直接下载完整的image通过docker run命令配置相应的启动参数(挂载卷、端口等)来创建一个container(容器)。比如,直接在宿主机上通过docker pull mysql镜像,并创建一个container(容器)。
另外一种就是上文通过docker-compose来创建一个略为复杂的container(容器)。可以通过docker-compose.yaml文件来配置多个image,并且分别为多个image设置不同的启动参数、网络设置等。也可以通过docker-compose.yaml中配置image并通过build参数指定一个Dockerfile文件,通过Dockerfile的RUN等指令实现下载安装软件等操作。融合docker-compose.yaml中配置的image和Dockerfile中指令内容共同build一个image或者直接启动为一个container(容器)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值