linkを使って二つの容器の間に接続を作る.

5769 ワード

Dockerを使う時、私達はよくこのような応用に出会います.つまり、二つ以上の容器が必要です.中にはいくつかの容器が別の容器で提供されるサービスを使う必要があります.例えば、mysqlのデータベースサービスを提供する容器が必要です.他の二つの容器はクライアントとしてMsqlデータベースサービスを接続します.DockerがどのようにLinkを通してこの機能を実現しているかを見てみましょう.
 
1.ここではまず二つの容器イメージを作成し、一つはmysqlデータベースをシミュレートするために、もう一つはmysqlのclientを使ってmysqlサービスの応用を模擬します.この応用はどんなphp、python、javaなどの応用でもいいです.
 
1.1まずmysqlを作成します.serverディレクトリとその下にDocerfileファイルを作成します.内容は以下の通りです.
FROM centos:centos 6 
  • MAINTAINER Fabin Kong"[email protected]「 
  •   
  • RUN yum install-y mysql-server mysql 
  •   
  • RUN/etc/init.d/mysqld start&&\ 
  •     mysql-e「grant all priveges on*.***to'root'@'%identifed by'letmein'」&&\ 
  •     mysql-e「grant all priveges on*.***to'root'@'local host'identifed by'letmein'」&&\ 
  •     mysql-u root-pletmein-e「show databases」 
  •   
  • EXPOSE 3306 
  •   
  • CMD[\/usr/bin/mysqld_safe] 
    FROM centos:centos6
    
    MAINTAINER Fanbin Kong "[email protected]"
    
     
    
    RUN yum install -y mysql-server mysql
    
     
    
    RUN /etc/init.d/mysqld start &&\
    
        mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\
    
        mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
    
        mysql -u root -pletmein -e "show databases;"
    
     
    
    EXPOSE 3306
    
     
    
    CMD ["/usr/bin/mysqld_safe"]
    そしてDocerfileによってイメージを作成します.
     
    sudocker build-t kongxx/mysql_server. 
    sudo docker build -t kongxx/mysql_server .
     
    1.2 mysqlを作成する.clientディレクトリを作成し、その下にDocerfileファイルを作成します.内容は以下の通りです.
     
    FROM centos:centos 6 
  • MAINTAINER Fabin Kong"[email protected]「 
  •   
  • RUN yum install-y mysql 
  • FROM centos:centos6
    
    MAINTAINER Fanbin Kong "[email protected]"
    
     
    
    RUN yum install -y mysql
    そしてDocerfileによってイメージを作成します.
     
     
    sudocker build-t kongxx/mysql_client. 
    sudo docker build -t kongxx/mysql_client .
    1.3イメージを作成したら、次のコマンドで結果を確認できます.
     
     
    $sudocker imags grep kongxx 
  • kongxx/mysql_client   latest                a 31 f 22 f 6 fc 5        2 houss ago         303.7 MB 
  • コミュxx/mysqlserver   latest                3 b 9 b 08 c 8 dda 4        2 houss ago         353.3 MB 
    $ sudo docker images | grep kongxx
    
    kongxx/mysql_client   latest                aa31f22f6fc5        2 hours ago         303.7 MB
    
    kongxx/mysql_server   latest                3b9b08c8dda4        2 hours ago         353.3 MB
     
    2.第二ステップはイメージに基づいて、私たちのアプリケーションシーンを作成します.
     
    2.1まずmysqlデータベースサービスを提供するコンテナを作成する
     
    sudocker run--name=mysql_server-d-P kongxx/mysql_server 
    sudo docker run --name=mysql_server -d -P kongxx/mysql_server
    2.2それぞれ前の段階を使ってmysqlデータベースサービスを作成した二つのコンテナを作成します.
     
    最初のアプリケーションコンテナ
     
    sudocker run--name=mysql_client 1--link=mysql_server:db-t-i kongxx/mysql_client/usr/bin/mysql-h db-u root-pletmein 
    sudo docker run --name=mysql_client1 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
     
    第二の応用容器
    sudocker run--name=mysql_client 2--link=mysql_server:db-t-i kongxx/mysql_client/usr/bin/mysql-h db-u root-pletmein 
    sudo docker run --name=mysql_client2 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
     
    ここで注意したいのですが、「–link=mysql_server:db」というパラメータは、Docker容器には「mysql server」という容器が必要であり、別名をdbといいます.この二つの容器にはmysqlデータベースサービスを提供するマシン名として「db」が使えます.最後の起動パラメータでは、mysqlデータベースに接続するために「/usr/bin/mysql-h db-u root-pletmein」を使います.
    2.3上記二つの命令を実行したら、私達は2つのmysqlのclientの容器を作成します.この時は下の命令を使って状態を確認します.
    sudocker ps 
  • CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                     NAMES 
  • ac 0 c 76 c 627 c 0        コミュxx/mysqlclient:latest  /usr/bin/mysql-h db   10 seconds ago      Up 9 seconds                                  mysqlclient 2 
  • 763 c 4825722 d        コミュxx/mysqlclient:latest  /usr/bin/mysql-h db   41 minutes ago      Up 40 minutes                                 mysqlclient 
  • 32 f 7839 f 7 e 9 d        コミュxx/mysqlserver:latest  /usr/bin/mysqld_safe   About an hour ago   Up About an hour    0.0.00:49153->3306/tcp   mysqlclient 1/db,mysql_client 2/db,mysql_server 
    sudo docker ps
    
    CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                     NAMES
    
    ac0c76c627c0        kongxx/mysql_client:latest   /usr/bin/mysql -h db   10 seconds ago      Up 9 seconds                                  mysql_client2
    
    763c4825722d        kongxx/mysql_client:latest   /usr/bin/mysql -h db   41 minutes ago      Up 40 minutes                                 mysql_client
    
    32f7839f7e9d        kongxx/mysql_server:latest   /usr/bin/mysqld_safe   About an hour ago   Up About an hour    0.0.0.0:49153->3306/tcp   mysql_client1/db,mysql_client2/db,mysql_server
    ここで最後の一行、つまりmysqlです.server容器の「NAMES」列の内容「mysql uclient/db、mysql uclient 2/db、mysql_server」について説明します.client 1とmysql_client 2ともdbとの接続です.
    本論文はhttp://blog.csdn.net/kongxx/article/details/38676917から回転する.
    これらのステップを終えた時、必要な答えが出ませんでした.間違ったと思いましたが、命令を実行しました. docker ps--no-truncの時にmysql_が現れました.client 1/db,mysql_client 2/db,mysql_client 3/db,mysql_server