一、问题描述

有两个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地址。成功收到对方应答。