工作中获得很多对平日里耳熟能详这些工具的使用经验,以及这些工具的意义在何处, 这里记录一点在工作过程中学习到的docker相关知识小结。

docker轻量化的原因

docker较传统虚拟化,每个容器都少虚拟了一整套系统,转而直接共享宿主机系统内隔离出来的每个shell, 去除了虚拟shell对宿主shell之间的性能损耗,同时在结构上多个系统消失了,只剩下docker虚拟层,虚拟的体量(仅用户空间)相较整个系统而言非常小。多线程多进程对硬件CPU、内存(较以往碎片化的分页)和硬盘(IO吞吐)的利用强度都大大提高了。

docker连接网络方式

  • none:隔离容器与主机
  • container模式:和其他容器共享网络,有特殊限制
  • overlay:虚拟的是整个网络,将各个连接overlay的容器连接到一个虚拟网络里
  • bridge模式:桥接模式但可以端口映射来访问容器内服务
  • host模式:作为独立的主机连接网络,但在OSI第四层传输层,不支持不基于TCP和UDP外的数据通信协议传输
  • ipvlan:同host,虚拟在轻量级OSI第二层数据链路层,因此允许TCP和UDP外的数据通信协议传输
  • Macvlan:同host,较ipvlan来说更底层,直接模拟设备MAC地址而非IP地址,仅3.9以上linux内核可用

docker常用指令

基础指令
  • run - 创建并启动一个新的容器
  • start/stop/restart - 启动、停止和重启容器
  • kill - 立即终止正在运行的容器
  • rm - 删除已经停止的容器
  • exec - 在运行中容器内执行一条命令
  • ps - 列出 Docker 容器
  • top - 显示容器中正在运行的进程
  • attach - 允许用户附加到正在运行的容器并与其交互
  • pull - 从 Docker 注册表(例如 Docker Hub)中拉取(下载)镜像到本地
  • info - 显示 Docker 的系统级信息
复合指令
  • docker ps(列出运行中的容器)
  • docker ps -a(列出所有的容器)
  • docker exec -it 容器名 /bin/bash(在运行中的容器内启动一个交互式的 Bash shell。-i 保持标准输入打开,-t 分配一个伪终端tty。)
  • sudo docker run -d –name 容器名 –restart always 容器应用名:标签(以始终自重启方式运行此容器)
docker compose使用

docker好用,但如果某些应用要配合多个容器才能使用的话,就要让这几个容器同时启动,而且要让几个容器可以建立隔离的网络 docker compose就是用来干这个的。创建一个docker-compose.yml,写好配置,在同级目录下输入docker-compose up -d即可。

需要说明的是docker compose需要独立安装

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

无报错正常输出即安装完毕

值得一提的是,alpine linux官方有提供apk安装源,记得启用community源

apk add docker-cli-compose
在docker compose中使用syncthing

官方指引:Docker Container for Syncthing

官方docker-compose.yml文件内容:

---
version: "3"
services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: my-syncthing
    environment:
      - PUID=1000
      - PGID=1000
      - STGUIADDRESS=
    volumes:
      - /wherever/st-sync:/var/syncthing
    network_mode: host
    restart: unless-stopped
    healthcheck:
      test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
      interval: 1m
      timeout: 10s
      retries: 3

创建好容器后,syncthing默认只允许本地回环地址127.0.0.1访问,因此修改配置文件来开发全/特定地址web GUI访问。

vi /var/syncthing/config/config.xml

将其中

<gui enabled="true" tls="false" sendBasicAuthPrompt="false">

下一行address标签里的127.0.0.1改为0.0.0.0或者你要访问的地址。最后重启容器即可:

docker ps | grep syncthing
docker restart {容器ID}

打开{你之前设置的地址:8384}就能访问syncthing了