一、问题描述
有两个docker镜像:mysql镜像和ubuntu镜像。项目的数据库和代码分别打包在mysql镜像和ubuntu镜像中。项目代码需要跨容器访问数据库。
二、实现方法
使用docker –link参数实现容器互联
三、具体操作
1.装载mysql镜像
docker load -i ./mysql.tar
查看已装载镜像列表:
docker images
2.以mysql8镜像创建容器
docker run -d --name mysql -p 3306:3306 mysql8:latest
参数释义:
–name mysql 命名创建的容器为mysql
-p 3306:3306 将容器内的3306端口映射到主机3306端口,方便主机连接调试
mysql8:latest 镜像名称:版本号
查看创建的容器
docker ps -a
可以看到容器已经启动,并且Ports列显示了端口映射情况
如果容器没有启动,执行下面的命令启动它
docker start mysql
3.使用navicat测试主机是否可以连接容器内的mysql
连接地址为:localhost:3306
4.装载ubuntu镜像
可以去docker hub下载一个打包好的ubuntu镜像
Explore Docker’s Container Image Repository | Docker Hub
docker pull ubuntu:20.04
查看镜像列表
docker images
5.创建ubuntu容器
docker run -it --name ubuntu -p 8080:8080 --link mysql:mysql ubuntu:20.04 /bin/bash
参数释义:
-it … /bin/bash 以命令行模式进入容器,创建完成后会打开/bin/bash
–name 命名容器名为ubuntu
-p 8080:8080 容器的8080端口映射到主机8080端口,方便项目调试
–link mysql:mysql 把mysql容器取一个别名(还是mysql)映射到ubuntu容器中
ubuntu:20.04 以ubuntu:20.04镜像创建容器
之后会进入到容器内的终端/bin/bash
6.测试连接
在ubuntu容器内可以通过别名mysql来访问mysql容器内的网络:
mysql:3306 //以别名mysql访问对应容器的网络,端口号为3306
在ubuntu容器中安装telnet进行测试
apt updateapt install telnet
使用telnet测试跨容器访问
telnet mysql 3306 #mysql是别名,3306是端口
可以看到mysql别名被自动替换为172.17.0.2,这是真实的mysql容器的ip地址。成功收到对方应答。