• linux搭建java部署环境-docker


    目录

    一. Docker环境

    二. JAVA环境安装

    三. MySQL安装

    四. Redis安装

    五. Nginx安装

    六.检查安装结果

    七. 创建maven仓库

    八. 项目打jar并发布

    九. nginx反向代理

    一. Docker环境

    1. 查看linux内核版本: uname -a

    2. 查看centos版本:  cat /etc/redhat-release

    3. 安装yum-utils:

    4. 为yum源添加docker仓库位置:

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    执行命令后:

     5. 安装docker

    yum install docker-ce
    

    执行命令之后:

    6. 启动docker

    systemctl start docker
    

    二. JAVA环境安装

    1. 安装jdk8

    docker pull java:8
    

    执行命令后:

    三. MySQL安装

    1. 下载MySQL5.7的docker镜像

    docker pull mysql:5.7
    

     执行命令后:

     2. 启动MySQL服务

    1. docker run -p 3306:3306 --name mysql \
    2. -v /mydata/mysql/log:/var/log/mysql \
    3. -v /mydata/mysql/data:/var/lib/mysql \
    4. -v /mydata/mysql/conf:/etc/mysql \
    5. -e MYSQL_ROOT_PASSWORD=root \
    6. -d mysql:5.7

    3. 进入运行MySQL的docker容器

    docker exec -it mysql /bin/bash
    

     查询docker已经有的镜像: docker ps -a

    启动已有的镜像:docker run -itd -P mysql:5.7 bash 

    4. 使用MySQL命令打开客户端

    mysql -uroot -proot --default-character-set=utf8mb4
    

     5. 创建测试数据库:

    create database wei_test character set utf8mb4 COLLATE = utf8mb4_unicode_ci;
    

     执行命令后:

     使用数据库, 创表, 查询, 插入数据, 查询:

     四. Redis安装

    1. 下载Redis6.0的docker镜像

    docker pull redis:6
    

     执行命令后:

     2. 启动Redis服务

    1. docker run -p 6379:6379 --name redis \
    2. -v /mydata/redis/data:/data \
    3. -d redis:6 redis-server --appendonly yes

    执行命令后:

     3. 查询正在运行的镜像:

    1. # 查询docker正在运行的镜像
    2. docker ps
    3. # 查询所有镜像:
    4. docker ps -a

    执行命令后:

    五. Nginx安装

    1. 下载Nginx1.14.1的docker镜像

    docker pull nginx:1.14.1
    

     执行命令后:

     2. 运行nginx容器

    1. docker run -p 80:80 --name nginx \
    2. -v /mydata/nginx/html:/usr/share/nginx/html \
    3. -v /mydata/nginx/logs:/var/log/nginx \
    4. -d nginx:1.14.1

    执行命令后:

     3. 将容器内的配置文件拷贝到指定目录

    docker container cp nginx:/etc/nginx /mydata/nginx/
    

    4. 修改文件名称

    1. cd /mydata/nginx/
    2. mv nginx conf

    5. 终止并删除容器

    1. docker stop nginx
    2. docker rm nginx

    执行命令后:

    6. 启动Nginx服务

    1. docker run -p 80:80 --name nginx \
    2. -v /mydata/nginx/html:/usr/share/nginx/html \
    3. -v /mydata/nginx/logs:/var/log/nginx \
    4. -v /mydata/nginx/conf:/etc/nginx \
    5. -d nginx:1.14.1

     执行命令后:

     六.检查安装结果

    查询运行中的docker的镜像:

     所有镜像文件(我这里多了个mysql待删除):

     七. 创建maven仓库

    1. 拉取nexus镜像

    docker pull sonatype/nexus3

     2. 创建挂载目录

    mkdir /usr/local/work/maven

     3. 赋予权限

    chmod 777 /usr/local/work/maven

    4. 运行nexus容器

    docker run -d -p 8081:8081 --name nexus -v /usr/local/work/maven:/var/nexus-data -e INSTALL4J_ADD_VM_PARAMS="-Xms256M -Xmx2048M -XX:MaxDirectMemorySize=2048M" sonatype/nexus3

    5. 查询nexus日志

    docker logs -f nexus

    6. 访问nexus首页

    ip:8081

     7. 登录

    用户名admin, 密码在docker容器中,我们得到容器中找 (nexus-data文件夹下一个叫xxx.admin-password的文件), 

    1. # 找到nexus正在运行的容器ID
    2. docker ps

    1. # 进入容器
    2. docker exec -it 65f4dbed29ce /bin/bash

    获取到了密码, 登录后修改密码, 为了安全, 最好禁用匿名访问;(设置仓库allow depoly)

    8. 新建repository

     设置阿里云maven仓库地址:

    http://maven.aliyun.com/nexus/content/groups/public/

    将新增的proxy仓库加入public中, 如果自己新增release和snapshot仓库, 注意verison policy,如果创建的snapshot的version policy选择的默认的release,那么depoly你的snapshot时就会失败;

     

     设置自己的setting.xml ---- (这个配置是个坑, 很多百度到的配置无法起作用, 注意: 如果nexus安装完成后,可以登录进去,但是idea无法使用这个maven仓库, 就是setting文件配置有问题了)

    1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    4. <localRepository>D:\repository_weilocalRepository>
    5. <pluginGroups>
    6. pluginGroups>
    7. <proxies>
    8. proxies>
    9. <servers>
    10. <server>
    11. <id>nexus-releasesid>
    12. <username>adminusername>
    13. <password>**********password>
    14. server>
    15. <server>
    16. <id>nexus-snapshotsid>
    17. <username>adminusername>
    18. <password>**********password>
    19. server>
    20. servers>
    21. <mirrors>
    22. <mirror>
    23. <id>centralid>
    24. <name>centralname>
    25. <mirrorOf>*mirrorOf>
    26. <url>http://**********:8081/repository/java-public/url>
    27. mirror>
    28. mirrors>
    29. <profiles>
    30. <profile>
    31. <id>my-nexusid>
    32. <properties>
    33. <altDeploymentRepository>nexus-releases::default::http://**********:8081/repository/java-release/altDeploymentRepository>
    34. <altReleaseDeploymentRepository>nexus-releases::default::http://**********:8081/repository/java-release/altReleaseDeploymentRepository>
    35. <altSnapshotDeploymentRepository>nexus-snapshots::default::http://**********:8081/repository/java-snapshot/altSnapshotDeploymentRepository>
    36. properties>
    37. <repositories>
    38. <repository>
    39. <id>centralid>
    40. <url>http://centralurl>
    41. <releases>
    42. <enabled>trueenabled>
    43. releases>
    44. <snapshots>
    45. <enabled>trueenabled>
    46. snapshots>
    47. repository>
    48. <repository>
    49. <id>thirdpartyid>
    50. <url>http://thirdpartyurl>
    51. <releases>
    52. <enabled>trueenabled>
    53. releases>
    54. <snapshots>
    55. <enabled>trueenabled>
    56. snapshots>
    57. repository>
    58. <repository>
    59. <id>thirdparty-snapshotsid>
    60. <url>http://thirdparty-snapshotsurl>
    61. <releases>
    62. <enabled>trueenabled>
    63. releases>
    64. <snapshots>
    65. <enabled>trueenabled>
    66. snapshots>
    67. repository>
    68. <repository>
    69. <id>springid>
    70. <url>http://springurl>
    71. <releases>
    72. <enabled>trueenabled>
    73. releases>
    74. <snapshots>
    75. <enabled>trueenabled>
    76. snapshots>
    77. repository>
    78. <repository>
    79. <id>jbossid>
    80. <url>http://jbossurl>
    81. <releases>
    82. <enabled>trueenabled>
    83. releases>
    84. <snapshots>
    85. <enabled>trueenabled>
    86. snapshots>
    87. repository>
    88. repositories>
    89. <pluginRepositories>
    90. <pluginRepository>
    91. <id>centralid>
    92. <url>http://centralurl>
    93. <releases>
    94. <enabled>trueenabled>
    95. releases>
    96. <snapshots>
    97. <enabled>trueenabled>
    98. snapshots>
    99. pluginRepository>
    100. <pluginRepository>
    101. <id>thirdpartyid>
    102. <url>http://thirdpartyurl>
    103. <releases>
    104. <enabled>trueenabled>
    105. releases>
    106. <snapshots>
    107. <enabled>trueenabled>
    108. snapshots>
    109. pluginRepository>
    110. <pluginRepository>
    111. <id>thirdparty-snapshotsid>
    112. <url>http://thirdparty-snapshotsurl>
    113. <releases>
    114. <enabled>trueenabled>
    115. releases>
    116. <snapshots>
    117. <enabled>trueenabled>
    118. snapshots>
    119. pluginRepository>
    120. <pluginRepository>
    121. <id>springid>
    122. <url>http://springurl>
    123. <releases>
    124. <enabled>trueenabled>
    125. releases>
    126. <snapshots>
    127. <enabled>trueenabled>
    128. snapshots>
    129. pluginRepository>
    130. <pluginRepository>
    131. <id>jbossid>
    132. <url>http://jbossurl>
    133. <releases>
    134. <enabled>trueenabled>
    135. releases>
    136. <snapshots>
    137. <enabled>trueenabled>
    138. snapshots>
    139. pluginRepository>
    140. pluginRepositories>
    141. profile>
    142. profiles>
    143. <activeProfiles>
    144. <activeProfile>my-nexusactiveProfile>
    145. activeProfiles>
    146. settings>

    下载测试:

     最终本地设置的repository下载了新的jar;

    发布测试:

     release版本发布::

     snapshot版本发布:

    八. 项目打jar并发布

    1. 使用springboot打包插件, 最新pom依赖:

    1. <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <parent>
    5. <groupId>org.springframework.bootgroupId>
    6. <artifactId>spring-boot-starter-parentartifactId>
    7. <version>2.3.4.RELEASEversion>
    8. <relativePath/>
    9. parent>
    10. <groupId>com.weigroupId>
    11. <artifactId>zpieceartifactId>
    12. <version>0.0.1-SNAPSHOTversion>
    13. <name>zpiecename>
    14. <description>zpiece burningdescription>
    15. <properties>
    16. <java.version>1.8java.version>
    17. <maven.compiler.source>8maven.compiler.source>
    18. <maven.compiler.target>8maven.compiler.target>
    19. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    20. <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
    21. <maven.compiler.encoding>UTF-8maven.compiler.encoding>
    22. properties>
    23. <dependencies>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-webartifactId>
    27. dependency>
    28. <dependency>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-starter-testartifactId>
    31. <scope>testscope>
    32. dependency>
    33. <dependency>
    34. <groupId>junitgroupId>
    35. <artifactId>junitartifactId>
    36. <version>4.12version>
    37. dependency>
    38. <dependency>
    39. <groupId>mysqlgroupId>
    40. <artifactId>mysql-connector-javaartifactId>
    41. <scope>runtimescope>
    42. dependency>
    43. <dependency>
    44. <groupId>com.alibabagroupId>
    45. <artifactId>druidartifactId>
    46. <version>1.1.10version>
    47. dependency>
    48. <dependency>
    49. <groupId>org.mybatis.spring.bootgroupId>
    50. <artifactId>mybatis-spring-boot-starterartifactId>
    51. <version>2.0.1version>
    52. dependency>
    53. <dependency>
    54. <groupId>org.springframework.bootgroupId>
    55. <artifactId>spring-boot-starter-tomcatartifactId>
    56. <scope>providedscope>
    57. dependency>
    58. <dependency>
    59. <groupId>com.alibabagroupId>
    60. <artifactId>fastjsonartifactId>
    61. <version>1.2.15version>
    62. dependency>
    63. <dependency>
    64. <groupId>org.apache.commonsgroupId>
    65. <artifactId>commons-lang3artifactId>
    66. <version>3.5version>
    67. dependency>
    68. <dependency>
    69. <groupId>org.projectlombokgroupId>
    70. <artifactId>lombokartifactId>
    71. <optional>trueoptional>
    72. dependency>
    73. <dependency>
    74. <groupId>org.xmlunitgroupId>
    75. <artifactId>xmlunit-coreartifactId>
    76. dependency>
    77. <dependency>
    78. <groupId>org.springframeworkgroupId>
    79. <artifactId>spring-aopartifactId>
    80. dependency>
    81. <dependency>
    82. <groupId>org.aspectjgroupId>
    83. <artifactId>aspectjweaverartifactId>
    84. <version>1.8.13version>
    85. dependency>
    86. dependencies>
    87. <build>
    88. <plugins>
    89. <plugin>
    90. <groupId>org.springframework.bootgroupId>
    91. <artifactId>spring-boot-maven-pluginartifactId>
    92. <executions>
    93. <execution>
    94. <goals>
    95. <goal>repackagegoal>
    96. goals>
    97. execution>
    98. executions>
    99. plugin>
    100. plugins>
    101. build>
    102. <repositories>
    103. <repository>
    104. <id>alimavenid>
    105. <url>https://maven.aliyun.com/repository/publicurl>
    106. repository>
    107. repositories>
    108. <pluginRepositories>
    109. <pluginRepository>
    110. <id>alimavenid>
    111. <url>https://maven.aliyun.com/repository/publicurl>
    112. pluginRepository>
    113. pluginRepositories>
    114. project>

    2. 使用idea工具打包完成:

     3. 上传到服务器中:

    4. 在data下新建Dockerfile文件:

    1. # 设置本镜像需要使用的基础镜像
    2. FROM java:8
    3. # 把jar包复制一份并改名
    4. ADD zpiece-0.0.1-SNAPSHOT.jar /app.jar
    5. # 镜像暴露的端口, 要注意映射端口, 最好和外界启动容器端口一致
    6. EXPOSE 6789
    7. # 容器启动命令
    8. ENTRYPOINT ["java","-jar","/app.jar"]
    9. # 设置时区
    10. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

    完成后的Dockerfile和jar处于同一个目目录下:

    5. 构建docker镜像:

    docker build -t zpiece .

    执行命令效果:

    6. 查看docker镜像:

    docker images

    效果:

    7. 启动

    1. docker run -p 6789:6789 --name zpiece \
    2. -v /mydata/zpiece/html:/usr/share/zpiece/html \
    3. -v /mydata/zpiece/logs:/var/log/zpiece \
    4. -d zpiece

     执行命令后:

     另外, 也可以设置--restart=always 表示docker容器在停止或服务器开机后会自动重新启动

    docker run -d --restart=always --name zpiece -p 8080:8080 zpiece
    

    8. 查看运行中的镜像:

    1. # 查询所有镜像,包括未运行的, docker ps就是仅查询运行中的镜像
    2. docker ps -a

     效果:

     9. 注意端口配置, docker容器启动的此端口和此服务设置的端口, 否则会连接不上;

    注意端口安全组配置, 可用docker curl 343.343.443.343:6789 测试:

     10. 测试:

    九. nginx反向代理

    待完善

    十. 删除重新生成jar应用

    1. 停用docker应用container

    docker stop zpiece

     

     2. 删除container:

    docker rm ewrewr3234343

    执行命令效果

     3. 删除镜像image:

    docker rmi sdfds343434

    执行代码效果
    ​​​​​​​

     4. 重新生成image

    docker build -t zpiece

     注意Dockerfile的内容:

    1. # 设置本镜像需要使用的基础镜像
    2. FROM java:8
    3. # 把jar包复制一份并改名
    4. ADD zpiece-0.0.1-SNAPSHOT.jar /app.jar
    5. # 镜像暴露的端口
    6. EXPOSE 6789
    7. # 容器启动命令
    8. ENTRYPOINT ["java","-jar","/app.jar"]
    9. # 设置时区
    10. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    11. # 设置语言环境
    12. ENV LC_ALL zh_CN.UTF-8

     5. 启动目标镜像

    1. docker run -p 6789:6789 --name zpiece \
    2. -v /mydata/zpiece/html:/usr/share/zpiece/html \
    3. -v /mydata/zpiece/logs:/var/log/zpiece \
    4. -d zpiece

    执行命令后:

     

  • 相关阅读:
    C++教程(2)
    软件测试V模型
    Spring Cloud OpenFeign系列:简介和使用
    k8s免费在线集群工具
    SpringCloud 组件Gateway服务网关【gateway快速入门】
    计算机毕业设计node+vue基于微信小程序的货物管理系统的设计与实现
    Dubbo是如何完成服务导出的?
    开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态
    java桌面程序
    一文了解Go语言的函数
  • 原文地址:https://blog.csdn.net/weixin_41564440/article/details/125930210