自我修养之原情陈述:个人接触Docker时间比较晚,最近才开始认真学习使用,虽然面临诸多困难,可为了探索新技术,凭借着程序员的特有的骄傲品质,最终还是实现了在docker中运行war项目。
另外,本文不是系统性介绍docker的使用,旨在记录实现的过程,只能呈现关键步骤,争取让大家对docker的使用有个入门了解。
- 基础概念
第一次使用,我们当然有必要了解Docker的相关概念及基础原理,这里我将提供已经在网上找的相关参考资料,个人觉得相关概念说的很直白,易懂, 很有帮助的。
1.大白话Docker入门(一)-博客-云栖社区-阿里云
2.大白话Docker入门(二) - 系统环境
- linux: openSUSE Leap 42.3,另外请自行安装JDK等软件 ,当然安装过程也很简单,相关安装命请往下看。
- 辅助资料:
- 操作步骤
官网: https://www.docker.com/,贴出官网,仅方便各位直接去查看官方的说明文档
命令操作:
1. 安装Docker
sudo zypper in docker
2. 启动docker守护进程(还可参考这篇文章)
sudo systemctl start docker.service
3. 利用Docker命令,拉取镜像Image并启动容器Container,搜索镜像
docker pull tomcat
docker pull mysql
如果没有权限,请加上sudo
3. 怎么使用mysql镜像?
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
参数说明:
"come-mysql":指定容器的名称
"my-secret-pw":数据库中root用户的密码
":tag":版本标签,由于上面我们已经拉取了最新的版本,这句代码参数可省略掉变成
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
比如:指定mysql的容器名称叫:msql,指定的root用户密码为:root
docker run --name msql -e MYSQL_ROOT_PASSWORD=root -d mysql
执行成功后,查看容器状态,可以看mysq已经成功运行起来罗:
docker ps
在mysql跑起来后,我们可以用navicat来连接到数据库,提取码:adqx
由于是英文版本,请自行配置中文字体,避免在某些地方(如查询窗口中输入中文时)出现乱码,位置:Tools–>Options–>Appearance-Font,你可能想用的字体
- 怎么使用tomcat镜像?
docker run -it --rm -p 8888:8080 -v /home/xxx/testwar/:/usr/local/tomcat/webapps/ --name tomcat tomcat
参数说明:
"8888:8080":将容器中的8080端口映射到本地的8888端口,这样我们在本地就可以通过8888端口访问我们自己部署的项目了( 比如:localhost/:8888/tomcat中的项目名称)
"/home/xxx/testwar/":本地目录路径
"/usr/local/tomcat/webapps/":docker中tomcat容器的虚拟路径
多说两句:
8888:本地主机的端口
8080:Docker容器中的默认端口
根据docker的tomcat镜像使用方法
$ docker run -it --rm tomcat:8.0
这个命令启动tomcat后可以让我们直接通过http://container-ip(容器IP):8080。这种不能直接用http://localhost:8080看到tomcat首页,必须要是容器IP才可以,我测试时是172.17.xxx.xxx的形式,查看容器IP的方法,请往下看第二段。
$ docker run -it --rm -p 8888:8080 tomcat:8.0
这个命令就做到了上面提到的端口映射,执行后我就们可以在本地通过http://localhost:8888 or http://host-ip(主机IP):8888访问部署的项目了。
tomcat:8.0
冒号和8.0是指定dokcer 运行的tomcat版本,不加版本号的话,就会运行最新的tomcat
两个路径之间通过一个冒号进行映射,为什么这样做,因为tomcat镜像是运行在容器中的,而根据docker的设计理念(每个容器互不干扰,且各自划分主机硬件资源),每个容器都会有一个网络IP地址。
通过命令:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id(容器的名称或者id)
示例:控制台直接输出容器的IP地址
我们拿到这里的IP后,有什么用呢?
运行war项目前,我们需要设置数据源的信息,那么mysql容器的IP就是我在项目的数据源文件中设置的地址,这样才能保证项目启动后能正常连接到数据库。
其它连接方式:不同容器之间进行通信,如下:
docker:从 tomcat 容器连接到 mysql 容器