Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docker container 的理解 #1

Closed
geminiyellow opened this issue Jan 19, 2015 · 12 comments
Closed

docker container 的理解 #1

geminiyellow opened this issue Jan 19, 2015 · 12 comments
Labels

Comments

@geminiyellow
Copy link
Owner

docker 概念是一个 base image 上面多个 container。
各 container 之间可以通讯调用。
而各 container 又可以保存成新的 image。
那么问题来了,
我有一个 base image,我在该 image 上新增加了两个 image。
当然, image 里面的内容是不一样的。暂时称呼他们为 c1, c2。

某种情况下,如果需要结合使用c1,c2。希望把它保存成一个新的image,
比如叫做 c12,这样做是否可以。

有点像这张图的感觉。
https://docs.docker.com/terms/images/docker-filesystems-busyboxrw.png

@geminiyellow
Copy link
Owner Author

根据我的理解,image 是只能继承,而不能组合。
每个image都是一个新的分支。因此把 c1 和 c2 组合成 c12 做不到的。
那么,如果需要构建包含了 c1 和 c2 环境的新环境的话,我们可以选择从 base image 开始,做一个 c3.
或者c1/c2做一个新的分支 c1+2/c2+1。

@geminiyellow
Copy link
Owner Author

用手动的 commit 方式很傻,要做的工作很多。
可以用 dockfile。其实也就是一个配置文件,按照配置文件一层层来下载需要的image,构建你所需要的环境。
比如说,在 dockfile 里面,引入 c1,c2,这样看起来就像把两个给结合起来一样。不知道是否可行。

@fivesmallq
Copy link

说说我的理解,
比如base image是ubuntu

image1 是web,里面包含nginx, image2是db,里面是mysql
运行起来就是c1和c2.

生产环境下可能web是批量部署的,所以只需要c1即可,

但是你在测试的时候,希望web和db在一个c12里面,这样就简单了.

至于怎么做。。我不会。。

可能的一种做法,在image1里面包括了web和db的环境。
启动的时候,通过不同的命令启动不同的容器?

docker run -d -p 80 -p 8080 image/test /bin/sh -c "service nginx start && /usr/sbin/sshd -D"

@geminiyellow
Copy link
Owner Author

不知道可用不可用,但是如果不考虑命令复杂度的话应该也是解决案。
按我的尿性,肯定是一个image只有一个on/off。不用想太多。

@fivesmallq
Copy link

你试试吧。。。

@geminiyellow
Copy link
Owner Author

官方是这样说的,似乎没理解错。

moby/moby#3378

@geminiyellow
Copy link
Owner Author

可能用 oo 的概念来理解 image 和 container 更简单。
image -> class
container -> class instance
所以,可以 new 很多的 container,container 可以用不同的参数。
那么 你如果说,我能不能多重继承,回答是你不能是人并且是禽兽。
所以,你只能选择在人的基础上加上禽兽属性,或者在禽兽基础上加上人。

差不多就是这样吧。

@geminiyellow
Copy link
Owner Author

@fivesmallq 所以刚才说的测试环境中的db例子。
就让它和服务器分开在后台跑吧。要不然的话,就做一个dev版image。

@fivesmallq
Copy link

就是说,官方建议一个container承担一个职责,想要多种功能的时候,组合即可?

@fivesmallq
Copy link

@geminiyellow 对。

@bakso
Copy link

bakso commented Jul 8, 2016

意思是 Java / Node.js / Nginx 服务,需要打出三个 image?

@geminiyellow
Copy link
Owner Author

@bakso 你可已有三个,也可以只用一个。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants