docker 发布方式尝试

目前有个小项目, 尝试用docker的方式来发布, 项目只有一个节点, 使用 kubenate 有点小题大做, 所以采用docker-compose来发布.

发布过程

GIT --> build --> publish

发布中的注意点

GIT 版本号(tag/commit)

  1. 从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
  1. 通过 docker build 的 --build-arg 参数传入
docker build -f /path/to/Dockerfile -t app_name --build-arg VERSION=${GIT_COMMIT} .
  1. dockerfile 中可以得到此变量 VERSION
ARG VERSION=no-version  # 如果没有赋值, 默认值是 no-version
  1. 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 发布方式尝试的更多相关文章

  1. Docker + .NET Core(三)-两种发布方式

    原文:Docker + .NET Core(三)-两种发布方式 第一种,自己手写dockerfile发布,上传至hubDocker 正常发布到文件夹中,发布文件上传至linux机器上.如 /www/a ...

  2. Docker存储方式选型建议

    转自:https://segmentfault.com/a/1190000007168476 第一部分 问题诊断 事情从一次实施项目说起,我们需要帮助客户将他们的应用容器化并在数人云平台上发布此应用. ...

  3. .NET Core使用skiasharp文字头像生成方案(基于docker发布)

    一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸 ...

  4. asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器

    文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...

  5. 前端scss的使用及gulp发布方式

    如标题所述,这篇博文是说scss以及gulp发布方式: 如果你没用过scss和gulp或不甚了解,你可以看看这篇博文,叙说的水平有限,各位看官大神见谅: 说scss之前,先来说说sass,sass是一 ...

  6. Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)

    Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个 ...

  7. Docker 发布 Abp net core web 服务

    Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...

  8. docker使用方式

    docker使用方式安装:1.安装依赖 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 2添加yum源 yum-conf ...

  9. 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)

    汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai Python3 与 C# 基础语法对比:https://www.cnblogs.com/ ...

随机推荐

  1. AI应用开发实战 - 从零开始配置环境

    AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问:https://www.bilibili.com/video/av24421492/ 建议和反馈,请发送到 https://gith ...

  2. Android开发:文本控件详解——TextView(一)基本属性

    一.简单实例: 新建的Android项目初始自带的Hello World!其实就是一个TextView. 在activity_main.xml中可以新建TextView,从左侧组件里拖拽到右侧预览界面 ...

  3. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建

    更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...

  4. C++ 编程技巧笔记记录(持续更新)

    C++是博大精深的语言,特性复杂得跟北京二环一样,继承乱得跟乱伦似的. 不过它仍然是我最熟悉且必须用在游戏开发上的语言,这篇文章用于挑选出一些个人觉得重要的条款/经验/技巧进行记录总结. 文章最后列出 ...

  5. 【带着canvas去流浪】 (3)绘制饼图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四. hover高亮的实现思路 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:< ...

  6. 展开隐形的翅膀,WPR003N补完篇

    在上一回合要搞刷机!从它的尸体上踏过去!钢板云路由!WPR003N复活!成功启动OPENWRT中,笔者成功的让一个4年前主流芯片搭上OS的快船,留下一段佳话. 今天看着抽屉里的WPR003N,回忆它之 ...

  7. SQL Server 一列或多列重复数据的查询,删除(转载)

    转载来源:https://www.cnblogs.com/sunxi/p/4572332.html 业务需求 最近给公司做一个小工具,把某个数据库(数据源)的数据导进另一个数据(目标数据库).要求导入 ...

  8. Xamarin 开发Android应用简易教程(1)

    最近领导又安排了新的项目需求,只好学习学习如何在.net环境下开发APP(原来没有接触过App开发)! 1.安装VS2017移动应用开发模块. 2.使用VS2017,主要是便利,无需配置环境等一系列麻 ...

  9. jQuery(六)、事件

    1 页面载入 1.ready(fn) 当DOM载入完后绑定一个要执行的函数. 这是事件模块中最重要的一个函数,可以极大地提高web应用程序的响应速度. $(document).ready(functi ...

  10. nginx系列9:HTTP反向代理请求处理流程

    HTTP反向代理请求处理流程 如下图: