Docker使用Link在容器之間建立連接
在使用Docker的時(shí)候我們會(huì)常常碰到這么一種應(yīng)用,就是我需要兩個(gè)或多個(gè)容器,其中某些容器需要使用另外一些容器提供的服務(wù)。比如這么一種情況:我們需要一個(gè)容器來(lái)提供mysql的數(shù)據(jù)庫(kù)服務(wù),而另外兩個(gè)容器作為客戶端來(lái)連接使用mysql數(shù)據(jù)庫(kù)服務(wù)。下面我們就來(lái)看看Docker是怎樣通過(guò)Link來(lái)實(shí)現(xiàn)這種功能的。
1. 這里我們首先創(chuàng)建兩個(gè)容器image,一個(gè)用來(lái)模擬mysql數(shù)據(jù)庫(kù),另外一個(gè)使用mysql的client來(lái)模擬一些使用mysql服務(wù)的應(yīng)用,這種應(yīng)用可以是任何php,python,java等的應(yīng)用。
1.1 先創(chuàng)建一個(gè)mysql_server目錄并在其下創(chuàng)建一個(gè)Dockerfile文件,內(nèi)容如下
FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" 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"]
然后根據(jù)Dockerfile來(lái)創(chuàng)建image
sudo docker build -t kongxx/mysql_server .
1.2 創(chuàng)建一個(gè)mysql_client目錄并在其下創(chuàng)建一個(gè)Dockerfile文件,內(nèi)容如下
FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN yum install -y mysql
然后根據(jù)Dockerfile來(lái)創(chuàng)建image
sudo docker build -t kongxx/mysql_client .
1.3 創(chuàng)建完image之后,我們可以使用下面命令來(lái)查看結(jié)果
$ 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. 第二步是根據(jù)image來(lái)創(chuàng)建我們的應(yīng)用場(chǎng)景
2.1 首先創(chuàng)建提供mysql數(shù)據(jù)庫(kù)服務(wù)的容器
sudo docker run --name=mysql_server -d -P kongxx/mysql_server
2.2 分別創(chuàng)建兩個(gè)使用上一步創(chuàng)建出來(lái)mysql數(shù)據(jù)庫(kù)服務(wù)的容器
第一個(gè)應(yīng)用容器
第二個(gè)應(yīng)用容器
這里需要特別注意一下“–link=mysql_server:db”,這個(gè)參數(shù)就是告訴Docker容器需要使用“mysql_server”容器,并將其別名命名為db,這樣在這兩個(gè)容器里就可以使用“db”來(lái)作為提供mysql數(shù)據(jù)庫(kù)服務(wù)的機(jī)器名。所以在最后啟動(dòng)參數(shù)里我們使用的是“/usr/bin/mysql -h db -u root -pletmein”來(lái)連接mysql數(shù)據(jù)庫(kù)的。
2.3 運(yùn)行完上面兩個(gè)命令,我們就會(huì)在創(chuàng)建了兩個(gè)mysql的client的容器,此時(shí)我們可以使用下面命令來(lái)查看狀態(tài)
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 0.0.0.0:49153->3306/tcp mysql_client1/db,mysql_client2/db,mysql_server
這里注意一下最后一行,也就是mysql_server容器的“NAMES”列的內(nèi)容“mysql_client/db,mysql_client2/db,mysql_server”,這就說(shuō)明mysql_client1和mysql_client2都和db建立的連接。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker Compose引用環(huán)境變量的方法示例
在項(xiàng)目中,往往需要在 docker-compose.yml 文件中使用環(huán)境變量來(lái)控制不同的條件和使用場(chǎng)景。本文集中介紹 docker compose 引用環(huán)境變量的方式,感興趣的小伙伴們可以參考一下2018-12-12Docker私有倉(cāng)庫(kù)Registry部署的實(shí)現(xiàn)
這篇文章主要介紹了Docker私有倉(cāng)庫(kù)Registry部署的實(shí)現(xiàn),私有倉(cāng)庫(kù)最常用的就是Registry、Harbor兩種,本文詳細(xì)介紹如何搭建registry私有倉(cāng)庫(kù),感興趣的可以了解一下2020-06-06docker容器內(nèi)安裝TensorRT的問(wèn)題
很多朋友在使用docker容器內(nèi)安裝TensorRT的時(shí)候,遇到一大堆棘手的問(wèn)題,不知道怎么處理好了,今天小編就docker安裝TensorRT的問(wèn)題給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2021-05-05使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境
這篇文章主要介紹了使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05深入了解docker(docker鏡像、容器、倉(cāng)庫(kù)的基本概念)
本文重點(diǎn)給大家介紹docker鏡像、容器、倉(cāng)庫(kù)的基本概念,感興趣的朋友跟著小編一起學(xué)習(xí)吧2016-10-10docker 實(shí)現(xiàn)容器與宿主機(jī)無(wú)縫調(diào)用shell命令
這篇文章主要介紹了docker 實(shí)現(xiàn)容器與宿主機(jī)無(wú)縫調(diào)用shell命令的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨想過(guò)來(lái)看看吧2021-03-03