1、程序需要前台运行

程序必须前台执行,如果是java进程的话  不要有nohup   或者使用service的方式进行后台运行

否则可能会出现频繁启动应用的问题

原因就是docker只能管理运行中的镜像的一个进程(所以没有特殊需要不要一个镜像执行后出现两个进行的现象,尽量使用k8s的pod来解决)

2、日志要前台打印

日志直接console前台输出即可,docker会自动收集stdout输出的日志。不要存在打两份日志的设置,比如一份file,一份console等。

3、配置文件最好放在镜像内或远程可读取,非必要不要进行卷挂载目录进行读取

有些程序的配置文件是外置的,运行包和配置文件没有在一个执行包中。

如果有以上情况可以将配置文件和运行包都包含在镜像当中。

如果有些配置文件需要在不同的环境下做出修改或更换,就需要对应用程序进行分别打镜像或者改造一下程序,使其只是远程获取配置文件。分别打镜像不太符合整个发布流程,因为分别打镜像包中间可能会有差异,造成生产和开发测试不同。

还有一种方法就是使用k8s的configmap的服务来解决对应读取文件的问题。

4、数据卷的使用

每个容器运行之后不管你有没有显示的指定创建数据卷,都会有一个临时卷的存在,来存储一些临时生成的文件

这些临时文件会随着容器的生命周期而变化

如果你直接指定创建了数据卷,一定要创建在共享存储里面

否则会出现容器漂移之后读不到数据的情况

这种服务就叫做“有状态”的服务,一般我们的服务要做到“无状态”的

如果你的服务是有状态的,可以借助k8s的statuefulset来实现,包括启动顺序和给服务编号等操作。

5、网络相关的注意事项(不要有创建网络相关的操作)

(我们几乎用不到)

要让docker内服务识别正确的网卡

6、dockerfile

这里我定义了一个springboot微服务对应的dockerfile文件用来打镜像包,不管你现在用什么方式最后本质上都是使用 dockerfile来打镜像的

(如果我们的上线流程不是一个人完成,那么不建议使用maven插件的形式进行打镜像包,因为运维或者测试人员很可能不懂你的maven文件也不能修改你的pom配置,这样可能会给后期维护造成麻烦。dockerfile是唯一知道生成镜像依据的文件,可以使用版本控制进行管理随着你的应用进行升级等。镜像是一个黑盒子可以在docker文件系统中使用它,但是他不是一个独立的文件。)

   

FROM com.cn/java:8-jdk-alpine-asla-shanghai-1-skyagent-3
VOLUME /tmp
ADD springcloud-zjs-example-mysql-0.0.1.jar app.jar
EXPOSE 11005
ENV JAVA_OPTS="" AGENT_SERVICE_NAME="default" AGENT_COLLECTOR_ADDRESS="10.10.6.79:11800"
ENTRYPOINT java -javaagent:/usr/local/skyagent/skywalking-agent.jar=agent.service_name=${AGENT_SERVICE_NAME},collector.backend_service=${AGENT_COLLECTOR_ADDRESS} ${JAVA_OPTS} -jar /app.jar

下面的链接是对上面文件的解释

  https://github.com/zygfengyuwuzu/docker-miscellaneous

这个dockerfile中设置了三个参数

JAVA_OPTS是jdk的参数,这个参数可以自己设置内存等jvm相关的优化

AGENT_SERVICE_NAME 是设置skywalking的名称

AGENT_COLLECTOR_ADDRESS 设置skywalking数据传输的地址

SpringBoot项目中的所有可配置项都是可调参数,不用特殊指定。

如果你不需要skywalking进行监控最后一句可以修改成下面这样,只保留jdk参数

        ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar

7、打镜像的一些问题

打包的时候将 dockerfile和jar包最好放在同一路径下

这样是比较容易指定要打进镜像中 文件的路径

不容易出错和误将不需要文件打进镜像的可能的

(可以将需要打进镜像的文件都放在一个目录文件夹中或者和dockerfile相同目录)

打镜像包最好使用一个服务器进行打包和上传,因为多次生成镜像本地会有缓存文件使用会非常快

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

对于怎么样实现集成自动化可以参考如下博客(这个博客是jenkins与docker swarm集成的例子,可以将swarm换成k8s,对应的插件换一下)

  https://www.cnblogs.com/zhyg/p/7845612.html

