参考 华为cse(CloudServiceEngine,slogon是省心运维多语言又开源) github.com/huaweicse/s…
.dockerignore
/node_modules
Host中的settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
jenkins 的 docker-compose.yml
version: '3'
services:
jenkins:
image: jenkins/jenkins:latest
container_name: cicd-jekins
ports:
- 19527:8080
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
- /root/jenkins/BRIDGE:/SRC
其中/var/run/docker.sock的属性为777
container jenkins 中编译 java11
docker run -it --rm --name my-maven-project -v "/root/jenkins/BRIDGE/":/usr/src/mymaven -v "$HOME/.m2":/root/.m2 -w /usr/src/mymaven/{projectname} maven:3.6.3-jdk-11 mvn clean package
Dockerfile 之 jdk8
#For springboot project
FROM openjdk:8-jdk-alpine
VOLUME /tmp
MAINTAINER ElonMuscle
#COPY jdk1.8.0_172 jdk1.8.0_172
#
ADD xxx-0.0.1-SNAPSHOT.jar xxx-0.0.1-SNAPSHOT.jar
# env
#ENV JAVA_HOME=/jdk1.8.0_172
#ENV PATH=$JAVA_HOME/bin:$PATH
#ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPOSE 8300
ENTRYPOINT ["java", "-jar", "/xxx.jar"]
Dockerfile 之 jdk11
FROM alpine:latest as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
# build minimal JRE
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink --verbose --add-modules java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument \
--compress 2 --strip-debug --no-header-files --no-man-pages --release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE" \
--output "$JAVA_MINIMAL"
FROM alpine:latest
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY yourapp.jar app.jar
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.jar"]
Dockerfile 之 frontend
用到了下文中的nginx.conf
#For Vue project
# node镜像
FROM node:alpine as build-stage
#RUN apk update && apk add yarn python g++ make && rm -rf /var/cache/apk/*
# RUN apk update && apk add python make && rm -rf /var/cache/apk/*
# RUN apk --no-cache add --virtual native-deps \
# g++ gcc libgcc libstdc++ linux-headers make python && \
# npm install --quiet node-gyp -g &&\
# npm install --quiet && \
# apk del native-deps
# 指定接下来的工作路径为/app - 类似于cd命令
WORKDIR /app
COPY package*.json ./
# # 设置淘宝npm镜像
#RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
#RUN npm config set registry http://registry.npm.taobao.org/
# RUN npm install -g node-pre-gyp@0.10.0
# # 安装依赖
#RUN cnpm
RUN npm install
# # 拷贝前端项目到app目录下
COPY . .
# # build app for production with minification
RUN npm run build
# # 打包 - 目的:丢到nginx下跑
# RUN cnpm run build
# 前端项目运行命令
# CMD ["npm","run","start"]
# # ======================== 上:npm打包 下:nginx运行 ========================
# # nginx镜像
# FROM nginx as production-stage
# # 移除nginx容器的default.conf文件、nginx配置文件
# RUN rm /etc/nginx/conf.d/default.conf
# RUN rm /etc/nginx/nginx.conf
# # # 把主机的nginx.conf文件复制到nginx容器的/etc/nginx文件夹下
# COPY ./nginx.conf /etc/nginx/
# # 拷贝前端vue项目打包后生成的文件到nginx下运行
# COPY --from=build-stage /app/dist /usr/share/nginx/html
# # # 暴露800端口
# EXPOSE 8400
# # 注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
# # RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
# # 使用daemon off的方式将nginx运行在前台保证镜像不至于退出
# CMD ["nginx", "-g", "daemon off;"]
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# include /etc/nginx/conf.d/*.conf;
upstream apiservice {
server 192.168.1.200:80;
}
#upstream frontend {
# server 192.168.1.100:80;
#}
server {
listen 8400;
charset utf-8;
# start ---------------------------------------------------------------------------------------------
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
#location / {
# /usr/share/nginx/html;
# index index.html;
# }
location /web/ {
# # autoindex on;
# # alias /usr/share/nginx/html;
# # index index.html;
proxy_pass http://frontend/; # 注意和 proxy_pass http://frontend; 的区别
}
location ~^/api/[^\/]+/[^\/]+ {
rewrite ^(/api)(.*)$ $2 break;
proxy_pass http://apiservice;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# end ---------------------------------------------------------------------------------------------
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
部署本地registry仓库
docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/docker_imgs:/var/lib/registry registry:latest 修改仓库通讯方式https为http 增加deamon.json文件配置
$ vim /etc/docker/daemon.json
{
"insecure-registries":["xxx.xxx.xxx.xxx:5000"]
}
重启服务
$ systemctl daemon-reload
$ systemctl restart docker
docker-compose.yml
用于调用镜像制作和容器运行的管理脚本
version: "3"
services:
xxx:
build:
dockerfile: Dockerfile
context: .
image: xxx
#container_name: xxx
# restart: always
# build: .
environment:
TZ: Asia/Shanghai
ports:
- "8400:8400"