学习pinpoint的时候对Dockerfile有了更好的认识,趁热打铁赶紧总结。
#基础镜像,镜像基于这个jdk来打镜像
FROM openjdk:8-alpine3.9
#作者信息
MAINTAINER xxx
#修改镜像下载源 这个地址是国内的一个镜像源,下载速度比国外快
RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.11/main/" > /etc/apk/repositories
# 安装需要的软件,解决时区问题
RUN apk --update add curl bash tzdata && \
rm -rf /var/cache/apk/*
#修改镜像为东八区时间
ENV TZ Asia/Shanghai
#目录挂载到宿主机的根目录/tmp
VOLUME /tmp
#参数,执行docker的打镜像的时候传过来一个参数
ARG JAR_FILE
#把当前位置的jar文件拷贝到根目录的app.jar
COPY ${JAR_FILE} /app.jar
#把当前的pinpoint-agent/目录内容 拷贝到/opt/pinpoint下
COPY pinpoint-agent/ /opt/pinpoint
EXPOSE 8089
#探针已经拷贝到了 /opt/pinpoint 所以要执行这个命令,注意这个路径 是/opt/pinpoint
ENTRYPOINT java -javaagent:/opt/pinpoint/pinpoint-bootstrap-2.3.3.jar -Dpinpoint.agentId=jenkinsagent107-1 -Dpinpoint.applicationName=pinpointdemo1 -jar /app.jar
写Dockerfile的意思就是想让我们的代码打成镜像,然后使用镜像启动容器部署我们的项目
所以我们有了Dockerfile之后还要有基础镜像,代码,三者集齐即可达成镜像
拉取基础镜像:
docker pull openjdk:8-alpine3.9
代码打包,打包后去target下就能找到你的jar包
mvn clean package
注意,打jar包部署的时候,出过一个问题,提示缺少主清单文件,如果有这个问题的话,在你的项目pom文件加上这一段问题就解决了,我的是这样解决的,如果没出问题这一步可以忽略。
<!--打包jar包的名称并跳过单元测试-->
<build>
<!--指定打成jar宝之后的jar包名字-->
<finalName>pinpointdemo1</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--跳过单元测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
然后就可以开始打镜像了
docker build --rm -t tzy/pinpointdemo:1.0 --build-arg JAR_FILE=pinpointdemo1.jar .
解释:
--rm :打镜像的时候忽略过程
-t:后边就是大的镜像的名字
--build-arg:后边跟Dockerfile声明的参数和参数值
.:最后一个点代表当前目录执行Dockerfile
然后镜像就打好了:
镜像制作好后启动镜像,容器方式运行:
docker run -itd --name pinpointdemo1 -p 8089:8089 tzy/pinpointdemo1:1.0
解释:
-itd:后台执行
--name:给容器起个名
-p:宿主机端口和容器端口的映射
最后是一个镜像,根据这个镜像创建容器
这样你的代码就在容器中跑起来了
可以通过命令查看日志信息:
docker logs -f pinpointdemo1
解释:
-f:动态查看日志
pinpointdemo1:创建容器的时候给容器起的名字。
注意:上边的demo是没有使用数据库的,如果你的项目使用了数据库,还要部署mysql
1.拉取所需镜像:
docker pull mysql:5.6
在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
启动容器:
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
参数说明:
-
-p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
-
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
-
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
-
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
-
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
进入容器,操作mysql
docker exec –it c_mysql /bin/bash
使用外部机器连接容器中的mysql
就先到这吧。初学者写的有点啰嗦了