参考视频
1.容器也有端口
先前已经提到,容器存在于宿主机中。宿主机有端口,而容器也有端口,但由于容器是一个独立的沙箱环境,二者的端口并不冲突。
- 不同容器之间端口不会冲突;
- 容器与宿主机之间的端口不会冲突;
- 同一个容器内部不允许出现端口冲突。
2.端口映射
2.1.外部机器无法直接访问容器
如上图所示,外部机器可以访问宿主机,宿主机可以访问容器(宿主机相当于代理),但外部机器却不可以直接访问容器。
2.2.解决方案:端口映射
端口映射是指:将宿主机的A端口与某一个容器的B端口进行绑定。当外部机器访问A端口时,宿主机将以代理的身份访问容器的B端口。如此一来,就实现了外部机器对容器B端口的访问。
2.3.如何实现端口映射
创建容器时加入-p参数:
-p <宿主机端口>:<容器端口>
3.使用docker部署mysql,并配置端口映射
- $PWD是什么?
- -e MYSQL_ROOT_PASSWORD=123456,我怎么知道-e后面应该接什么?
-
[拉取镜像] 拉取mysql5.6镜像;
docker pull mysql:5.6
-
[运行镜像以创建容器] 创建容器实例,并配置数据卷和端口映射;
docker run -id \ -p 3306:3306 \ --name=container_mysql \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/mysql/logs:/logs \ -v /usr/local/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.6
- -p <宿主机端口> <容器端口>是配置端口映射;
- -v <数据卷目录> <容器内目录>是配置数据卷的参数;
- -e MYSQL_ROOT_PASSWORD是设置mysql的ROOT密码。
-
[进入容器] 使用
docker exec
指令进入容器;docker exec -it container_mysql /bin/bash
-
[测试端口映射是否配置成功] 在终端创建一个数据库,随后使用Navicat测试连接,查看数据库是否成功创建。