1.docker容器内网络不通
到目前为止,我们已经学会了如何基于单容器应用进行开发工作但是,我们现在想要把 MySQL 添加到应用栈中我们会问:MySQL在哪里运行?是把MySQL和应用安装在同一个容器中,还是分开运行2个容器?总的来说:每个容器应该只做一件事,而且要把这件事做好。
2.docker直接使用物理网卡
有以下几个原因:1、你很有可能不得不将API和前端不同于数据库地规模化2、分离容器让你能够版本独立,且独立地更新版本3、尽管你本地使用数据库的话,会使用容器,但是生产环境中,可能想要将托管服务用于数据库。
3.docker0网卡down影响
这样你就不会想要把数据库引擎和你的应用一起发布上线了4、容器只能启动一个进程,运行多个进程就会需要一个进程管理器,这会增加容器启停的复杂性。当然还有其它原因。综上所述,我们接下来就把应用做如下更新:
4.关闭docker0网卡
容器网络记住一点:容器默认是独立运行的,对同一台机器上运行的其它进程和容器都一无所知所以,我们怎么样让一个容器和另一个容器对话呢?答案是:网络你不需要是一名网络工程师,只要记得这个规则就行:如果2个容器在同一个网络,那么它们俩就能够互相对话;如果不在,那就不行。
5.安装docker后网络不通
启动MySQL有2种方式把一个容器连上一个网络:1、启动时就把容器连上网络2、网络连接一个现有的容器我们会先创建一个网络,然后在启动时连上MySQL容器1、创建网络docker network create todo-app。
6.docker容器网络不通
2、启动一个 MySQL 容器,并把容器连上网络我们也会定义一些环境变量,数据库会用它们来初始化数据库,参见 MySQL Docker Hub清单的 Environment Variables 段落docker run -d \–network todo-app –network-alias mysql \-v todo-mysql-data:/var/lib/mysql \-e MYSQLROOTPASSWORD=secret \-e MYSQLDATABASE=todos \ mysql:5.7
如果你使用的是 Power Shell 的话,把上述命令的\ 替换成即可。
关于–network-alias 旗标,我们一会儿再聊专家提示你应该有注意到我们使用一个具名卷,名字是 todo-mysql-data ,并将其挂载到了/var/lib/mysql ,这里是 MySQL 存储数据的地方。
不过,我们并没有运行 docker volume create 命令Docker 识别出,我们想要使用一个具名卷,接着就为我们自动创建了一个3、为了确认我们的数据库跑起来了,我们尝试连接数据库,并验证是否连接成功。
docker exec -it mysql -p
当密码提示符出现,输入 secret 。在 MySQL shell 中,列出数据库,并确认你看到了 todos 数据库。mysql> SHOW DATABASES;你应该会看到以下输出:
好了,我们已经有了我们的 todos 数据库,并且随时可以使用连接MySQL既然我们已经知道 MySQL 已经正常运行了,让我们来使用 MySQL 吧但是,问题……怎么用?如果我们在同一个网络运行另一个容器的话,我们如何找到容器?记住,每个容器都有自己的IP地址。
要弄清楚怎样才能使用MySQL,我们会用到 nicolaka/netshoot 容器,它自带了很多可以用于排错和调试网络问题的工具1、使用 nicolaka/netshoot 启动一个新容器确保容器连接了同一个网络。
docker run -it –network todo-app nicolaka/netshoot
2、在容器中,使用 dig 命令,这个命令是一个好用的DNS工具。我们会用它来查找主机名为 mysql 的 IP 地址。dig mysql应该会看到如下输出:
在 ANSWER SECTION 中,你会看到 mysql 的 A 记录,解析为172.18.0.2,你的IP地址很可能是另一个值尽管 mysql 通常并不是一个有效的主机名,但是Docker能够将其解析为:网络别名为 mysql 的容器的 IP 地址。
还接的之前用到的–network-alias 旗标么?这也就意味着,我们的应用只需要连接主机名为 mysql 的主机,然后就能和数据库连通了没有比这更简单的了!基于 MySQL 运行应用待办任务应用支持通过设置一些环境变量,来指定 MySQL 的连接设置。
它们是:MYSQLHOST运行 MySQL 服务器的主机名MYSQLUSER连接数据库服务器使用的用户名MYSQLPASSWORD连接数据库服务器使用的密码MYSQLDB连上以后,使用的数据库警告尽管使用环境变量设置连接设置,用于开发的话通常是没问题的,但是生产环境运行应用的时候,这样做是极不推荐的。
前Docker的安全一把手Diogo Monica专门写了一篇博客来解释原因一个更加安全的机制是使用容器编排框架所提供的密钥支持机制在大多数情况下,这些密钥作为文件在容器中挂载你会看到很多应用,包括MySQL镜像和待办应用,也会通过 FILE 后缀,指向包含变量的文件的方式,来支持环境变量。
作为一个例子,设置 MYSQLPASSWORDFILE 变量会导致应用去使用变量所指向的文件的内容,作为连接密码Docker不会做任何事来支持这些环境变量你的应用需要知道如何查找变量,并获取文件内容那么具体如何使用这些环境变量来让我们的应用连接 MySQL 数据库呢?请看下回分解。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容