docker使用的一些需要注意事项的更多相关文章

  1. Docker for Window 数据库路径注意事项

    Windows和Linux的文件路径格式不同,以第一行为例的话要改为//D/work/fronent-api:/www //D:标识D盘,如果是其他盘,如F盘://F/

  2. Docker - 定制镜像

    Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...

  3. Mesos和Docker的集成

    摘要: 众所周知,Mesos全面支持Docker.但是这意味着什么呢?在命令行里运行docker run...就可以使用Docker了.还需要做什么?让我们一起研究下Mesos的高级特性——和Dock ...

  4. Docker 介绍及安装

    Docker介绍 Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). Docker基于go语言并遵从Apache2.0协议 ...

  5. Docker LNMP环境搭建

    原文地址:https://www.awaimai.com/2120.html 1 快速使用 2 安装docker和docker-compose 3 使用国内镜像仓库 4 目录说明 4.1 目录结构 4 ...

  6. docker 深入理解之cgroups

    cgroups 资源限制 cgroups 是什么 cgroups 最初名为process container,有Google工程师Paul Menage和Rohit Seth于 2006 年提出,后由 ...

  7. 从Docker容器内部,如何连接到本机的本地主机?

    原文 从Docker容器内部,如何连接到本机的本地主机? 编辑:如果您使用的是Docker-for-mac或Docker-for-Windows 18.03+,只需使用主机连接到您的mysql服务即可 ...

  8. Docker学习笔记(三):Dockerfile及多步骤构建镜像

    Dockerfile指令 官方文档地址:https://docs.docker.com/engine/reference/builder/ Dockerfile是一个文本格式的配置文件,其内容包含众多 ...

  9. Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题

    问题背景 通过 gitlab 容器创建了一个项目,想 clone 到本地,结果发现项目的 IP 地址是一串数字 问题排查 明明创建项目的时候,IP 地址还是正常的鸭! 再看看项目的 settings ...

随机推荐

  1. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_04-vuejs研究-vuejs基础-v-model指令

    <!DOCTYPE html> <html lang="en" xmlns:v‐on="http://www.w3.org/1999/xhtml&quo ...

  2. CockroachDB学习笔记——[译]CockroachDB是如何进行分布式原子事务的

    原文:How CockroachDB Does Distributed, Atomic Transactions 原文链接:https://www.cockroachlabs.com/blog/how ...

  3. shell变量默认值

    ${var:-string},${var:+string},${var:=string},${var:?string} 1. ${var:-string}和${var:=string}:若变量var为 ...

  4. 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)

    了解STM32F103ZET是高容量多管脚的芯片 了解SD读写线路图 了解SD的基地址 阅读STM32F10xx英文参考 SDIO那章,我们编写代码边看文档解析 建工程,打开包含所有包括外设库函数的样 ...

  5. SpringCloud 与 Dubbo区别

    总览   Dubbo SpringCloud 服务注册中心 Zookeeper Spring Cloud Netfix Eureka 服务调用方式 RPC REST API 服务监控 Dubbo-mo ...

  6. mysql中单个字段包含','转换成多条记录

    问题:把value中的值取出作为另外一个表的where条件时,必须把value中的用','分隔的每一个id截取出来 解决方法: ),) ) #本文参考自网络某文章,非原创

  7. Intel GPA + 夜神模拟器

    环境:Win10,Intel GPA 2019R2,Nox(夜神模拟器)6.2.8.3 记录下注意的事项 1. 夜神模拟器下载地址建议 : https://www.bignox.com/ 2. 先运行 ...

  8. 什么是sigmoid激活函数?

    上面我们讲了引入激活函数的意义,激活函数有多种,下面我们拿一种激活函数sigmoid来做示例,其他的类似.sigmoid函数表达式如下: ​ 它的函数曲线图是: ​ 看到上面的函数曲线图,可以看出是一 ...

  9. 利用先电云iaas平台搭建apache官方大数据平台(ambari2.7+hdp3.0)

    一.ambari架构解析 二.基础环境配置 以两台节点为例来组件Hadoop分布式集群,这里采用的系统版本为Centos7 1511,如下表所示: 主机名 内存 硬盘 IP地址 角色 master 8 ...

  10. Vmare虚拟机安装麻烦二三事

    1).如何把虚拟机完整的迁移到另一个磁盘空间 2).VMware启动时提示我已移动或我已复制该虚拟机 3).虚拟机上显示主ip地址网络信息不可用怎么解决 4).vmware15虚拟机安装mac os ...