近年来,Docker 技术在软件开发领域里备受瞩目,由于 Docker 能够帮助开发者轻松地将应用程序打包,并可在多种不同的环境中运行。而 Docker 还有一个重要的优点就是节省资源。使用 Docker 的隔离技术,容器之间可以共享宿主机的操作系统内核,不需要在每个容器里再复制一份操作系统,这样就能够大大减少资源的消耗。
在没有 Docker 之前,如果要在不同的环境中运行同一个软件,需要针对不同环境编写不同的软件版本。如果需要更改一些功能,可能需要在每个版本中都进行更改,这显然是一项耗时费力的工作。使用 Docker 可以轻松地解决这个问题。
除了在应用程序开发中使用 Docker 之外,Docker 还可以被用来创建软PLC。PLC(Programmable Logic Controller,可编程逻辑控制器) 负责监控、控制与自动化生产过程,软件 PLC 往往被用来模拟现场逻辑控制。
软PLC 的优点之一就是其可编程性。相比传统硬件 PLC,软PLC 的配置和调试要容易得多。而使用 Docker 可以进一步提高软PLC 的易用性。
例如,可以将一个预先编译好的程序镜像文件直接部署到 Docker 容器中,而不用担心与宿主系统的兼容性问题。而且,当需要更改程序时,只需修改新的程序代码,通过 Docker 重新生成一个新的镜像文件后,再将其部署到不同的容器中即可。
FROM arm32v7/alpine LABEL MAINTAINER="Your Name" LABEL Description="This is a POC for the implementation of a software PLC using Docker" ARG PLCPATH=/myplc ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PLCPATH}" RUN apk update && \ apk --no-cache add socat && \ apk --no-cache add --virtual build-dependencies cmake make gcc g++ git && \ cd / && git clone https://github.com/osgeld/MyPLC && cd /MyPLC && cmake . && \ make && apk --no-cache del build-dependencies WORKDIR /myplc CMD ["socat", "-dd", "TCP4-LISTEN:2001,fork,reuseaddr", "EXEC:myPLC"]
上述代码于 Docker Hub 中 arm32v7/alpine 镜像为基础,并从 Git 中的开源软件 MyPLC 安装了一个软PLC。该软PLC 监听 2001 端口,并能够发送和接收 Modbus/TCP 消息。只需执行一条 Docker 命令,软PLC 即可在容器中运行。