Docker

容器镜像加密

January 26, 2022
Container, Docker, Image
Encrypt

如果我在创建镜像时把源码也打包了进去,要怎么防止别人通过这个镜像把源码给窃取了呢?

  • 加密

    镜像加密

    源码加密:在COPY源码进去之前先加密;这种适合服务器不是自己的,并且在局域网里的(接过医院系统的应该都懂吧);留这样一份加密源码也只是在方便有bug时可以快速修复的同时,还可以稍微保护一下源码;

      先使用zip压缩源码:`zip -q -r code.zip ./code`;
      再使用gpg加密:`gpg --yes --batch --passphrase=123 -c ebpf.zip`; -- 通过`--yes --batch --passphrase`三个选项避免键盘交互,最后生成`ebpf.zip.gpg`。
      后续进入容器后,使用gpg解密:`gpg -o ebpf2.zip -d ebpf.zip.gpg`;
      再使用unzip解压:`unzip -d ebpf2 ebpf2.zip`。
    

在镜像构建后,还要防止docker history -H cb0b42c0cb03 --no-trunc=true查看镜像构建历史时,泄露秘钥等信息。– 可使用多阶段构建:在前一阶段使用密钥加密源码,后一阶段复制加密源码,从而避免密钥泄露。因为一般只需要把后一阶段构建出来的镜像分发出去就好了,而查看后一阶段构建出来的镜像的构建历史,是看不到密钥信息的(查看前一阶段的构建历史才会看到)。

dockerfile COPY before mkdir will get a no such file or directory error #

error:

```dockerfile # …

RUN mkdir -p /abc

COPY –from=builder /opt/efg /abc/efg ```

没有指定创建/abc/efg目录,会导致后续想读取该目录内容时报错:no such file or directory

success:

...

docker compose使用extra host让容器访问主机服务

December 9, 2021
Docker
Compose

首发于:简单博客

docker compose 如何访问主机服务 #

docker compose 里面的容器怎么访问主机自身起的服务呢?

20.10.0 版本在 linux 新增 host.docker.internal 支持docker run -it --add-host=host.docker.internal:host-gateway alpine cat /etc/hosts

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1      host.docker.internal # --add-host的作用就是添加了这行到/etc/hosts
172.17.0.3      cb0565ceea26

相关提交

这个 add-host 的意思是告诉容器,容器对域名 host.docker.internal 的访问都将转发到 host-gateway 去。

也就是容器内部访问这个域名 host.docker.internal 时,就会访问到对应的主机上的 host-gateway 地址。

从而达到容器访问主机上服务的效果。

那么,这个 add-host 怎么用在 compose 上呢?

在 build 里使用 extra_hosts

version: "2.3" # 因为某个bug的存在,只能用version2,不能用version3
services:
  tmp:
    build:
      context: .
    extra_hosts: # 配置extra_hosts
      - "host:IP"
    command: -kIL https://host
    tty: true
    stdin_open: true

docker compose 配置中文说明

...