我想构建一个可供客户使用的生产就绪映像,我想知道是否有办法阻止访问映像中的代码?
我当前的方法是将我的代码存储在/root/并创建一个“客户”用户,该用户在其主目录中仅具有启动脚本。
我的 Dockerfile 看起来像这样
FROM node:8.11.3-alpine
# Tools
RUN apk update && apk add alpine-sdk
# Create customer user
RUN adduser -s /bin/ash -D customer
# Add code
COPY ./code /root/code
COPY ./start.sh /home/customer/
# Set execution permissions
RUN chown root:root /home/customer/start.sh
RUN chmod 4755 /home/customer/start.sh
# Allow customer to execute start.sh
RUN echo 'customer ALL=(ALL) NOPASSWD: /home/customer/start.sh' | EDITOR='tee -a' visudo
# Default to use customer
USER customer
ENTRYPOINT ["sudo","/home/customer/start.sh"]
Run Code Online (Sandbox Code Playgroud)
这种方法按预期工作,如果我进入容器,我将无法看到代码库,但可以启动服务。
我的 Dockerfile 中的最后一步是为 root 用户设置密码或完全删除它。 …
我希望将Kafka设置为来自IoT机器的数据和将处理该数据的服务之间的中介.我有一些问题,根据我的用例确定设计主题的正确方法,并且会喜欢一些建议.
我期待从许多机器读取传感器数据,每台机器可能有许多传感器.例如(温度,压力,零件等).消费者将阅读的这些消息的顺序是有意义的,需要是顺序的.
我想出了三个可能的设计,但我不确定哪个是最好的,如果有的话?
a)每台机器将写入具有1个分区的特定主题以保证序列.因此机器100将写入名为的主题:machine100TempSensor1,machine100TempSensor2,machine100PressureSensor1等.
b)所有机器将写入单个主题,但分区将基于机器/传感器,因此使用与上述相同的示例,机器100将写入称为"温度"的主题,但将在机器和传感器上进行keyd.
例如.
(主题:温度,分区:machine100TempSensor1)
(主题:温度,分区:machine100TempSensor2)
(主题:温度,分区:machine200TempSensor1)
c)生成与温度主题相关的所有温度消息,并在处理数据时过滤消息.
我对所有解决方案的关注,
a)
- Kafka只保证分区级别的序列,所以用单个分区创建一个主题是个好主意还是与主题应该是什么相反?
- 如果我想从所有机器上读取"温度",我必须知道特定主题的名称和请求数据,而不是一般的"温度"主题.
- Kafka说只有一个消费者群体可以从一个分区读取,所以我必须创建许多消费者群体.
b)
- 如果我考虑缩放,单个"温度"主题可能有30多个分区,如果不是100s/1000s.(但我可以立即阅读所有分区)
- 由于只有一个消费者群体能够从一个分区读取,我将为每个消费者提供一个消费者群体.
c)
- 我觉得过滤成千上万条无用的消息会有很大的性能成本.
- 当需要将处理后的数据推送到kafka时,我会遇到同样的问题.
需要考虑的是我希望能够处理某些机器/传感器.
希望我能够清楚地解释一切.