猿问

对于docker中镜像和容器的些许困惑

最近在学docker,一开始自以为自己能分清镜像和容器的区别,以为镜像就是 配置好的且安装好各种依赖的操作系统,就是个环境。而容器是运行在那个配置好的操作系统之上的某个进程。

但后来我发现,镜像不只只是操作系统,还可以是某个应用,比如nginx,redis等等。那从nginx或redis镜像run起来的容器是什么?从操作系统建立起来的容器我能理解,但是从一个应用建立起来的容器,有点理解不了。

那么问题来了:
1,是不是说,我写了一个程序,打包编译成一个可执行文件,这个可执行文件是个镜像,那从这个可执行文件run起来的容器是啥?这个可执行文件的进程?
2,如果镜像是nginx或者redis或者我自己写的一个可执行文件,那么这个镜像是不是同时也得包含操作系统等等底层的东西?
3,现在已经容器化的公司,是不是把代码编译成一个(可执行文件)镜像,然后直接从这个镜像来建立容器?而不是用操作系统镜像


叮当猫咪
浏览 737回答 1
1回答

UYOU

我的理解是分为两种情况,我举例来说明:1、以php为例,php项目启动依赖php环境,nginx环境,如果是光光打包成一个镜像显然是不合理的,我的做法是:起一个php的容器,暴露其端口,供nginx容器使用,nginx容器映射其端口到宿主机,并且宿主机将其工作目录挂载到容器之中,这样宿主机就可以访问启动的项目内容;1、以node项目为例,node项目仅仅依赖于node环境,我的做法是:将工作目录挂载到镜像中打包起来,拉起来这个镜像即可,但是这样需要每次在修改文件之后重新build镜像.以上
随时随地看视频慕课网APP
我要回答