Docker使用Link在容器之间建立连接
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务。比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务。下面我们就来看看Docker是怎样通过Link来实现这种功能的。
1.这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java等的应用。
1.1先创建一个mysql_server目录并在其下创建一个Dockerfile文件,内容如下
FROMcentos:centos6 MAINTAINERFanbinKong"kongxx@hotmail.com" RUNyuminstall-ymysql-servermysql RUN/etc/init.d/mysqldstart&&\ mysql-e"grantallprivilegeson*.*to'root'@'%'identifiedby'letmein';"&&\ mysql-e"grantallprivilegeson*.*to'root'@'localhost'identifiedby'letmein';"&&\ mysql-uroot-pletmein-e"showdatabases;" EXPOSE3306 CMD["/usr/bin/mysqld_safe"]
然后根据Dockerfile来创建image
sudodockerbuild-tkongxx/mysql_server.
1.2创建一个mysql_client目录并在其下创建一个Dockerfile文件,内容如下
FROMcentos:centos6 MAINTAINERFanbinKong"kongxx@hotmail.com" RUNyuminstall-ymysql
然后根据Dockerfile来创建image
sudodockerbuild-tkongxx/mysql_client.
1.3创建完image之后,我们可以使用下面命令来查看结果
$sudodockerimages|grepkongxx kongxx/mysql_clientlatestaa31f22f6fc52hoursago303.7MB kongxx/mysql_serverlatest3b9b08c8dda42hoursago353.3MB
2.第二步是根据image来创建我们的应用场景
2.1首先创建提供mysql数据库服务的容器
sudodockerrun--name=mysql_server-d-Pkongxx/mysql_server
2.2分别创建两个使用上一步创建出来mysql数据库服务的容器
第一个应用容器
sudodockerrun--name=mysql_client1--link=mysql_server:db-t-ikongxx/mysql_client/usr/bin/mysql-hdb-uroot-pletmein
第二个应用容器
sudodockerrun--name=mysql_client2--link=mysql_server:db-t-ikongxx/mysql_client/usr/bin/mysql-hdb-uroot-pletmein
这里需要特别注意一下“–link=mysql_server:db”,这个参数就是告诉Docker容器需要使用“mysql_server”容器,并将其别名命名为db,这样在这两个容器里就可以使用“db”来作为提供mysql数据库服务的机器名。所以在最后启动参数里我们使用的是“/usr/bin/mysql-hdb-uroot-pletmein”来连接mysql数据库的。
2.3运行完上面两个命令,我们就会在创建了两个mysql的client的容器,此时我们可以使用下面命令来查看状态
sudodockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES ac0c76c627c0kongxx/mysql_client:latest/usr/bin/mysql-hdb10secondsagoUp9secondsmysql_client2 763c4825722dkongxx/mysql_client:latest/usr/bin/mysql-hdb41minutesagoUp40minutesmysql_client 32f7839f7e9dkongxx/mysql_server:latest/usr/bin/mysqld_safeAboutanhouragoUpAboutanhour0.0.0.0:49153->3306/tcpmysql_client1/db,mysql_client2/db,mysql_server0.0.0.0:49153->3306/tcpmysql_client1/db,mysql_client2/db,mysql_server
这里注意一下最后一行,也就是mysql_server容器的“NAMES”列的内容“mysql_client/db,mysql_client2/db,mysql_server”,这就说明mysql_client1和mysql_client2都和db建立的连接。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。