1.整体设计

服务及程序部署在linux上
设计的环境:

  • linux
    • jdk
    • 后端服务(jar)
    • 前端服务(dist)
    • docker
  • docker

    • mysql8.0
    • nginx
    • postgres
    • redis

      2.安装步骤

      1.安装JDK

      1.安装JDK

    • 在线安装jdk

使用wget命令下载,如果没有wget可以先使用yum install wget 或 apt install wget 下载

  1. wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

image.png

  • 离线安装JDK
    1. 官网下载对应的jdk版本

基于docker在linux部署java服务及环境 - 图2

  1. 2. **解压安装**

如果tar.gz的安装包
1.找到压缩包所在的文件位置,执行以下命令(jdk-8u131-linux-x64.tar.gz是文件名称)
tar -zxvf jdk-8u131-linux-x64.tar.gz
解压完成之后,可以在当前目录下看到一个名字为【jdk1.8.0_131】的目录,里面存放的是相关文件
image.png
然后重命名文件夹:
mv jdk1.8.0_131/ jdk1.8

我们要将解压后的【jdk1.8】里面的所有数据移动到我们需要安装的文件夹当中,我们打算将jdk安装在usr/java当中,我们在usr目录下新建一个java文件夹
mkdir /usr/java
将【jdk1.8.0_131】里的数据拷贝至java目录下
mv /home/cmfchina/jdk1.8.0_131 /usr/java

  1. 3. **修改环境变量**

至此,我们最后需要修改环境变量,通过命令
vim /etc/profile
用vim编辑器来编辑profile文件,在文件末尾添加一下内容(按“i”进入编辑):

  1. export JAVA_HOME=/usr/java/jdk1.8
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
  4. export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
  5. export PATH=$PATH:${JAVA_PATH}

image.png
然后,保存并退出(按:wq!)
保存完之后,我们还需要让这个环境变量配置信息里面生效,要不然只能重启电脑生效了。
source /etc/profile
检查是否安装成功
输入 java -version 如果显示如下画面,就表示大功告成啦!
image.png
rpm 方式安装java
1.rpm下载地址
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.如果有安装openjdk 则卸载
########检查####################
[root@localhost ~]# rpm -qa | grep java
tzdata-java-2014i-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.71-2.5.3.1.el7_0.x86_64
java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86_64
##########卸载#################
rpm -e —nodeps tzdata-java-2014i-1.el7.noarch
rpm -e —nodeps java-1.7.0-openjdk-headless-1.7.0.71-2.5.3.1.el7_0.x86_64
rpm -e —nodeps java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86_64
3.安装java rpm
rpm -ivh jdk-8u191-linux-x64.rpm
4.配置/etc/profile
#java
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
5.source /etc/profile

2.查看JDK 相关信息

一、查看Jdk的安装路径:
whereis java
which java (java执行路径)

echo $JAVA_HOME
echo $PATH

3.卸载JDK(针对rpm安装的jdk),如果是解压修改的配置,清除配置,删除解压文件即可

  1. 确定JDK的版本:
    rpm -qa | grep jdk
    rpm -qa | grep gcj
    结果:
    copy-jdk-configs-2.2-5.el7_4.noarch
    java-1.8.0-openjdk-headless-debug-1.8.0.161-0.b14.el7_4.x86_64
    java-1.8.0-openjdk-headless-1.8.0.161-0.b14.el7_4.x86_64
    java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
    java-1.8.0-openjdk-debug-1.8.0.161-0.b14.el7_4.x86_64
    2.然后卸载:
    yum -y remove copy-jdk-configs-2.2-5.el7_4.noarch
    如果这中方法不行,可以使用如下的方法卸载:

1)卸载系统自带的jdk版本:
查看自带的jdk:
rpm -qa|grep gcj
可能看到如下类似的信息:
libgcj-4.1.2-44.el5
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
使用rpm -e —nodeps 命令删除上面查找的内容:
rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

2)卸载rpm安装的jkd版本
查看安装的jdk:
rpm -qa|grep jdk
可能看到如下类似的信息:
jdk-1.6.0_22-fcs
卸载:
rpm -e —nodeps jdk-1.6.0_22-fcs
3)进一步查看JDK信息
rpm -qa | grep java
基于docker在linux部署java服务及环境 - 图6
卸载
rpm -e —nodeps tzdata-java-2018d-1.el7.noarch
rpm -e —nodeps javapackages-tools-3.4.1-11.el7.noarch

