BlueXIII's Blog

热爱技术,持续学习

概述

使用spotify的dockerfile maven插件,可以帮助我们将maven与docker进行集成,更快速的在maven构建过程中进行docker镜像的打包操作。
配置仍然是基于Dockerfile的,插件只是辅助。

请注意,插件的名称是 spotifydockerfile-maven-plugin ,而非 docker-maven-plugin

详情可访问 github页面

准备工作

首先准备一个spring-boot工程,假设工程名为playground。另外本机需要安装docker,过程都不再赘述。
本文平台为macOS12,docker在不同平台下可能有所差异。

由于dockerhub访问较慢,可以用$$先自行搭建一个socks5代理来加速访问。代理不是必须的。

1
export ALL_PROXY=socks5://xx.xx.xx.xx:xx

建立Dockerfile

在工程目录下新建一个Dockerfile,基于openjdk的镜像:

1
2
3
4
5
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/playground-1.1.0.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

使用docker命令构建镜像

在使用Maven插件之前,可以试着先用docker命令来进行打包:

1
docker build -t="yourname/playground:latest" .

查看镜像是否生成:

1
docker images

然后可以使用docker push推送镜像:

1
docker push yourname/playground

编辑pom.xml

测试通过后,就可以在pom.xml中添加spotify插件了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<properties>
<docker.image.prefix>yourname</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.4</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
</configuration>
</plugin>
</plugins>
</build>

另外还可以添加一个execution,在maven的install生命周期自动进行build和push。

1
2
3
4
5
6
7
8
9
10
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>

使用插件构建镜像

1
mvn install dockerfile:build

使用插件推送镜像

在使用dockerfile-maven-plugin推送前,需要先编辑一下~/.docker/config.json,添加用户名及密码,否则会报认证失败。

1
2
3
4
5
6
7
8
9
{
"auths": {
"https://index.docker.io/v1/": {
"Username": "xxxxxx",
"Secret": "xxxxxx"
}
},
"credsStore": "osxkeychain"
}

然后直接运行即可:

1
mvn dockerfile:push

运行镜像

最后,可以使用docker run命令可以将镜像启动,在浏览器中查看一下运行情况

1
docker run -p 8080:8080 -t yourname/playground

使用docker logs简单查看日志

1
2
docker ps
docker logs f4d7e737f47f

概述

ZEN-SC-SAMPLE:SpringCloud常用组件示例。

源码

更多源码,请移步GitHub:
https://github.com/xiiiblue/zen-sc-sample

启动方式

Docker方式启动

1
2
mvn clean package
docker-compose up

手工方式启动

添加DNS

1
2
3
4
vi /etc/hosts
127.0.0.1 zen-eureka
127.0.0.1 zen-zipkin
127.0.0.1 zen-config

在每个模块下分别执行

1
mvn spring-boot:run

组件清单

  • hystrix - 服务降级与融断
  • feign - 声明式REST调用
  • eureka - 服务注册与发现
  • ribbon - 客户端负载均衡
  • config-server - 配置中心
  • zuul - API网关
  • turbine - 监控聚合
  • hystrix-dashboard - Hystrix面板
  • sleuth - 服务跟踪
  • zipkin - 调用链跟踪

未包含组件

  • ELK

URLs

其它说明

刷新配置

1
curl -X POST http://localhost:8080/refresh

地址

https://12factor.net/zh_cn

简介

12-Factor 为构建如下的 SaaS 应用提供了方法论:
使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

目录

I. 基准代码
一份基准代码,多份部署
II. 依赖
显式声明依赖关系
III. 配置
在环境中存储配置
IV. 后端服务
把后端服务当作附加资源
V. 构建,发布,运行
严格分离构建和运行
VI. 进程
以一个或多个无状态进程运行应用
VII. 端口绑定
通过端口绑定提供服务
VIII. 并发
通过进程模型进行扩展
IX. 易处理
快速启动和优雅终止可最大化健壮性
X. 开发环境与线上环境等价
尽可能的保持开发,预发布,线上环境相同
XI. 日志
把日志当作事件流
XII. 管理进程
后台管理任务当作一次性进程运行

12-factor应用本身从不考虑存储自己的输出流。 不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。

解决Ubuntu无法识别Android手机的问题

  1. 安装mtp相关的包:
1
sudo apt-get install libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9
  1. 查看手机的USB信息
    执行:
1
lsusb

记录下新增的一条USB设备的信息,以坚果Pro1为例:

1
Bus 002 Device 011: ID 29a9:7020  
  1. 编辑69-libmtp.rules
1
sudo vi /lib/udev/rules.d/69-libmtp.rules

新增一行:

1
ATTR{idVendor}=="29a9", ATTR{idProduct}=="7020", SYMLINK+="libmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"

注意替换掉其中的idVendor和idProduct

从启动U盘制作ISO镜像

1
sudo dd if=/dev/sdx of=/path/to/new.iso

从ISO镜像制作启动U盘

1
sudo dd if=/path/to/iso of=/dev/sdx

修改sansserif.conf

1
2
3
sudo cp /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak

sudo vi /etc/fonts/conf.d/49-sansserif.conf

倒数第4行:

1
<string>sans-serif</string>

改为

1
<string>sans</string>

其它相关操作

查看所有字体

1
fc-list

查看中文字体

1
fc-list :lang=zh-cn

下载地址

http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

选择:
Instant Client for Linux x86-64

下载以下两个ZIP包:

  • instantclient-basic-linux.x64-12.2.0.1.0.zip
  • instantclient-sqlplus-linux.x64-12.2.0.1.0.zip

解压安装

1
2
3
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
sudo mv instantclient_12_2 /opt/instantclient

环境变量

1
2
3
4
export ORACLE_HOME=/opt/instantclient
export LD_LIBRARY_PATH=/opt/instantclient
export TNS_ADMIN=/opt/instantclient
export PATH=$PATH:/opt/instantclient

Snap简介

Ubuntu 16.04引入了snap包管理,它是一种全新的软件包安装管理方式。它和dpkg/apt有本质的区别。
Snap的安装包扩展名是.snap,类似于一个容器,它包含一个应用程序需要用到的所有文件和库(snap包包含一个私有的root文件系统,里面包含了依赖的软件包)。它们会被安装到单独的目录;各个应用程序之间相互隔离。使用snap有很多好处,首先它解决了软件包的依赖问题;其次,也使应用程序更容易管理。

Snap安装

1
2
sudo apt update
sudo apt install snapd

Snap常用命令

1
2
3
4
5
6
snap list # 列出已安装
snap find # 查询
snap find app_name # 查询
sudo snap install app_name # 安装
sudo snap refresh john-the-ripper # 升级
sudo snap remove john-the-ripper # 御载

使用Snap安装Electronic微信

1
sudo snap install  electronic-wechat

参考文档

https://docs.snapcraft.io/core/install-ubuntu
https://www.zhihu.com/question/47514122
http://blog.topspeedsnail.com/archives/4733

0%