千寻

道路很长, 开始了就别停下!

0%

Docker汇总

/etc/docker/daemon.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"3"},
"registry-mirrors": [
"https://zckzdbvq.mirror.aliyuncs.com",
"https://116.62.81.173",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"http://192.168.1.200:2000"
],
"insecure-registries": ["139.159.220.178:8088"]
}

添加静态路由联通不同主机docker

在/etc/rc.local 加

1
2
3
4
5
route add -net 172.18.1.0/24 dev eth0

route -n # 查看路由
# 开启内核ipv4转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

清理docker空间

docker system prune -a

删除所有没有用的镜像,而不仅仅是临时文件;

docker image prune -a

限制docker 日志大小

{
“log-driver”:”json-file”,
“log-opts”: {“max-size”:”100m”, “max-file”:”1”}
}

无法用docker rmi 删除的镜像,可以直接删除文件

cd /var/lib/docker/image/overlay2/imagedb/content/sha256
for i in docker images|grep /test/|awk '{print $3}';do rm -rf $i* ;done

docker build 报错

unable to find image “sha256:823e1ed7982d5426dcc257ef43ba7e10b7758d6275d85ce645899f4f55b073b7”
加 –no-cache 参数
docker build -t docker.io/share/test/insurance-center:latest . –no-cache

Docker Swarm

创建Swarm集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 在manager1机器上创建docker swarm集群
docker swarm init ‐‐advertise‐addr 192.168.1.200
# docker swarm join-token manager 查看token

# 2. 向docker swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是manager节点的
docker swarm join ‐‐token xxx 192.168.1.200:2377 (worker1)
docker swarm join ‐‐token xxx 192.168.1.200:2377 (worker2)
# 3. 查看管理节点集群信息:
docker node ls
# 4. 删除node,退出集群
docker swarm leave --force(节点上)
docker node rm id --force(manager上)
# 5. 节点加标签
# docker node update --label-add role=标签名称 主机名
docker node update --label-add role=db docker1
#删除标签
docker node update --label-rm role manager-node
# 6. 查看节点详情
docker node inspect hostname

在docker swarm中部署服务(管理节点运行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 1. service命令创建服务
$ docker service create --replicas 1 --name nginx1 nginx(imagename) --network=goldeye

# docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务
# ‐‐replicas参数:指定了该服务只有一个副本实例
# ‐‐name参数:指定创建成功后的服务名称为helloworld
# ping docker.com指令:表示服务启动后执行的命令

# 2. 查看docker swarm集群中的服务
查看服务列表:docker service ls
查看部署具体服务的详细信息:docker service inspect 服务名称
查看服务在集群节点上的分配以及运行情况:docker service ps --no-trunc 服务名称

# 3. 修改副本数量
在manager1上,更改服务副本的数量(创建的副本会随机分配到不同的节点)
docker service scale helloworld=5

# 4. 删除服务(在管理节点)
docker service rm 服务名称

# 5. 在集群管理节点manager1上部署一个nginx服务
docker service create \
‐‐network my‐multi‐host‐network \
‐‐name my‐web \
‐p 8080:80 \
‐‐replicas 2 \
nginx

使用compose部署docker swarm 服务

  1. 部署服务
    # docker stack deploy -c docker-compose.yml stackname

  2. 查看服务
    # docker stack ls

  3. 移除服务
    # docker stack down stackname

  4. docker-compose.yml 文件示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    version: "3.3"

    services:
    visualizer:
    image: dockersamples/visualizer:stable
    ports:
    - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
    - alan
    deploy: # deploy参数是Docker Compose针对Swarm集群部署提供的,子参数专门用于指定与服务部署和运行相关的配置
    mode: replicated
    replicas: 3
    restart_policy:
    condition: on-failure
    max_attempts: 3
    placement:
    constraints:
    - node.role == manager
    - node.hostname == docker1
    - node.labels.role == db
    update_config:
    delay: 5s
    order: start-first # 默认为 stop-first,推荐设置先启动新服务再终止旧的
    resources:
    limits:
    cpus: "0.50"
    memory: 1g

    networks:
    alan:
    external: true