Whoosy's Blog

藏巧于拙 用晦而明 寓清于浊 以屈为伸

0%

docker小技巧

拉取镜像很慢怎么解决

下载官方镜像点的镜像国内访问速度太慢,使用加速器可以解决;DNS可以自己定义
首先打开配置文件daemon.json,centos上默认有此文件,但是ubuntu上需要自己创建

vim /etc/docker/daemon.json

1
2
3
4
{
"registry-mirrors":["https://cabcj35w.mirror.aliyuncs.com"],
"dns": ["114.114.114.114", "8.8.8.8"]
}
1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

设置容器资源限制

1
2
docker run -ti -d --cpu-shares 512 -m 300M busybox 
docker update --cpu-shares 512 -m 300M container_id

查看容器资源占用

1
docker stats --no-trunc

不能使用私有仓库怎么解决

docker默认只能连接有可信任证书的远程仓库,所以默认情况下是连不上自建私有仓库的,需要以下修改

Linux

1
find / -name docker.service

vim /lib/systemd/system/docker.service

在此处添加以下参数

cas diagram

1
--insecure-registry harbor.socmap.net
1
2
systemctl daemon-reload
systemctl restart docker

Windows

在docker的设置中可以找到配置可信任仓库的地址的选项
配置完后,docker会自动重启,重启完之后就可以通过docker login harbor.socmap.net来登录,登录之后就可以正常推送了

MacOS

与Windows同理,可以在设置中找到


删除指定关键词的镜像

核对需要删除的镜像

1
docker images | grep keyword

删除上述的镜像

1
docker rmi $(docker images | grep keyword | awk -F " " '{print $3}' | xargs)

批量转存镜像

如果需要拉取k8s.gcr.io的镜像,并且存到自己镜像仓库中,手动pull-retag-push会非常麻烦,可以用以下脚本。只需设置一下源镜像名和新仓库地址就可以啦~

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
35
36
37
38
# -*- coding: utf-8 -*-
import requests
import os
import sys
import re

# 设置源仓库的镜像(以下镜像必须公开)
images = ["k8s.gcr.io/kube-apiserver:v1.16.0","k8s.gcr.io/kube-controller-manager:v1.16.0","k8s.gcr.io/kube-scheduler:v1.16.0","k8s.gcr.io/etcd:3.3.15-0"]
# 设置目标仓库
repo = "harbor.example.com/kubernetes/"


def login():
url = re.split('/', repo)[0]
os.system("docker login " + url)


def pullimage():
for image in images:
os.system("docker pull " + image )


def tagimage():
for image in images:
name = re.split('/', image)[-1]
os.system("docker tag " + image + " " + repo + name)


def pushimage():
for image in images:
name = re.split('/', image)[-1]
os.system("docker push " + repo + name)


login()
pullimage()
tagimage()
pushimage()