Dockerize控制依赖顺序应用

Dockerizing 一个应用是转化一个应用运行在 Docker 容器中的过程。虽然 dockering 大部分应用是简单的,但是这里每次都有一些问题围绕着工作。每次工作的时候有几个问题都需要待解决。

在 dockerization 时两个常见的问题是:

当它依赖于配置文件时,使得应用使用环境变量
发送应用日志到 STDOUT/STDERR,当它默认记录在 Docker 的文件系统

这篇文章介绍一个新工具:dockerize ,它简化了这两个常见的问题。

问题

配置
许多应用使用配置文件来控制它们怎么工作,不同的运行环境有不同的值。比如,对于一个开发环境的数据库连接细节将与生产环境的不同。类似的,API keys 和其他的敏感细节在不同环境将不同。

使用 docker 容器有几个方法可以处理这些环境变量的问题:

在镜像中嵌入所有的环境变量细节和使用一个控制环境变量变量来指出在运行时使用哪个文件。(比如:APP_CONFIG=/etc/dev.config)
在运行时,使用卷来挂载绑定配置文件的数据
使用封装脚本,使用工具像 sed 那些环境变量来修改配置数据
嵌入所有的环境变量细节是不理想的,因为环境变量的改变应该不需要重新构建一个镜像。它也缺少安全,因为敏感数据 API keys, login 证书等等,作为环境变量被存储在镜像中。私发一个开发环境可能会泄露生产环境细节。有些类型的细节在任何镜像中都应该避免的。
使用 volumes 保持这些细节在镜像外面,但会使得部署更复杂,因为你不仅部署镜像。你必须使配置文件的变更和镜像协调。

注入环境变量到普通文件中也不是重要的。你可能有时会制作一个 sed 命令或写一些普通的脚本给它,但这是重复性的工作。这确实产生了一个镜像,但在 Docker 生态系统中工作的很好。

Logging
Docker 容器日志记录到 STDOUT 和 STDERR 更容易故障排解,监控和融入一个中央日志系统。日志可以通过 docker logs 命令和 Docker 日志 API 调用来直接访问。这也有许多工具可以自动拉取 docker 日志和运送它们如果日志记录进 STDOUT 和 STDERR。

不幸地是,默认,许多应用日志记录一个或多个文件到文件系统上。虽然这通常可以围绕工作,计算出每个应用的日志配置的细微差别是乏味的。

使用 Dockerize

dockerize 是一个小型的 Golang 应用,可以通过以下简化 dockerization 过程:

1.在启动时使用模板生成配置文件和容器环境变量
2.tail 任意的日志文件到 STDOUT 和 STDERR
3.启动一个进程,运行在容器里面

一个示例
在解决服务依赖问题上使用dockerize:
在docker-compose.yaml各个服务的command中的配置如下:

command: ["dockerize", "-wait", "tcp://zookeeper:2181", "-wait", "tcp://mysql:3306", "-wait", "http://apphost:8080", "-timeout", "1800s", "/usr/bin/supervisord"]

选项说明:

-wait <protocol://host:port> 

-wait 参数可以添加多个,代表依赖多个服务

-timeout 1800s

-timeout 后面跟持续等待的秒数,默认是10秒

最后一个命令是各依赖服务准备好之后要执行的命令,也就是当前应用启动的命令

支持的协议有:file, tcp, tcp4, tcp6, http, https and unix

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。使用 Docker 部署 VitePress,一个由 Vue.js 驱动的静态网站生成器,可以让你轻松地在任何支持 Docker 的环境中搭建开发环境,而不需要担心依赖环境配置的差异性。下面是使用 Docker 部署 VitePress 的基本步骤: 1. **创建 Dockerfile**:首先需要创建一个 Dockerfile 文件,这是 Docker 构建镜像的蓝图。在 Dockerfile 中,你可以指定一个基础镜像,并在该镜像的基础上安装 VitePress 所需的环境和依赖。 ```Dockerfile # 使用 node:latest 作为基础镜像 FROM node:latest # 设置工作目录 WORKDIR /usr/src/app # 将依赖文件复制到容器中,安装依赖 COPY package.json . RUN npm install # 将 VitePress 源文件复制到容器中 COPY . . # 暴露端口供外部访问 EXPOSE 8080 # 运行 VitePress 开发服务器或构建静态文件 CMD ["npm", "run", "dev"] # 或者 "npm run build" 来生成静态文件 ``` 2. **构建 Docker 镜像**:在 Dockerfile 所在目录下运行以下命令来构建你的 Docker 镜像。 ```bash docker build -t my-vitepress-app . ``` 3. **运行容器**:一旦镜像构建完成,你就可以通过以下命令来运行一个包含 VitePress 的容器了。 ```bash docker run -p 8080:8080 my-vitepress-app ``` 4. **访问应用**:在浏览器中打开 http://localhost:8080 ,你应该能看到你的 VitePress 网站运行起来了。 5. **开发和迭代**:在开发过程中,每次更改源代码后,你需要重新构建 Docker 镜像和运行容器来查看效果。对于更高效的开发流程,可以在 Dockerfile 中使用 `dockerize` 工具或 `docker-compose` 来监视文件的变化并自动重新构建和重启服务。 请注意,部署 VitePress 的具体步骤可能会根据你的项目配置和需求略有不同。确保 Dockerfile 中的命令与你的项目结构和构建过程相匹配。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值