From 3e57990f567c6489f59b975ada1c1b4d7cbbaf50 Mon Sep 17 00:00:00 2001 From: fanxb Date: Fri, 1 Feb 2019 17:27:09 +0800 Subject: [PATCH] =?UTF-8?q?add:docker=E9=83=A8=E7=BD=B2java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1.linux下docker安装与配置.md} | 4 +- .../2.docker简单使用教程.md} | 23 +++-- linux/docker/3.docker部署java应用.md | 93 +++++++++++++++++++ linux/docker/项目架构.xml | 1 + 4 files changed, 109 insertions(+), 12 deletions(-) rename linux/{软件安装/linux下docker安装与配置.md => docker/1.linux下docker安装与配置.md} (91%) rename linux/{软件安装/docker简单使用教程.md => docker/2.docker简单使用教程.md} (68%) create mode 100644 linux/docker/3.docker部署java应用.md create mode 100644 linux/docker/项目架构.xml diff --git a/linux/软件安装/linux下docker安装与配置.md b/linux/docker/1.linux下docker安装与配置.md similarity index 91% rename from linux/软件安装/linux下docker安装与配置.md rename to linux/docker/1.linux下docker安装与配置.md index 0200a35..5164a5e 100644 --- a/linux/软件安装/linux下docker安装与配置.md +++ b/linux/docker/1.linux下docker安装与配置.md @@ -1,10 +1,10 @@ --- id="2018-11-20-10-38-05" -title="linux下mongodb的配置与安装" +title="1.linux下mongodb的配置与安装" headWord="linux下docker的安装与配置" tags=["docker", "linux","ubuntu"] category="linux" -serie="软件相关" +serie="docker教程" --- # 一、安装 diff --git a/linux/软件安装/docker简单使用教程.md b/linux/docker/2.docker简单使用教程.md similarity index 68% rename from linux/软件安装/docker简单使用教程.md rename to linux/docker/2.docker简单使用教程.md index 60832c4..813dc57 100644 --- a/linux/软件安装/docker简单使用教程.md +++ b/linux/docker/2.docker简单使用教程.md @@ -1,10 +1,10 @@ --- id="2018-12-26-13-18" -title="docker简单使用教程" -headWord="报错是这么产生的,使用装有mysql的镜像创业一个容器,然后在容器中启动mysql就会报错,启动失败。" +title="2.docker简单使用教程" +headWord="本篇用来记录一些在docker中经常用到的命令,慢慢补充中。" tags=["docker","mysql"] category="linux" -serie="软件相关" +serie="docker教程" --- ### 1、镜像操作 @@ -41,7 +41,7 @@ docker pull name:tag docker save name:tag/id > /home/image-save.tar # 加载镜像文件到docker中 -docker load /home/image-save.tar +docker load -i /home/image-save.tar ``` #### 6. 查看镜像创建历史 @@ -64,14 +64,16 @@ docker commit -m "提交信息" -a "作者信息" 容器id/容器名 镜像名: #### 1.通过镜像创建容器 ```bash -docker run -itd -p 3306:3306 -p 9200:9200 --name oms_env oms_env:0.6 +docker run -itd -p 3306:3306 -p 9200:9200 -w /home --name oms_env oms_env:0.6 # 参数说明 --i 让容器的标准输入 通常it配合使用 --t docker分配一个伪终端并绑定到容器的标准输入上 --d 容器后台运行 --p 小写p,hostPort:ContainerPort 绑定容器端口到当前主机端口 --P 大写P,docker随机映射一个端口到容器内部开放的网络端口 +-i #让容器的标准输入 通常it配合使用 +-t #docker分配一个伪终端并绑定到容器的标准输入上 +-d #容器后台运行 +-p 8080:80 #小写p,hostPort:ContainerPort 绑定容器端口到当前主机端口 +-P #大写P,docker随机映射一个端口到容器内部开放的网络端口 +-w #指定容器工作空间 +--bind 容器名[:容器别名] #容器链接 ``` #### 2.保存容器到文件/恢复文件到容器 @@ -80,6 +82,7 @@ docker run -itd -p 3306:3306 -p 9200:9200 --name oms_env oms_env:0.6 # 保存容器到文件 docker export 容器名/容器id > /home/container_export.tar +#从文件恢复容器 docker import < /home/container_export.tar ``` diff --git a/linux/docker/3.docker部署java应用.md b/linux/docker/3.docker部署java应用.md new file mode 100644 index 0000000..41d4fb3 --- /dev/null +++ b/linux/docker/3.docker部署java应用.md @@ -0,0 +1,93 @@ +--- +id="2019-02-01-14-05" +title="3.从零开始在docker中部署java应用" +headWord="在没有docker之前,发布项目,测试项目都是一件非常头疼的,你可能经常会听到这样的话,'测试:过几天要测试了,过来搭个测试环境。一顿操作后。测试提bug,开发" +tags=["docker","springboot","jar","war","elastricsearch","activemq"] +category="linux" +serie="docker教程" +--- + +# 前言 + +  在没有 docker 前,项目转测试是比较麻烦的一件事。首先会化较长的时间搭建测试环境,然后在测试过程中又经常出现测试说是 bug,开发说无法复现的情况,导致撕逼。 + +  本篇记录了如何将一个 java 应用部署到 docker 中。主要讲述了以下几个部分: + +- docker 部署 mysql +- docker 部署 activemq +- docker 部署 elastricsearch 集群 +- docker 部署 java 应用 +- docker 部署 nginx 作为静态服务器,及代理服务器 + +项目架构如下: + +![项目架构](https://raw.githubusercontent.com/FleyX/files/master/blogImg/linux/docker/20190201151250.png) + +本系统中有三个主要模块 OMS,DAS 和一个 Eureka 注册中心。其中 OMS 和 DAS 使用有 activemq 消息队列,来进行大量数据的交互然后各自使用一个 mysql 数据库存储主要的业务数据。使用 elastricsearch 存储超大量的数据。 + +## 传统软件部署和 docker 部署 + +  本项目在 windows 部署时是将其作为三个部分来进行安装的--ENV 环境包(保护 mysql,es 等),OMS 产品包,DAS 产品包。所以最初我的设想是一个容器中装 ENV 环境包所需的所有软件,一个容器装 DAS,一个容器装 OMS。然后再实践的过程中越来越感觉不对劲,环境配置比较复杂,而且也有种把容器当虚拟机用的感觉,一点没有简化的感觉。 + +  遂停下了操作,开始学习一波 docker 到底是怎么用的。用租房子来做比喻: + +- 传统软件部署方式相当于租到一个零家具,零装修的房子。我们想要住进去首先必须买齐必要的家具,然后想要住的舒心呢,还得花功夫装饰装饰,让房子好看点。这样就会对这个具体的房子产生较强的依赖,很难迁移到另一个房子中(想想那么多的家具,家电,杂物。。)。如果全部放弃重新换一个房子代价又太大了。 + +![搬家](https://raw.githubusercontent.com/FleyX/files/master/blogImg/linux/docker/20190201161044.png) + +- 使用 docker 相当于租到一个全家电,精装修的房子。我们只需带上自己的个人物品即可开始入住。想要换一个房子也是轻而易举,带上自己的东西麻溜的就换了。 + +![轻松搬家](https://raw.githubusercontent.com/FleyX/files/master/blogImg/linux/docker/20190201161301.png) + +  使用 docker 推荐操作是一个进程放到一个容器中,做到更好的隔离性,同时也更容易进行管理。下面来使用容器技术部署我们应用。还是分为三部分,但是每个进程使用一个容器,做到 0 配置启动容器。 + +# 实战 + +  在此默认已经会安装 docker,且了解基本操作。如不了解的先看这两篇:[安装](http://tapme.top/blog/detail/2018-11-20-10-38-05),[基本使用](http://tapme.top/blog/detail/2018-12-26-13-18) + +## 部署 ENV 环境包 + +  环境包中诸如 elastricsearch,mysql 这样的数据存储工具,需要满足如下两个要求: + +1. 保留数据,不论容器如何创建、销毁,数据不能丢。 +2. 需要使用个性化的配置文件,每次启动根据该配置文件来启动。 + +### 部署 mysql + +  曾经最初的时候在 linux 上手动装一个 mysql 能花上半天的时间,而且还不会进行数据迁移,感觉 mysql 能如此如此快速的查询大量数据很强大。。现在我已然能够熟练的掌握 mysql 安装、卸载。 + +  使用容器部署 mysql 过程如下: + +1. 首先从 docker.hub 中根据各自的需求 pull 对应的 mysql 镜像 + +```bash +docker pull mysql:5.7.24 +``` + +2. 启动镜像 + +  由于 mysql 是用来存数据的,数据无论什么情况都不能丢失,所以数据存在容器外部,通过映射操作,映射到容器内部,参数如下: + +```bash +# 将宿主机的路径,映射到容器内部。这个路径既可以是文件夹,也可以是文件 +-v hostPath/containerPath +``` + +显然我们通过这个桉树将外部的数据文件夹,配置文件映射到容器中。最后启动这个容器的命令如下: + +```bash +docker run --name=mysql -itd -p 3308:3306 -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -v /opt/mysql/data:/var/lib/myql -v /opt/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25 +``` + +**注意:如果 mysql 版本为 8.x,还需要映射/var/lib/mysql-files 目录,否则启动报错** + +下面介绍具体参数含义: + +- -it 标准输入输出有关 +- -d 后台启动 +- -v 文件映射 +- -e 设置环境变量到容器中 + +  可能你们会问为什么要映射`/etc/timezone`和`/etc/timezone`,这是为了让容器的时间和时区与宿主机保持一致。默认情况下容器为 UTC 标准时间。`/etc/timezone`让容器时间,时区和宿主机一致。但是如果不映射`/etc/timezone`java 应用中的时区还是错的,虽然使用`date -R`命令查看时间和时区都正常。 + +### 部署elastricsearch容器 \ No newline at end of file diff --git a/linux/docker/项目架构.xml b/linux/docker/项目架构.xml new file mode 100644 index 0000000..9be4d08 --- /dev/null +++ b/linux/docker/项目架构.xml @@ -0,0 +1 @@ +5ZlPV6MwEMA/TY7uAwIIx9Lieljfuq+H1WOECLjQYAiW+uk3lABNY/tapcV1Lz5m8m/4zUxmKgBOs+o7RXl8Q0KcAkMLKwBnwDBcqPG/tWLVKGzLaBQRTcJGpfeKefKKhVKsi8okxIU0kRGSsiSXlQFZLHDAJB2ilCzlaY8klU/NUYQVxTxAqar9nYQsbrQQalo/cI2TKBZH8yG3GclQO1tMLWIUkuWGCvoATikhrHnKqilOa3gtmGbd1Y7RzjKKF+yQBa+vODUeb5fuczX9dQ21yrXuLnSxTcFW7SvjkBMQIqEsJhFZoNTvtV5Q0hdc76pzgZJyEa4ljUsxy1IxwM2iqzuhXwv3tfDNasVZtTk4WwnpCTO2EpGASka4qjfjByG52L8xvLZ2J5D25UhJA7yPgogsRCPM9sxzOrfxeMckw9xuvo7iFLHkRbYDiciLunm9b/iDcM8xroInc9UnRm6Oitw6Q3b0CXG/OfbvZQcc1VXO/5gd+uWozJt9X1BaipN+3syBbwN3CpwZ8C3gTMBErTAbbMUOmDJc7aemvqRYYFyKAitaDMMS8rIv2HrbT8QbtbqdNzgX9x2hePRFoQ10UUg5MGAIGweGsDVqBBtf6dY4FPlH2xix9JYk3MIuDy1TzkMIt/KrsUus2nJcZ8YHfGl/OV8O7iPTkX2km2f20XuuxmF99N77dIQ8/XB135GomhwE5nYhPHEQGErbMJucv22wnM/WNkCFi19S/AfVaDwIJs4ajQ2cKfBN4DlgsoblXQFH/Wk4LCzTkGG5Y7MyFVYkKy6yVfHMl9opP957oPwpYh2A0zWgliUXvtHpWAqdEI1Fx7a0T0bHUeigoL5Os+ezwzGNrdDRxobTJvoGHYVBxItwvvPtxb9i0UM7XTuWCtwuUI5KBTpvUNG1U2FpSvEWFjVYhtHgAvgucL36svcvgeeDiXlAaMqt0TJOGJ7naN2JLCnK5XbpoODdEyGq88Zzjq34hjdIBaNJUGBEg1g/QV4fhaZtOeRkN8bOdTWmZW5vhvgI3LqvQacHx8X+i0zT8PbftaD/Fw== \ No newline at end of file