Contents

云原生-docker-个人笔记

docker 官网

docker 官方文档

docker 参考文档

dockerfile 参考

镜像重命名

镜像不能重命名,只能复制一份镜像重新命名。

1
docker tag oldimagename:xxx newimagename:yyy

然后删除原来的镜像

1
2
3
4
5
6
docker image rm oldimagename

//或者先找到image的id,然后再删除
docker image ls

docker image rm zzzzz

对同一个版本的镜像打不同的tag是可以的

vscode镜像管理

强烈推荐使用vscode的docker插件来管理镜像,以及使用remote插件来远程登录和修改镜像文件

百度文库

container name属性

docker-compose中的container name

container name其实相当于给容器取一个别名,因为你可以使用container name对应的名称访问容器,也可以使用原名访问容器。

另外network中的alias属性也可以定义别名

Docker build上下文

博客园 拾月凄辰

1
docker build -f xxx -t yyy:zzz aaa

xxx为dockerfile文件路径,yyy为img名称,zzz为tag名称,aaa为上下文

Portainer密码重置

博客园 Alive9

1
docker ps -a

找到容器id,停止portainer容器

1
docker stop portainerid

找到Portainer容器挂载信息

1
docker inspect  portainerid

找到"Mounts"下"volume"绑定的"Source"地址

执行命令重置密码

1
docker run --rm -v /dockerpath:/data portainer/helper-reset-password

启动容器,根据提示的密码登录portainer修改密码

1
docker start portainerid

ADD和COPY

COPY 和 ADD 都是 Dockerfile 中的指令,有着类似的作用。主要区别是ADD有一个自动解压的功能。

脚本之家

alpine镜像

alpine是基于arch最小的linux镜像,3.14版本只有5Mb

1
2
3
4
# 下载镜像
docker pull alpine
# 新建并启动容器
docker run -it docker.io/alpine sh

它使用apk安装软件

1
2
apk update
apk add curl

容器间通信

外界无法与容器内主机未发布的端口进行通信,容器可以与外界进行通信。同一个网络下的容器之间的任何端口都可以直接通信

dockerfile中的 EXPOSE 指令并不发布端口,更像是制作镜像的人给创建容器的人的文档。expose可以指定端口监听TCP还是UDP(80/tcp,80/udp),不指定协议默认为TCP。

真正发布端口是在创建容器时使用-p进行的,使用-P发布docker镜像里面EXPOSE指定的端口

docker配置代理

CSDN Rory602 Docker 配置网络代理

Dockerd 代理

在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。创建配置文件。

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

添加内容

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

重启docker服务

1
2
3
# 重启docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker

查看配置是否成功

1
systemctl show --property=Environment docker

Container 代理

所有容器代理,配置~/.docker/config.json添加内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

单个容器配置代理直接使用-e注入环境变量

Docker Build 代理

虽然 docker build 的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy 等参数。

1
2
3
4
5
docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

资源隔离

CSDN solihawk

namespace:不同容器用户进程,网络,交互,目录,用户隔离

cgroup:CPU、内存、磁盘隔离

 |