4.卸载JDK(针对解压修改配置文件的安装方式)

which java(查看JDK的安装路径)
基于docker在linux部署java服务及环境 - 图7
rm -rf JDK地址(卸载JDK) rm -rf /usr/java/jdk/jdk1.8.0_172/
基于docker在linux部署java服务及环境 - 图8
java -version
java
javac
查看是否卸载完毕
基于docker在linux部署java服务及环境 - 图9
vi命令编辑文件profile vi /etc/profile
基于docker在linux部署java服务及环境 - 图10
删除配置的环境变量,至此JDK卸载完毕

2.安装docker

前言

有时候会遇到服务器不能联网的情况,这样就没法用yum安装软件,docker也是如此,针对这种情况,总结了一下离线安装docker的步骤。

1.准备docker离线包

docker官方离线包下载地址
下载需要安装的docker版本,我此次下载的是 docker-17.03.2-ce.tgz版本

2. 准备docker.service 系统配置文件

docker.service

  1. [Unit]
  2. Description=Docker Application Container Engine
  3. Documentation=https://docs.docker.com
  4. After=network-online.target firewalld.service
  5. Wants=network-online.target
  6. [Service]
  7. Type=notify
  8. # the default is not to use systemd for cgroups because the delegate issues still
  9. # exists and systemd currently does not support the cgroup feature set required
  10. # for containers run by docker
  11. ExecStart=/usr/bin/dockerd
  12. ExecReload=/bin/kill -s HUP $MAINPID
  13. # Having non-zero Limit*s causes performance problems due to accounting overhead
  14. # in the kernel. We recommend using cgroups to do container-local accounting.
  15. LimitNOFILE=infinity
  16. LimitNPROC=infinity
  17. LimitCORE=infinity
  18. # Uncomment TasksMax if your systemd version supports it.
  19. # Only systemd 226 and above support this version.
  20. #TasksMax=infinity
  21. TimeoutStartSec=0
  22. # set delegate yes so that systemd does not reset the cgroups of docker containers
  23. Delegate=yes
  24. # kill only the docker process, not all processes in the cgroup
  25. KillMode=process
  26. # restart the docker process if it exits prematurely
  27. Restart=on-failure
  28. StartLimitBurst=3
  29. StartLimitInterval=60s
  30. [Install]
  31. WantedBy=multi-user.target

3. 准备安装脚本和卸载脚本

