Update 20151119 Going Beyond Hello World Containers is Hard Stuff.md

This commit is contained in:
Ezio 2015-12-06 22:47:27 +08:00
parent 8a9793e1a7
commit 399cc987f2

View File

@ -64,56 +64,75 @@ Docker 快速启动终端就运行在你使用的普通终端里,就像这样
### 第一个小问题和第一个大问题###
So I fiddled around with NodeJS and ImageMagick and I got the service to work on my local machine.
所以我用NodeJS 和ImageMagick 瞎搞了一通然后让我的服务在本地运行起来了。
Then, I created the Dockerfile, which is the configuration script Docker uses to build your container. (Ill go more into builds and Dockerfile more later on.)
然后我创建了Dockerfile这是Docker 用来构建容器的配置脚本。我会在后面深入介绍构建和Dockerfile
Heres the build command I ran on the Docker Quickstart Terminal:
这是我运行Docker 快速启动终端的命令:
$ docker build -t thumbnailer:0.1
I got this response:
获得如下回应:
docker: "build" requires 1 argument.
Huh.
呃。
After 15 minutes I realized: I forgot to put a period . as the last argument!
我估摸着过了15分钟我忘记了在末尾参数输入一个点`.`。
It needs to be:
正确的指令应该是这样的:
$ docker build -t thumbnailer:0.1 .
But this wasnt the end of my problems.
但是这不是我最后一个问题。
I got the image to build and then I typed [the the `run` command][4] on the Docker Quickstart Terminal to fire up a container based on the image, called `thumbnailer:0.1`:
我让这个镜像构建好了然后我Docker 快速启动终端输入了[`run` 命令][4]来启动容器,名字叫`thumbnailer:0.1`:
$ docker run -d -p 3001:3000 thumbnailer:0.1
The `-p 3001:3000` argument makes it so the NodeJS microservice running on port 3000 within the container binds to port 3001 on the host virtual machine.
参数`-p 3001:3000` 让NodeJS 微服务在Docker 内运行在端口3000而在主机上则是3001。
Looks so good so far, right?
到目前卡起来都很好,对吧?
Wrong. Things are about to get pretty bad.
错了。事情要马上变糟了。
I determined the IP address of the virtual machine created by Docker Quickstart Terminal by running the `docker-machine` command:
我指定了在Docker 快速启动中端里用命令`docker-machine` 运行的Docker 虚拟机的ip地址
$ docker-machine ip default
This returns the IP address of the default virtual machine, the one that is run under the Docker Quickstart Terminal. For me, this IP address was 192.168.99.100.
这句话返回了默认虚拟机的IP地址即运行docker 的虚拟机。对于我来说这个ip 地址是192.168.99.100。
I browsed to http://192.168.99.100:3001/ and got the file upload page I built:
我浏览网页http://192.168.99.100:3001/ ,然后找到了我创建的上传图片的网页:
![container-diagram-3](https://deis.com/images/blog-images/containers-hard-3.png)
I selected a file and clicked the Upload Image button.
我选择了一个文件,然后点击上传图片的按钮。
But it didnt work.
但是它并没有工作。
The terminal is telling me it cant find the `/upload` directory my microservice requires.
终端告诉我他无法找到我的微服务需要的`/upload` 目录。
Now, keep in mind, I had been at this for about a day—between the fiddling and research. Im feeling a little frustrated by this point.
现在开始记住,我已经在此耗费了将近一天的时间-从浪费时间到研究问题。我此时感到了一些挫折感。
Then, a brain spark flew. Somewhere along the line remembered reading a microservice should not do any data persistence on its own! Saving data should be the job of another service.
然后灵光一闪。某人记起来微服务不应该自己做任何数据持久化的工作!保存数据应该是另一个服务的工作。
So what if the container cant find the `/upload` directory? The real issue is: my microservice has a fundamentally flawed design.