Dockerfile学习小结

学习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

 就先到这吧。初学者写的有点啰嗦了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值