docker 发布方式尝试
docker 发布方式尝试
目前有个小项目, 尝试用docker的方式来发布, 项目只有一个节点, 使用 kubenate 有点小题大做, 所以采用docker-compose来发布.
发布过程
GIT --> build --> publish
发布中的注意点
GIT 版本号(tag/commit)
- 从git命令生成
# git tag
GIT_TAG=`git describe --tags`
IFS='-' read -r -a tags <<< $GIT_TAG
if [ "${#tags[@]}" = "1" ]; then
GIT_COMMIT=$tags
else
GIT_COMMIT=`git rev-parse HEAD | cut -c 1-8`
fi
- 通过
docker build的 --build-arg 参数传入
docker build -f /path/to/Dockerfile -t app_name --build-arg VERSION=${GIT_COMMIT} .
- dockerfile 中可以得到此变量
VERSION
ARG VERSION=no-version # 如果没有赋值, 默认值是 no-version
- build image 的时候, 可以将此变量注入到前端页面上
build 和 publish 的 image 区别
通过 docker 发布应用的过程, 一般需要2个image.
一个用来build应用, 一个用来发布应用
比如, 发布一个前端工程, build时需要 nodejs 的环境, 但是发布后只要 nginx 环境即可. 这时, Dockerfile 可以这样写:
FROM node:10-alpine as builder
WORKDIR /build
ADD ./myapp .
RUN yarn
RUN yarn build
FROM nginx:1
COPY --from=builder /build/build /app/static
RUN gzip -r /app/static
RUN touch /app/static/index.html
ADD /path/to/my-nginx.conf /etc/nginx/nginx.conf
这样, 可以让发布的镜像尽可能的小.
image build之后的清理
每次image发布之后, 都会残留一些过程中产生的image, 可以在build完成之后, 通过如下命令清理:
docker image prune -f
docker-compose 环境变量配置
对于简单的应用, image 发布之后, 可以通过 docker-compose 来启动看看发布的效果.
docker-compose.yml 同级目录下新建 .env 文件, 可以控制docker-compose启动中的环境变量.
.env 示例:
COMPOSE_PROJECT_NAME=app-name
SERVER_PORT=8080
STAGE=dev
docker-compose.yml 示例:
version: '3'
services:
myapp:
image: myapp:latest
# restart: always
ports:
- '8080:8080'
environment:
SERVER_PORT: $SERVER_PORT
STAGE: $STAGE
发布脚本示例
#!/bin/bash
#set -x
#******************************************************************************
# @file : dev.deploy.sh
# @author : wangyubin
# @date : 2018-11-15 9:24:11
#
# @brief : auto build deploy dev version
# history : init
#******************************************************************************
function usage() {
echo "dev.deploy.sh [-a/-v/-h]"
echo "OPTIONS: "
echo " -a: app name"
echo " -v: docker image version (v2.1.1, v2.2-test)"
echo " -h: this help infomation"
echo ""
echo "SAMPLES:"
echo " dev.deploy.sh -h"
echo " dev.deploy.sh -a myapp -v v2.1.2"
}
declare APP
declare IMAGE_VERSION
declare GIT_COMMIT
while getopts "a:v:h" arg
do
case $arg in
a)
APP=$OPTARG
;;
v)
IMAGE_VERSION=$OPTARG
;;
h)
usage
exit 0
;;
esac
done
# image version
if [ "$IMAGE_VERSION" = "" ]; then
IMAGE_VERSION=latest
fi
# git tag
GIT_TAG=`git describe --tags`
IFS='-' read -r -a tags <<< $GIT_TAG
if [ "${#tags[@]}" = "1" ]; then
GIT_COMMIT=$tags
else
GIT_COMMIT=`git rev-parse HEAD | cut -c 1-8`
fi
# kill docker compose
docker-compose down
# start build images
echo "--------------------------------"
echo "APP: $APP"
echo "VERSION: $IMAGE_VERSION"
echo "CODE_VERSION: $GIT_COMMIT"
echo "--------------------------------"
docker build -f /path/to/Dockerfile -t ${APP}:${IMAGE_VERSION} --build-arg VERSION=${GIT_COMMIT} .
docker image prune -f
sleep 2
# recreate docker compose
docker-compose up -d
docker 发布方式尝试的更多相关文章
- Docker + .NET Core(三)-两种发布方式
原文:Docker + .NET Core(三)-两种发布方式 第一种,自己手写dockerfile发布,上传至hubDocker 正常发布到文件夹中,发布文件上传至linux机器上.如 /www/a ...
- Docker存储方式选型建议
转自:https://segmentfault.com/a/1190000007168476 第一部分 问题诊断 事情从一次实施项目说起,我们需要帮助客户将他们的应用容器化并在数人云平台上发布此应用. ...
- .NET Core使用skiasharp文字头像生成方案(基于docker发布)
一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸 ...
- asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器
文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...
- 前端scss的使用及gulp发布方式
如标题所述,这篇博文是说scss以及gulp发布方式: 如果你没用过scss和gulp或不甚了解,你可以看看这篇博文,叙说的水平有限,各位看官大神见谅: 说scss之前,先来说说sass,sass是一 ...
- Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)
Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个 ...
- Docker 发布 Abp net core web 服务
Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...
- docker使用方式
docker使用方式安装:1.安装依赖 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 2添加yum源 yum-conf ...
- 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)
汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai Python3 与 C# 基础语法对比:https://www.cnblogs.com/ ...
随机推荐
- 【转载】Sqlserver数据库备份的几种方式
在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...
- NLP第八条
今日!我虽啥也没干,但我还是有着学习的心的~ 也许是“遵义会议”呢 那也说不定 留下这句话再说 哈哈哈哈哈哈 只能抄抄NLP第八条了 谁叫我选了个灰常有意义的通识课咧 八,每一 ...
- winform 实现类似于TrackBar的自定义滑动条,功能更全
功能很全,随便列几个 1.可以设置滑块的大小,边框颜色.背景色.形状等等吧 2.可以设置轨道的方向.边框颜色.背景色.阴影等等 ... 效果图: 下载链接https://download.csdn.n ...
- SLA服务可用性怎么达到?
SLA:服务等级协议(简称:SLA,全称:service level agreement).是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定.通常这个开销是驱动提供服 ...
- PHP全栈学习笔记11
连接MySQL mysql_connect(servername,username,password); 面向对象: <?php $servername = "localhost&qu ...
- 知识小罐头04(idea+maven+部署war包到tomcat 下)
上一节新建了一个基本的maven web环境,现在最快速度新建一下springmvc环境! 1.最快搭建springmvc环境 什么叫做最快,当然是怎么简单怎么来啦!由于内容都是很熟悉的东西,serv ...
- DotNetCore跨平台~聊聊中间件
回到目录 在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方 ...
- Flink从入门到放弃(入门篇1)-Flink是什么
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...
- XPath和CssSelector定位总结
1. 介绍XPath和CssSelector 2. XPath有哪些方式 2.1 通过XPath语法 2.2 Contains关键字 2.3 Start-With 2.4 Or和And关键字 2.5 ...
- .NetCore WebAPI采坑之路(持续更新)
1.WebAPI新增日志过滤器or中间件后Action读取到的请求Body为空问题 案例: 自定义了一个中间件,用于记录每次访问webapi的入参,以及引用了Swagger. 先看下面这段代码: pu ...