基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

相对于传统虚拟机,Docker 没有硬件虚拟化,可以运行在物理机、虚拟机, 甚至嵌套运行在 Docker 容器内,并且其不携带操作系统的,会轻巧很多。而且调用资源时利用 Docker Engine 去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。

Portainer 统一管理

  • 安装Portainer Community Edition (CE)而不是Portainer Business Edition (BE)
  • WSL的安装 和linux类似
  • # 创建 Portainer Server 将用于存储其数据库的卷
    docker volume create portainer_data
    # 下载并安装 Portainer Server 容器, 9000为WebUI端口, 8000 是可选的,仅当您计划将边缘计算功能与边缘代理一起使用时才需要。
    docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /portainer_data:/data portainer/portainer-ce:2.11.1
    

    注意端口映射时: 2333:8000 为 容器内部端口 8000 ,宿主机端口为 2333

    WebUI访问

    http://localhost:9000
    # docker在服务器上时,可以关闭防火墙访问,也可以ssh代理到本地
    brainiac1# ufw status
    Status: inactive
    http://222.195.72.218:9000/#!/home
    

    建议使用 Stacks 下的 docker-compose部署docker

    # 安裝 docker
    curl -sSL get.docker.com | sh
    # 將目前使用者新增到 docker 群組內,需要重新登入才會生效
    sudo usermod -aG docker $USER
    # 安裝 docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -sL https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d'"' -f 4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    

    cheat sheet

    docker build

    编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像;

    Dockfile 基本的格式为 docker build [ 选项 ] 路径 ,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。

    因此一般建议放置 Dockerfile 的目录为空目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。

    -t :指定要创建的目标镜像名

    镜像的完整 tag 不仅包含镜像名字, 还指明了镜像从哪里来, 要到哪里去, 就像一个 URL。可以通过 -t 选项指定镜像的标签信息,譬如:

    $ sudo docker build -t myrepo/myapp /tmp/test1/
    $ docker build -t username/image_name:tag_name .
    $ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
    

    docker run

    docker run :创建一个新的容器并运行一个命令

    -d: 后台运行容器,并返回容器ID;
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    --name="nginx-lb": 为容器指定一个名称;
    -e username="ritchie": 设置环境变量;
    

    使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

    runoob@runoob:~$ docker run -it nginx:latest /bin/bash
    

    dockfile在当前目录

    #!/bin/bash
    docker_name="mihoyo-bbs"
    docker stop ${docker_name}
    docker rm ${docker_name}
    echo -e "\033[5;36mOrz 旧容器(镜像)已清理\033[0m"
    time_now=$(date "+%m%d%H")
    docker build -f dockerfile --tag ${docker_name}:"${time_now}" .
    echo -e "\033[5;36mOrz 镜像重建完成\033[0m"
    docker run -itd \
    	--name ${docker_name} \
    	--log-opt max-size=1m \
    	-v $(pwd):/var/app \
    	${docker_name}:"${time_now}"
    echo -e "\033[5;36mOrz 镜像启动完成\033[0m"
    docker ps -a #顯示目前的 container 及狀態
    docker logs ${docker_name} -f # -f, --follow         Follow log output
    

    hackergame2020 的源码的dockerfile

    Ithemal

    docker-compose

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。需要额外安装。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

    https://www.runoob.com/docker/docker-compose.html

    例子:AutoMihoyoBBS

    https://github.com/Womsxd/AutoMihoyoBBS

    version: "3"
    services:
      mihoyo-bbs:
        image: darkatse/mihoyo-bbs
        environment:
          - CRON_SIGNIN=30 9 * * *
          - MULTI=TRUE
        volumes: # 将主机的数据卷或着文件挂载到容器里。
          - .:/var/app
        logging: # driver:指定服务容器的日志记录驱动程序,默认值为json-file
          driver: "json-file"
          options:
            max-size: "1m" # 最多1m个文件,当达到文件限制上限,会自动删除旧得文件。
    

    docker-compose logs -f命令来查看程序输出。 -f, --follow Follow log output

    $ docker-compose up -d 
    # 执行 docker-compose up 命令来启动并运行整个应用程序。
    # 在后台执行该服务可以加上 -d 参数
    Creating network "automihoyobbs_default" with the default driver
    Pulling mihoyo-bbs (darkatse/mihoyo-bbs:)...
    latest: Pulling from darkatse/mihoyo-bbs
    df9b9388f04a: Pull complete
    a1ef3e6b7a02: Pull complete
    7a687728470e: Pull complete
    4ecf30de1710: Pull complete
    a1f99e431609: Pull complete
    7e9141a60a66: Pull complete
    7aa39aec04ec: Pull complete
    a75b4b3d5690: Pull complete
    dee0a6b07871: Pull complete
    abed80702fed: Pull complete
    Digest: sha256:10958801df87675c390a8cdcc153c2f87a41af92d35f9f2cf9b7758aa3e10d1b
    Status: Downloaded newer image for darkatse/mihoyo-bbs:latest
    Creating automihoyobbs_mihoyo-bbs_1 ... done
    

    docker build use proxy

    https://cloud.tencent.com/developer/article/1806455

    http://www.debugself.com/2018/01/17/docker_network/

    docker build --network=host\
        --build-arg http_proxy=http://127.0.0.1:7890 \
        --build-arg https_proxy=http://127.0.0.1:7890 \
        --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
        -t ithemal:latest .
    

    You also can set the proxy in the Dockerfile.

    ENV http_proxy "http://127.0.0.1:7890"
    ENV https_proxy "https://127.0.0.1:7890"
    

    启动docker并通过xhost保持tmux连接

    docker/docker_connect.sh

    https://blog.csdn.net/winter2121/article/details/118223637

    Got permission denied while trying to connect to the Docker daemon socket

  • sudo 运行
  • 加入docker用户组
  • sudo groupadd docker     #添加docker用户组
    sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
    newgrp docker     #更新用户组
    docker ps    #测试docker命令是否可以使用sudo正常使用
    

    sudo password in docker image

    https://stackoverflow.com/questions/28721699/root-password-inside-a-docker-container

    https://www.zhangshengrong.com/p/AvN6YAOWam/

    https://blog.csdn.net/xzl9811wl/article/details/107060382

    需要进一步的研究学习

    遇到的问题

    开题缘由、总结、反思、吐槽~~

    https://cloud.tencent.com/developer/article/1395434

  • Got permission denied while trying to connect to the Docker daemon socket
  • sudo password in docker image
  • 需要进一步的研究学习
  • 遇到的问题
  • 开题缘由、总结、反思、吐槽~~
  •