springcloud程序部署及其优化(之本地jdk映射运行jar包,之jdk镜像上传私服)

在docker中使用MySQL
alpine中没有bash,只有sh
进入容器内

docker exec -it 容器的ID bash

官方MySQL镜像的使用
https://hub.daocloud.io/repos/fa51c1d6-9dc2-49d9-91ac-4bbfc24a1bda

1.从私服下载镜像,私服地址为(docker-registry:5000/mysql:5.7.26)

docker pull docker-registry:5000/mysql:5.7.26

2.创建/root/docker/mysql目录并进入

3.创建三个文件:

config:存放配置文件----用于映射—>/etc/mysql/conf
data:存放数据内容-----用于映射---->/var/lib/mysql
initdb:存放初始化脚本–用于映射—>docker-entrypoint-initdb.d

4.上传spring-cloud-01上传到initdb中

5. 在 config 中创建 my.conf 并填入以下内容

设置MySQL的编码格式为utf-8

		[client]        
        default-character-set=utf8mb4
        
        [mysqld]  
        character-set-client-handshake = FALSE
        character-set-server = utf8mb4 
        collation-server = utf8mb4_unicode_ci
 
        [mysql]
        default-character-set=utf8mb4

6.启动容器

docker run -d --net=host -p 3306:3306 -v /root/docker/mysql/config/my.conf:/etc/mysql/conf.d/my.conf -v /root/docker/mysql/data:/var/lib/mysql -v /root/docker/mysql/initdb:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_ROOT_HOST=% docker-registry:5000/mysql:5.7.26

后台执行:
网络链接方式:–net=host 容器的IP设置为宿主机的IP(CONTAINER_IP = DOCKER_HOST_IP)
一个端口映射:
3306:3306
三个目录映射:
/root/docker/mysql/config/my.conf:/etc/mysql/conf.d/my.conf
/root/docker/mysql/data:/var/lib/mysql
/root/docker/mysql/initdb:/docker-entrypoint-initdb.d
两个环境变量:
MYSQL_ROOT_PASSWORD=123456
-e MYSQL_ROOT_HOST=%
镜像名字
docker-registry:5000/mysql:5.7.26

7. 制作 eureka-server 和 auth 镜像并启动

docker run -d --net=host -p 8761:8761 eureka-server
docker run -d --net=host -p 8904:8904 auth
查看内存

free -m

依次启动所有服务,会发现每一个服务所占的内存都非常大,接下来我们删除所有镜像进行优化(mysql除外)

docker中的网络:
docker network ls查看所有网络配置

[root@master config]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a8101a2dc549        bridge              bridge              local
be5432c37489        host                host                local
c651f87a1f84        none                null                local

bridge每个容器使用独立的网络,默认–link NAMES1:NAMES2 指定当前容器需要和 NAMES1 容器通信在当前容器内使用 NAMES2 代替 NAMES1 容器的 IP
host每个容器共享宿主机的网络
none无网络

构建使用宿主机 jdk 软件的镜像:

1. 在宿主机安装 jdk 软件

2. 制作 zhangfan/jdk 镜像

创建并进入cd zhangfan/jdk/创建Dockerfile文件,并编辑文件如下:

#基于alpine-glibc进行二次开发
FROM docker-registry:5000/alpine-glibc

#维护者和联系方式
MAINTAINER ZhangFan 2868508839@ww.com

#使用root用户执行命令
USER root

#设置需要映射到宿主机的目录
VOLUME ["usr/local/jdk"]

#配置JAVA_HOME环境变量
ENV JAVA_HOME=/usr/local/jdk

#配置PATH环境变量
ENV PATH $PATH:$JAVA_HOME/bin

#在容器启动时输出jdk版本号
ENTRYPOINT java -version

3. 使用 zhangfan/jdk 生成新的镜像名字叫做 docker-registry:5000/zhangfan/jdk

docker tag zhangfan/jdk docker-registry:5000/zhangfan/jdk

4. 推送镜像到仓库

docker push docker-registry:5000/zhangfan/jdk

5. 查看仓库镜像列表,验证是否推送成功

使用 maven 插件打包镜像:

  1. 开启 docker 的远程访问
    1.1 编辑配置文件:
vi /usr/lib/systemd/system/docker.service

将 ExecStart 这一行后面加上-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock如:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

1.2. 刷新配置文件,重启 docker

systemctl daemon-reload
systemctl restart docker

1.3使用宿主机 IP 验证是否配置成功 (宿主机IP访问网址)
http://DOCKER_HOST_IP:2375/info

  1. 为 windows 添加系统环境变量
    key: DOCKER_HOST
    value: tcp://DOCKER_HOST_IP:2375
    在这里插入图片描述

  2. 重启 idea 使用新的环境变量

    因为每个项目都要打包,所在要在项目最外层的 POM 文件进行配置

  3. 在最外层 POM中的properties 标签中添加打包后镜像的仓库

<!--打包到服务器后,仓库名的前缀-->
<docker.image.prefix>teacher/spring-cloud-01</docker.image.prefix>
  1. 在最外层 plugins 标签中添加 docker 打包插件
			<!--添加打包插件(打包到服务器)-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                 <!--自己设置的前缀/项目名-->
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <!--默认版本号-->
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
  1. reimoprt 下载插件

  2. 在每一个子项目根目录下创建 Dockerfile 文件

FROM docker-registry:5000/zhangfan/jdk

MAINTAINER ZhangFan 2868508839@ww.com

USER root

EXPOSE 8904

ADD ./target/auth-1.0-SNAPSHOT.jar /root

ENTRYPOINT java -jar /root/auth-1.0-SNAPSHOT.jar
  1. 使用 package 打包镜像

映射到镜像
运行镜像

docker run -d --net=host -v /usr/local/jdk:/usr/local/jdk teacher/spring-cloud-01/eureka-server:1.0-SNAPSHOT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值