Docker在IFTTT的开发和实践(2)


首先卸载掉标准的vboxfs并开启NFS客户端,然后挂载本机创建的共享目录。Docker Machine的引导程序会在这个文件目录存在的情况下被同步执行。

我也是尝试使用多种方式运行挂载命令,却很少成功。最终成功搞定后,我就成为NFS专家了。

首先去dnsmasq容器设置DNS文件其他剩余的部分,第二步是设置DNS服务器为8.8.X.X。这个同时关注dev域和访问外网的请求。如果不添加8.8.X.XDNS服务器,当你的Docker Machine的网络发生变化,你的DNS服务器缓存将自动结束,而且不得不通过重启机器才能转换网络。

这时候你应该能连接到VM中正在运行的Docker进程。你可以通过正在运行的Docker Machine dev环境看到是如何连接的。也可以通过Docker ps 测试是都有正在运行安装的Docker,可以看到:

CONTAINER     ID    IMAGE     COMMAND    CREATED


看到这个显示说明你已经正确安装配置环境。

Part3:开始在容器中开发

在容器中开发需要一些思维上的转换,很多时候与我们过去写代码、运行代码、测试等不太一样。你有一个或者多个本地数据库,或者可能模拟S3和DynamoDB的依赖。

在使用容器开发之前的本地开发,你可能直接就可以关闭本机的OS或者虚拟机,或者你可以安装一切你所需要的软件,随着时间的发展,你可以不断增加对系统和程序的配置。也可能是一个Snowflake Server。可能在管理依赖的开始会存在一些问题,因此像Bundler、pip、virtualenv和RVM他们可以统一混合使用帮助解决问题。尽管你可以测试出这是一个新版的MYSQL,但是真正做起来就不是那么简单了。

在容器的范畴中,你没必要拥有一个持久并不断完善的来发环境。你可以做你想做的,但是这并不是推荐的工作流方式。传统上拥有一个能在上面运行代码的“VM”,被取而代之的是创建一个更轻量级可视化的叫做“容器”的层。(了解更多,从Docker获取更多说明

这些容器都是从镜像创建的。镜像的本质是一些基础的只读模板,通过模板可以创建你的应用程序开发环境,如果移动容器,容器内所有相关的东西都将被移动。你也可以总是通过重启相同镜像中的容器,当然这也是经常做的。这也就意味着你可以拥有不同的容器做不同的配置,而且完全不用担心管理混乱。你可以一个上面使用的是Ruby2的代码,另一个是Ruby1.9的代码。创建容器(基于以前使用的的Ruby镜像)仅仅使用一个新的gem即可。当你安装gem处理容器时,处于其他原因,Rails2需要依赖安装其他很多gem,你不得不考虑把gem安装在你的系统中。

为了获得更多“官方”的应用程序依赖(node、mysql-client等),当运行一个存在所有应用程序的容器时,你可以用Dockerfile检测你的应用程序库去创建一个已经包含这些程序的镜像。

存在很多依赖的情况下,我们通常分离进程,分割到额外的容器中。例如我们其中一种容器,同时依赖Mysql、redis和S3。我们就把他们同时组合进入我们的容器。通过项目根目录中的YAML文件整合进入我们的容器中。例如:

web:
build: .
dockerfile: Dockerfile.development
volumes:
- .:/app
links:
- redis:redis.myapp.dev
- s3:s3.myapp.dev
- mysql:mysql.myapp.dev
command: puma -C config/puma.development.rb
mysql:
image: mysql/mysql-server:5.6
volumes:
- /mnt/sda1/var/lib/mysql:/var/lib/mysql
redis:
image: redis:2.6
s3:
image: bbcnews/fake-s3


通过此设置,很容易就可以看到依赖关联关系。我们已经从这个目录和Dockerfile .development文件构建web services。把这个文件作为容器的存储部分挂上去,给这个目录的代码一定的执行权限就可以运行代码。被分离的Dockerfile是最主要的,因为在生产中我们根据此文件编译所有的代码以快照的形式进入容器,所以在开发环境如果我们想更改它,就必须重新编译一次才能实现。我们覆盖了已经在Dockerfile中被定义的命令,因此我们能加载开发环境的配置。

当我们开始运行web的容器时,Docker生成会意识到他关联了redis、mysql、s3等容器,因此会自动启动他们。除此,Docker还将dev域名和正确的容器写入/etc/hosts文件。由于这样操作的话其他的人不需要什么配置,这样就容易很多了。我们可以使用特定版本的redis和mysql。Mysq装载在虚拟机的一个目录这样使数据可以在扩容器中做到持久化保存。

每一个项目都有一个自定义的application-level配置。这个配置文件需要运行在Dockerfile,其他的服务运行在docker-compose.yum文件。例如下面开始一个新项目,在Dash中使用dev命令:

git clone [GIT_URL]
dev up# (simply an alias to docker-compose up -d)
Part 4: Web浏览器&服务间通信

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14a0e392314095a06add28dfcf105b4b.html