工作中获得很多对平日里耳熟能详这些工具的使用经验,以及这些工具的意义在何处, 这里记录一点在工作过程中学习到的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了