docker

1 安装

  • ubuntu 20.04 安装参考二
  • 避免每次输入 sudo
    1
    2
    3
    4
    5
    6
    sudo groupadd docker
    sudo usermod -aG docker $USER
    # 激活新修改
    newgrp docker
    # 提示没权限的话重启
    docker version
  • compose 安装,这里下载的 github 地址要去 GitHub 看一下来改

1.1 windows-wsl2

  • wsl –update 用 wsl2
  • 在 resource - proxies 设置代理
  • Configure WSL 2 Data Location 修改文件路径到其它盘
  • wsl 其它 distro 也可以这样改路径
  • 相关命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 装 kali
    wsl --list --online
    wsl --install -d kali-linux
    wsl -s kali-linux
    # 修改路径
    wsl --export kali-linux kali-linux.tar
    wsl --export docker-desktop-data docker-desktop-data.tar
    wsl --unregister docker-desktop-data
    wsl --unregister kali-linux
    wsl --import kali-linux E:\wsl\kali kali-linux.tar --version 2
    wsl --import docker-desktop-data E:\wsl\docker-data docker-desktop-data.tar --version 2
  • 设置 appendWindowsPath = false,需要 wsl --shutdown

2 镜像

  • 拉取镜像,替换源速度没有提升,建议 设置代理,只设置前 http 和 https 两处就可以了

    1
    2
    3
    4
    docker pull cdrx/pyinstaller-linux
    # 使用
    docker pull ubuntu@sha256:4b114761663a63948fcd36ef36315b31370c52e59546cf32fee60a8fb16aeddf
    docker pull --platform linux/arm64 alpine:latest
  • 保存和加载镜像

    1
    2
    docker save -o <path for generated tar file> <image name>
    docker load -i <path to image tar file>

3 容器

  • 生成容器
    1
    2
    3
    4
    5
    # 指定容器名字方便操作
    # -v 是绑定,docker run 见 https://docs.docker.com/engine/reference/commandline/run/
    docker run --rm -it --name table_bot -v /home/zack/code/table_bot:/src/ cdrx/pyinstaller-linux /bin/bash
    # 改成豆瓣源
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  • 列出容器
    1
    2
    # -s 占用大小,-a 所有,包括停止的容器
    docker ps -a -s
  • 运行命令
    1
    2
    3
    docker start table_bot
    # -d: Detached mode: run command in the background
    docker exec -d table_bot bash -c '/root/.pyenv/shims/pyinstaller -F bot.py && cp dist/b .'
  • 进入 docker
    1
    2
    3
    docker start table_bot -i
    # 如果已启动
    docker exec -it <mycontainer> /bin/sh
  • 修改端口映射

4 API

1
2
3
4
# 用 curl 和 jq 测试
# 用法参考 https://stackoverflow.com/questions/41960751/docker-remote-api-filters-filter-out-network-by-name
# https://stackoverflow.com/questions/28054203/docker-remote-api-filter-exited
sudo curl -gG -XGET -v -H 'User-Agent:' -H 'Accept:' -s --unix-socket /var/run/docker.sock 'http://localhost/v1.41/containers/json?limit=10' --data-urlencode 'filters={"status": ["running"]}' | jq '.[] | {Id, Names}'
  • 对于想通过 nginx 的 path 来区分不同应用的,可以这样配置,参考
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:3000/;
    }

    location /app1 {
    return 301 /app1/;
    }

5 制作镜像

  • 如何编出更小的镜像 系列文章

  • 制作镜像

    1
    2
    3
    docker build -t iebs .
    # 要是网络不通可以试试 --network=host
    docker build --network=host -t iebs .
  • 可以用 静态链接 libc 的方式编出单文件程序,Dockerfile 参考

    1
    2
    3
    FROM scratch
    COPY iiot_sdk /
    CMD ["./iiot_sdk"]