Docker的用途
首先声明Docker是用于解决Linux服务器集群安装环境同步的问题,用于解放运维工作者花费大量时间在安装服务器环境上。
本文仅仅介绍Docker非常基础的运用,运用Docker重新在Linux系统安装Tomcat和MySql。
提示:
1、Docker安装软件或环境不会与之前的软件或环境冲突,也不基于之前的软件或环境。也就是说,如果你已经安装了Tomcat和MySql,用Docker再安装一次,不用卸载之前的Tomcat和MySql;如果你之前没有安装Tomcat和MySql,用Docker第一次安装完全可以。
2、本文所用Linux服务器是Centos。
Linux系统下Docker的安装
#下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data-lvm2
#设置Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装Docker
yum makacache fast
yum -y install docker-ce
#启动Docker服务
systemctl start docker
#开机自启动
systemctl enable docker
#测试Docker
docker run hello-world
如图,出现Hello from Docker!说明Docker安装成功。
Docker安装Tomcat
docker run -d -p 8081:8080 --name tomcat daocloud.io/library/tomcat:8.5.15-jre8
注:
1、端口号8081:8080,前一个是Linux本机的端口,后一个是Docker容器的端口,如果Linux本机之前已经安装了tomcat并占用了8080端口,就不要写成8080:8080。反之,如果你之前没有安装过tomcat,当然可以写8080:8080
2、daocloud.io/library/tomcat:8.5.15-jre8是tomcat的镜像地址,来源于国内Docker的镜像仓库http://hub.daocloud.io/
这里拉取的镜像是最新版本,当然也可以在“版本”里选择其他版本的tomcat镜像。
Docker安装MySql
docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.4
注:
1、同理,端口号3307:3306,前一个是Linux本机的端口,后一个是Docker容器的端口,如果Linux本机之前已经安装了MySql并占用了3306端口,就不要写成3306:3306。反之,如果你之前没有安装过tomcat,当然可以写3306:3306
2、安装MySql需要马上指定root账号的密码,这里没有密码复杂度的验证,直接设MYSQL_ROOT_PASSWORD=123456是没有问题的。
3、daocloud.io/library/mysql:5.7.4是mysql的镜像地址,同样来源于国内Docker的镜像仓库http://hub.daocloud.io/
同样,这里拉取的是最新版本的镜像,当然也可以在“版本”里选择其他版本的MySQL镜像。
测试Tomcat和MySql安装结果
提示:Docker拉取镜像运行后就成为一个独立的环境了,我们称之为容器。
#查看正在运行的docker容器
docker ps
如图,出现tomcat和mysql两个Docker容器说明安装成功。也许你注意到了我的执行结果中还有一个volume_tomcat容器,这个容器下文会讲到。现在,先保证Tomcat和MySql两个容器运行正常。
如何看两个容器是否运行正常,只需要在你的笔记本电脑本机上验证一下就行了。
验证Tomcat容器是否正常
打开浏览器,输入如下网址:
58.87.119.234:8081
注:
1、58.87.119.234是我的服务器公网IP,需换成你自己服务器的IP。
2、端口号8081来源于之前安装Tomcat命令中的“8081:8080”,不言而喻,笔记本电脑想要访问服务器中用Docker安装的Tomcat,访问的是Linux本机的端口,而不是Docker容器的端口。
如图,出现Tomcat首页,说明Docker容器运行正常,即新安装的Tomcat运行正常。
验证MySql容器是否正常
打开Navicat,尝试连接一下即可:
如图:
同理,端口号3307来源于之前安装Tomcat命令中的“3307:3306”,访问的是Linux本机的端口,而不是Docker容器的端口。至于密码,当然来源于MYSQL_ROOT_PASSWORD=123456。点击连接测试,即可查看Docker容器是否运行正常。
提示:
服务器58.87.119.234已过期,已经连不上,阅读者自重。
Docker容器的应用
安装了Tomcat和MySql当然是拿来应用的。如果想把项目war包放到Tomcat容器的webapps目录下。Docker也提供了相应的功能。如果你还不知道War包是什么,建议结束阅读。
#查看Docker所有运行的容器,获取Tomcat容器的id
docker ps
如图,Tomcat容器的id是8dca180470ae,有了容器id后,进行如下操作。
#先进入容器,用pwd命令查看容器路径
docker exec -it 容器id /bin/bash # /bin/bash可简写成bash
比如:docker exec -it 8dca180470ae bash
#退出容器
exit
#项目包直接扔进tomcat容器里的webapps目录下
docker cp 项目war包 tomcat容器id:容器内部路径
比如:docker cp ssm.war 8dca180470ae:/usr/local/tomcat/webapps
完成以上步骤后,在之前检测Tomcat容器是否运行正常的基础上加上项目包名称,访问并验证即可,如下
58.87.119.234:8081/ssm
当然,要想项目正常运行,得先把项目数据库实例上传到服务器上。在之前利用Navicat连接MySql容器的基础上新建相应数据库并运行sql文件即可。
注:Docker容器不是Linux本机上的真实目录,所以直接把项目War包放到Tomcat容器中是不建议这么操作的。
数据卷映射webapps目录
如果要用Tomcat容器运行War包,最好用数据卷映射Tomcat容器中的webapps目录到Linux本机上的某个真实目录下。这样就不用进入Tomcat容器,直接将War包放到映射的真实目录中即可。
说到这,之前提到的volume_tomcat容器登场了。
如图,我的volume_tomcat容器在端口的设定上是“8080:8080”,它在Linux本机上的端口是8080,这是为了避免与之前的tomcat容器端口“8081:8080”冲突。当然,volume_tomcat容器也可以设为“8082:8080”、“8083:8080”等等,也不冲突,只要你保证端口号8082或8083没有被占用即可。
#查看Linux本机是否占用了某个端口
netstat -tunlp | grep 端口号
如何创建volume_tomcat容器,它本质上跟上一个Tomcat容器一样,需要拉取一个tomcat镜像来创建,只是多了用数据卷来映射webapps目录而已。
#创建新的tomcat容器,命名为volume_tomcat容器
docker run -d -p 8080:8080 --name tomcat -v /opt/volume_tomcat:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.5.15-jre8
注:/opt/volume_tomcat就是我指定的映射路径,创建volume_tomcat容器成功后,只需要把War包放到/opt/volume_tomcat目录下即可,不用进入容器内部。
以上就是Docker最简单的应用,当然是大材小用,Docker的真正用途超神得多。
总结:Docker安装MySql还是比传统安装方式简单方便,这一点值得小白借鉴。
附Docker基础命令:
下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data-lvm2
设置Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker
yum makacache fast
yum -y install docker-ce
启动Docker服务
systemctl start docker
开机自启动
systemctl enable docker
测试Docker
docker run hello-world
拉取Tomcat镜像
docker pull daocloud.io/library/tomcat:8.5.15-jre8
查看所有镜像
docker images
删除镜像
docker rmi 镜像id
镜像的导出导入
docker save -o 导出路径tomcat.image 镜像id
docker load -i tomcat.image
修改导出镜像的名字和版本(导入的镜像名和版本默认是none)
docker tag 镜像id 镜像名称:镜像版本
运行后的镜像就是容器
docker run 镜像id
若要想在外部访问,完整命令如下
docker run -d -p 8081:8080 --name 容器名称 镜像id
查看正在运行的容器
docker ps [-qa]
-a 查看全部容器,包括没有运行的容器,其实就是镜像
-q 只查看容器的id
查看日志
docker logs -f 容器id
进入容器内部
docker exec -it 容器id /bin/bash
退出容器
exit/quit
停止运行容器
docker stop 容器id
停止全部容器
docker stop $(docker ps -qa)
启动容器
docker start 容器id
删除容器(前提是停止运行容器)
docker rm 容器id
删除全部容器
docker rm $(docker ps -qa)
拉取mysql镜像并运行为容器
docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.4
项目包直接扔进tomcat容器里的webapps目录下(先进入容器,用pwd命令查看容器路径)
docker cp 项目war包 tomcat容器id:容器内部路径
比如:docker cp ssm.war 68:/usr/local/tomcat/webapps
创建数据卷(/var/lib/docker/volumes/数据卷名称)
docker volume create 数据卷名称
查看数据卷详细信息
docker volume inspect 数据卷名称
查看数据卷名称
docker volume ls
删除是数据卷
docker volume rm
映射数据卷(用默认路径/var/lib/docker/volumes/数据卷名称)
docker run -v 数据卷名称:容器内部的路径 镜像id
映射数据卷(指定路径)
docker run -v 路径:容器内部的路径 镜像id
如果端口号冲突,映射之前得关闭tomcat容器、删除tomcat容器,再执行命令
docker run -d -p 8081:8080 --name tomcat -v /opt/volume_tomcat:/usr/local/tomcat/webapps b8