安装脚本 install.sh

  1. #!/bin/sh
  2. echo '解压tar包...'
  3. tar -xvf $1
  4. echo '将docker目录移到/usr/bin目录下...'
  5. cp docker/* /usr/bin/
  6. echo '将docker.service 移到/etc/systemd/system/ 目录...'
  7. cp docker.service /etc/systemd/system/
  8. echo '添加文件权限...'
  9. chmod +x /etc/systemd/system/docker.service
  10. echo '重新加载配置文件...'
  11. systemctl daemon-reload
  12. echo '启动docker...'
  13. systemctl start docker
  14. echo '设置开机自启...'
  15. systemctl enable docker.service
  16. echo 'docker安装成功...'
  17. docker -v

卸载脚本 uninstall.sh

  1. #!/bin/sh
  2. echo '删除docker.service...'
  3. rm -f /etc/systemd/system/docker.service
  4. echo '删除docker文件...'
  5. rm -rf /usr/bin/docker*
  6. echo '重新加载配置文件'
  7. systemctl daemon-reload
  8. echo '卸载成功...'

4. 安装

  • 4.1 此时目录为:(只需要关注docker-17.03.2-ce.tgz、docker.service、install.sh、uninstall.sh即可)

    基于docker在linux部署java服务及环境 - 图11

  • 4.2 执行脚本 sh install.sh docker-17.03.2-ce.tgz 执行过程如下:

基于docker在linux部署java服务及环境 - 图12

  • 待脚本执行完毕后,执行docker -v

发现此时docker已安装成功,可以用docker —help 查看docker命令,从现在开始你就可以自己安装image和container了

  • 4.3 如果你想卸载docker,此时执行脚本 sh uninstall.sh即可,执行过程如下:

基于docker在linux部署java服务及环境 - 图13
安装遇到的问题:附录1

5..拉取所需的镜像(离线就导入镜像)

一.在线下载镜像

  1. 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ (推荐)

image.png
image.png

  1. 我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

基于docker在linux部署java服务及环境 - 图16

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。

  1. runoob@runoob:~$ docker pull httpd
  2. Using default tag: latest
  3. latest: Pulling from library/httpd
  4. 8b87079b7a06: Pulling fs layer
  5. a3ed95caeb02: Download complete
  6. 0d62ec9c6a76: Download complete
  7. a329d50397b9: Download complete
  8. ea7c1f032b5c: Waiting
  9. be44112b72c7: Waiting

下载镜像后可以通过 docker images 查看下载的镜像
image.png

二.离线导入镜像

Docker镜像的导入导出,用于迁移、备份、升级
涉及的命令有export、import、save、load

  1. save

命令:
docker save [options] images [images…]
基于docker在linux部署java服务及环境 - 图18
示例:
docker save -o nginx.tar nginx:latest

docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)

  1. load
  • 命令
    docker load [options]
    基于docker在linux部署java服务及环境 - 图19
  • 示例
    docker load -i nginx.tar

    docker load < nginx.tar
    其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
  1. export
  • 命令
    docker export [options] container
    基于docker在linux部署java服务及环境 - 图20
  • 示例
    docker export -o nginx-test.tar nginx-test
    其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
  1. import
  • 命令

docker import [options] file|URL|- [REPOSITORY[:TAG]]
基于docker在linux部署java服务及环境 - 图21

  • 示例

docker import nginx-test.tar nginx:imp

cat nginx-test.tar | docker import - nginx:imp
区别

  • export命令导出的tar文件略小于save命令导出的

基于docker在linux部署java服务及环境 - 图22

  • export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出

  • 基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。

基于docker在linux部署java服务及环境 - 图23
建议
可以依据具体使用场景来选择命令

  • 若是只想备份images,使用save、load即可
  • 若是在启动容器后,容器内容有变化,需要备份,则使用export、import (这个可能会有莫名其妙的错误)

    6.运行docker 镜像(详细请查考菜鸟教程docker

  • 示例

    1. docker run -dp 4001:3000 getting-started

    -d和-p标志,我们以“分离”模式(在后台)运行新容器,并在宿主机的 4001 端口和容器的 3000 端口之间创建映射。没有端口映射,我们将无法访问应用程序
    加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

  • 命令

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
docker run -it ubuntu /bin/bash
基于docker在linux部署java服务及环境 - 图24
参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

7.通过docker-compose 管理启动docker内的服务

Docker Compose是一种用于帮助定义和共享多容器应用程序的工具。
使用 Compose,我们可以创建一个 YAML 文件来定义服务,并且使用一个命令,可以启动所有内容或将其全部关闭。

1.安装 Docker Compose

如果您为 Windows 或 Mac 安装了 Docker Desktop/Toolbox,那么您已经拥有 Docker Compose!Play-with-Docker 实例也已经安装了 Docker Compose。如果您在 Linux 机器上,则需要安装 Docker Compose

先决条件

Docker Compose 依赖 Docker Engine 来完成任何有意义的工作,因此请确保您在本地或远程安装了 Docker Engine,具体取决于您的设置。

Docker Engine 可通过 Docker Desktop 在各种Linux 平台macOSWindows 10 上使用,并且可以作为静态二进制安装使用。在下方找到您首选的操作系统。image.png

在 Linux 上,您可以从 GitHub 上的 Compose 存储库发布页面下载 Docker Compose 二进制文件。按照链接中的说明进行操作,其中涉及curl在终端中运行命令以下载二进制文件。这些分步说明也包括在下面。

在线安装详细教程 菜鸟教程

离线安装官网教程

1.下载安装包

选择自己的版本,我选的是当前最新的1.24.0版本,点击下载。下载后上传到服务器/usr/local/bin/目录下
基于docker在linux部署java服务及环境 - 图26
进入上述目录,对文件重命名,然后赋予执行权限:

  1. cd /usr/local/bin
  2. mv docker-compose-Linux-x86_64 docker-compose
  3. sudo chmod +x docker-compose

查看docker-compose版本号:

  1. docker-compose --version

基于docker在linux部署java服务及环境 - 图27
到此docker-compose安装成功

2.使用步骤
  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose.yml 的配置案例如下(配置参数参考下文):

  1. version: '3'
  2. services:
  3. nginx:
  4. container_name: DZ-nginx
  5. restart: always
  6. image: nginx
  7. logging:
  8. driver: "json-file"
  9. options:
  10. max-size: "10m"
  11. max-file: "10"
  12. # links:
  13. # - DZ-service
  14. ports:
  15. - 28089:28089
  16. volumes:
  17. - ./config/nginx.conf:/etc/nginx/nginx.conf
  18. - ./dist:/usr/share/nginx/wwwroot/dist
  19. - ./log/nginxlog:/var/log/nginx
  20. postgis:
  21. restart: always
  22. image: postgis/postgis
  23. container_name: DZ-postgis
  24. privileged: true
  25. ports:
  26. - 5432:5432
  27. environment:
  28. POSTGRES_PASSWORD: "root"
  29. POSTGRES_USER: "postgres"
  30. POSTGRES_DB: "postgres"
  31. volumes:
  32. - ./data/postgis-data:/var/lib/postgresql/data
  33. logging:
  34. driver: "json-file"
  35. options:
  36. max-size: "10m"
  37. max-file: "10"
  38. mysql:
  39. container_name: DZ-mysql # 指定容器的名称
  40. restart: always
  41. image: mysql:8.0 # 指定镜像和版本
  42. ports:
  43. - "13306:3306"
  44. environment:
  45. MYSQL_ROOT_PASSWORD: "root"
  46. volumes:
  47. - ./data/mysql-data/data:/var/lib/mysql
  48. # - ./config/my.conf:/etc/mysql/my.cnf
  49. redis:
  50. image: redis
  51. container_name: DZ-redis
  52. restart: always
  53. command: redis-server /usr/local/etc/redis/redis.conf
  54. ports:
  55. - "6379:6379"
  56. volumes:
  57. - ./data/redis-data:/data
  58. - ./config/redis.conf:/usr/local/etc/redis/redis.conf

3.使用 Compose 命令构建和运行您的应用

在测试目录中,执行以下命令来启动应用程序:
docker-compose up
如果你想在后台执行该服务可以加上 -d 参数:
docker-compose up -d

8.jar包通过Dockerfile做成镜像运行

一.操作步骤

  1. 在自己电脑打包出jar
  2. 传到远程服务器,新建一个文件夹,把jar包放进去
  3. 在jar包同一文件夹下创建Dockerfile文件
  1. FROM openjdk:8u332-jdk-oracle
  2. #把文件夹内的jar复制到容器中,重命名为wdcloud.jar
  3. ADD wdcloud-docker.jar wdcloud.jar
  4. # 将外部配置文件复制到容器
  5. COPY ./config /home/dance/config
  6. # ENTRYPOINT 执行项目 app.jar及外部配置文件,多个配置文件逗号隔开
  7. ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/home/dance/config/application.properties" ,"wdcloud.jar"]
  1. 在jar包所在目录创建镜像

    1. docker build -t testimage:1.0 .

    最后一个点表示Dockerfile的位置,即当前文件夹注意镜像名不能有大写**

  2. 根据镜像创建容器并运行

    1. docker run -itd --name dance-cloud-con -p 20011:10307 -v /data/dance/images/config:/home/dance/config dance-cloud:1.0

    —name dance-cloud-con(容器名称)
    -p 20011:10307 20011(对外访问端口) 10307(配置文件内定义的服务使用端口)
    -v /data/dance/images/config:/home/dance/config /data/dance/images/config(外部配置文件所在文件夹的绝对路径)
    dance-cloud:1.0 镜像名称:版本号

  3. 将镜像导出 (参考上述导入导出镜像)

    二.辅助命令

  • docker logs -f 容器名 实时查看容器日志
  • docker rm -f 容器名 删除容器
  • docker rmi -f 镜像名 删除镜像