docker使用镜像构建容器 实现linux下虚拟机

版权声明:转载请注明出处 https://blog.csdn.net/weixin_40325128/article/details/84998902

也许有小伙伴还不太清楚docker 是什么东西,那么可以先去了解一下,传送门:docker入门

由于最近要做mysql的集群,那么需要提前做一些测试,可是手头并没有那么多的服务器,只有一台自己的阿里云服务器,windows下的虚拟机又不想用,在了解了docker之后,决定使用docker来快速部署几台服务器的环境,快速搭建几个mysql环境,理由是体积更小,占用资源更少。

安装EPEL

rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

docker的安装

直接yum下载就可以了

yum install -y docker-io

启动docker并设置开机自启动

service docker start
chkconfig docker on

查看docker状态

service docker status

可以看到docker已经启动了:

到此 Docker完成,很简单吧。

接下来,我们要启动docker需要一个linux镜像,镜像可以从网上直接下载,非常方便。

这里我选择的是centos6.8的版本

这里直接使用docker pull 镜像名称:tags

docker pull centos:6.8

可以看到成功拉取镜像

查看本地镜像:

docker images

镜像下载好了我们就要利用镜像创建容器:

 docker run -i -t -d  --name mysql1 -p 33061:3306  centos:6.8

docker run 镜像名称:tags    利用镜像创建容器

-d 容器后台运行

--name 给容器命名

-p 本地端口:容器端口 

指定端口映射 使得可以通过访问宿主机端口来访问容器端口(这里一定要指定,否则后面会很麻烦)

这里要启用端口映射,我们宿主机本身就得开放33061端口

怎么开放端口这里不做讲解,可以手动度娘

创建完容器如下:

查看本地容器列表:

docker ps -a

ports 是端口映射,这个时候指定的是由宿主机的33061端口映射到mysql1容器的3306端口

容器创建完了,我们进入容器里边看看

docker attach 容器名称/ID 进入容器

docker attach mysql1

可以看到当前已经进入到容器里边了,容器本身也是一台独立的linux服务器

接下来我们就要给容器安装mysql服务了

如何安装mysql 还不会的同学可以看我之前的博客

lamp环境搭建  注意安装编译工具  以及mysql编译工具cmake

在我们安装完后,测试mysql一切正常使用时,我们的任务是将这个构建好的容器,复制多一份

那么我们就需要把当前这个容器  生成一个镜像,然后再利用镜像生成另外一个容器

类似

a1 -> image1 -> a2

docker commit 容器名称 镜像名称

docker commit mysql1 mysql_image;

然后查看镜像列表:

docker images;

发现多了一个镜像:

然后我利用镜像来生成另外一个容器:

容器名称定义为mysql2 宿主机端口33062映射到容器端口3306,使用宿主机mysql_image镜像的最新版本

注意一定要开启 iptables 

 docker run -i -t -d  --name mysql2 -p 33062:3306  mysql_image:latest

然后查看镜像列表,可以看到多生成了一个mysql2的容器

docker ps -a

接下来我们进行测试:

我们用navicat数据库管理工具来连接mysql1,这里我们需要借助宿主机的端口映射,这需要保证2条线路是通的

1 外网可以请求宿主机的33061端口

2 宿主机可以请求mysql1的3306端口

我们通过请求宿主机的33061端口,来映射到mysql1的3306端口

先验证1 :

有返回则代表端口是通的

如果没有返回则端口不通,需要关闭防火墙iptables或者像我是阿里云服务器的话就去安全组添加对应的端口:

接着验证2:

进入宿主机shell面板,尝试请求mysql1的3306端口

返回即请求通了,不通的话同样可以进入mysql1容器关闭防火墙iptables

确保外部跟宿主机是通的,宿主机跟mysql1容器是通的,然后我们用mysql管理工具来连接

账户是密码是mysql1的账户密码,宿主机负责把请求映射到mysql数据库,最终是请求到mysql1数据库

可以看到我们已经才成功连接上mysql1数据库了

常见问题汇总

1 创建了容器  但是端口映射没有成功

解决方法:

1 删掉原来的容器     docker rm -f 容器名称

2 启动iptables         service iptables statrt

3  重新创建容器  指定端口映射   docker run -i -t -d  --name mysql2 -p 33062:3306  mysql_image:latest

2 为什么安装软件的时候总是提示少了这个库,少了那个库,并且yum install 还下不到

解决方法

yum update 之后  根据提示看少了什么库,对应装上,不懂的就百度,注意centos版本是6.8 是没有apt-get命令的

这个版本对应的是yum install 命令 来安装软件。

3 为什么启动容器之后  下载一些软件一直卡在那里不动?

解决办法

这种情况下大多数是因为没有网络,可以尝试 ping www.baidu.com 如果无法访问外网,那么可以尝试关闭容器再次重新启动,大部分情况下可以解决问题

关闭容器:

docker stop mysql1;

启动容器:

docker start mysql1;

猜你喜欢

转载自blog.csdn.net/weixin_40325128/article/details/84998902