Docker简单说明
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(PS:简单来说,就是在linux系统里面通过镜像安装另一个linux系统,然后在另一个linux系统中运行对应的软件,让在linux部署更加简单便捷)
安装Docker步骤(以CentOS为例)
1.删除原系统中的docker版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
2.设置镜像仓库地址
sudo yum install -y yum-utils device-mapper-persistent-datalvm2sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
sudo yum install docker-ce
4.启动Docker
sudo systemctl start docker
5.测试是否安装成功
sudo docker run hello-world
到此为止,安装Docker完毕,准备在Docker世界中遨游吧!!!
PS:设置linux开启自启Docker命令
systemctl enable docker
Docker简单安装MySQL
镜像搜索地址
官方Docker镜像搜索地址:https://hub.docker.com。基本需要用到的,在上面都可以查到。
![747edad345160738f3e36854e60502e3.png](https://i-blog.csdnimg.cn/blog_migrate/08428a758e6741e803264be767b6a7d5.jpeg)
如图所示,针对不同的需要,可以安装不同版本的镜像。
安装MySQL步骤(以安装5.7版本为例)
1.拉取MySQL镜像
docker pull mysql:5.7
mysql:5.7 中的“5.7”为拉取的MySQL的版本,可以根据需要进行修改
2.初始化运行MySQL
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
参数 1:—name mysql -> mysql 为初始化容器名字,自定义(但是不能与之前生成过的容器名称重复)
参数 2:-e MYSQL_ROOT_PASSWORD=123456 -> MYSQL_ROOT_PASSWORD为设置mysql的root密码
参数 3:mysql:5.7 -> 为启动容器对应的镜像名称
其他配置启动的形式
//初始化数据库为中文格式编码docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci//开机自动重启这个容器docker run --restart=always --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
代码说明
注意点1 :—character-set-server=utf8mb4 —collation-server=utf8mb4_unicode_ci
这表明对应安装的数据库的编码格式配置
注意点2 :—restart=always
添加这段配置,说明这个容器会随机器启动而自动重启
附上Docker容器常用命令
docker stop mysql //暂停MySQLdocker start mysql //启动MySQLdocker restart mysql //重启MySQL
安装Tomcat步骤(以7.0.88为例)
![25f132d0eb2276eeb16a6131de5ff76a.png](https://i-blog.csdnimg.cn/blog_migrate/acb862e7ac762f9fe1e43f9ee3496c36.jpeg)
1.拉取Tomcat镜像
docker pull tomcat:7.0.88-jre8
2.初始化运行Tomcat
docker run --name tomcat -d -p 8888:8080 tomcat:7.0.88-jre8
- 参数 1 :—name tomcat :tomcat 为初始化容器名字,可自定义(但不能和现存的容器名重复)
- 参数 2 :tomcat:7.0.88-jre8 即为启动容器对应的镜像名称
如果想要将tomcat容器和MySQL容器关联在一起,则需要执行下面的命令
docker run --name tomcat -d -p 8888:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps -v /root/tomcat/logs:/usr/local/tomcat/logs --link mysql:db tomcat:7.0.88-jre8
- 参数 1 :”—link mysql:db” mysql 为MySQL容器的名称 ,db为连接别名可自定义
当tomcat容器和MySQL容器连接后,进行数据库连接时可用mysql做主机名
例如:jdbc_url=jdbc:mysql://mysql:3306/mydatabasename?useUnicode=true&characterEncoding=utf8 - 参数 2 :”-v /root/tomcat/webapps:/usr/local/tomcat/webapps” 主机文件夹与容器文件夹的映射
安装完Tomcat 之后,那肯定要开始部署war包了
部署war包有两种方式:
- 方法1通过Docker的文件复制命令,把war包先复制到服务器中,然后在服务器执行复制命令,将war包再从服务器中复制到tomcat的容器当中,例如命令为
docker cp /root/web.war mytomcat:/usr/local/tomcat/webapps
- 参数1:”/root/web.war mytomcat”服务器本地文件的路径
- 参数2:”/usr/local/tomcat/webapps”容器内的路径
复制完之后,重启容器就可以了
- 方法2(比较推荐)直接将容器内的某个文件夹映射到服务器当中,然后直接操作服务器中对应的文件夹
![77ac5fa835be2702678ca97834a5ab46.png](https://i-blog.csdnimg.cn/blog_migrate/ff267a61811b4df003f99b4830fba3b1.jpeg)
- 但这种方法需要在一开始生成容器的时候就要配置docker run --name tomcat -d -p 8888:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7.0.88-jre8
- 对应参数 “-v /root/tomcat/webapps:/usr/local/tomcat/webapps” :”/root/tomcat/webapps”为服务器本地的路径地址,”/usr/local/tomcat/webapps”为容器中的路径地址
设置完之后,直接把war包拖到对应服务器本地的路径地址文件夹即可
Docker运行tomcat容器遇到的坑
1.Tomcat每一次启动会很慢,启动时间长
一般来说,tomcat启动正常都是几十秒左右就可以启动起来,但是如果安装的是tomcat默认的镜像,你每一次启动都要等好久好久好久,然后才启动完成。
启动慢的原因
根本原因是 SecureRandom 这个 jre 的工具类的问题,Tomcat 7/8 都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID。SecureRandom generateSeed 使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待。键盘和鼠标输入以及磁盘活动可以产生所需的随机性或熵。但在一个服务器缺乏这样的活动,可能会出现问题。
简单来说就是还需要配置一下tomcat/bin文件夹下的catalina.sh文件,在文件夹中加入下面的命令
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"
![612e58eec57064d99e216ae5dd64fc39.png](https://i-blog.csdnimg.cn/blog_migrate/b716c05281c263cc4873ea9e99a1c45d.jpeg)
效果图
然后重启容器,就会发现启动跟以前一样了~~~
如果觉得有用的话,请点个赞吧