# NIO,BIO,AIO
- 同步(synchronous) IO和异步(asynchronous) IO
- 阻塞(blocking) IO和非阻塞(non-blocking)IO
- 同步阻塞(blocking-IO)简称BIO
- 同步非阻塞(non-blocking-IO)简称NIO
- 异步非阻塞(synchronous-non-blocking-IO)简称AIO
# Docker
# 创建用户
RUN groupadd -r redis && useradd -r -g redis redis
USER redis
RUN [ "redis-server" ]
# Docker网络
- docker inspect -f 指令
[root@localhost ~]# docker inspect -f '{{.Config.Image}}' risk-admin
harbor.zegobird-erp.com/risk-dev/risk-admin-img:latest
[root@localhost ~]# docker inspect -f '{{.Config.Image}}' risk-admin |awk -F ":" '{print $1}'
harbor.zegobird-erp.com/risk-dev/risk-admin-img
[root@localhost ~]# docker inspect -f '{{.Config.Image}}' risk-admin |awk -F ":" '{print $2}'
latest
- 获取git tag或者commit
git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
git describe --exact-match HEAD 2>/dev/null || \
git rev-parse --short HEAD
- 网络配置详细
用户使用 --net=none 后,可以自行配置网络,让容器达到跟平常一样具有访问网络的权限。通过这个过程,可以了解 Docker 配置网络的细节。
首先,启动一个 /bin/bash 容器,指定 --net=none 参数。
$ docker run -i -t --rm --net=none base /bin/bash
root@63f36fc01b5f:/#
在本地主机查找容器的进程 id,并为它创建网络命名空间。
$ docker inspect -f '{{.State.Pid}}' 63f36fc01b5f
2778
$ pid=2778
$ sudo mkdir -p /var/run/netns
$ sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
检查桥接网卡的 IP 和子网掩码信息。
$ ip addr show docker0
21: docker0: ...
inet 172.17.42.1/16 scope global docker0
...
创建一对 “veth pair” 接口 A 和 B,绑定 A 到网桥 docker0,并启用它
$ sudo ip link add A type veth peer name B
$ sudo brctl addif docker0 A
$ sudo ip link set A up
将B放到容器的网络命名空间,命名为 eth0,启动它并配置一个可用 IP(桥接网段)和默认网关。
$ sudo ip link set B netns $pid
$ sudo ip netns exec $pid ip link set dev B name eth0
$ sudo ip netns exec $pid ip link set eth0 up
$ sudo ip netns exec $pid ip addr add 172.17.42.99/16 dev eth0
$ sudo ip netns exec $pid ip route add default via 172.17.42.1
← 系统性学习