docker使用填坑记录(修改无法启动容器, 拉取国外镜像)

全栈工程师开发手册 (作者:栾鹏)
架构系列文章


docker学习笔记:修改无法启动的容器中的内容

直接修改容器的文件

所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。比如:

root@ubuntu:~# ls /var/lib/docker/aufs/diff/ -l
total 176
drwxr-xr-x  2 root root 4096 Mar  6 05:13 040bf8e0842564e26e62f3e3a30785bd9651c82c52ed99115cd5360ce979e680
drwxr-xr-x  6 root root 4096 Mar  6 05:13 04f7e78a2c8ac9664503f4ea5a1d94bf27b94620987f241cfb9fd6631f761113
drwxr-xr-x  2 root root 4096 Mar 11 01:07 0c666375883f81ba0fc3962368766e93710f59c072a4b80cdf5640323018ccdb
drwxr-xr-x  4 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f
drwxr-xr-x  6 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f-init
drwxr-xr-x  3 root root 4096 Mar  6 05:13 0dc5e226a795507723362cc16046cf16650f8f70dc7bb721b799a5f2a40512ce
drwxr-xr-x  2 root root 4096 Mar  6 05:13 0fd3b6e125673affc1f348cdb0c071782bde7d7ab4748bea3e30bc2d1d7ea7ab

一个容器的数据对应这其中的一个或多个目录 。其中目录名的前几位就是容器的ID,通过这知道容器和目录的对应关系。
注意这个目录需要用root用户执行。

具体的操作步骤如下:

1、设置当前目录 cd /var/lib/docker/aufs/diff/

2、查找要修改的配置文件所在容器中的位置

find ./ -name 'nginx.conf'

假设我们要修改的是 nginx.conf文件,可能的结果如:

./eb531927ba243b59f0db78848809423f7debe148a9ef972088ea41be73c2aa81/etc/nginx/nginx.conf
./4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a/etc/nginx/nginx.conf
./6fce3cb01e3c9b8cc4e1fc270c012b1d0b666fe49ad8b6bededb99e295c5da4c/etc/nginx/nginx.conf

这时我们通过比较要修改容器的ID 与上面几个目录的前缀,就知道是要修改哪个配置文件了。

如果我们进入类似 4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a 目录,会发现这个目录下的内容和linux跟目录下的目录结构非常类似。我们可以找到相关的配置文件直接修改。

说明:因为一个容器的文件系统包括不可修改的镜像层和可修改的读写层,这个目录下其实就是读写层的内容。

3、修改完毕后用 docker start 容器名/ID 即可重新启动容器。

docker 拉取google镜像

可能由于某些原因,导致gcr.io/google_container的镜像无法下载,经过测试,可能通过普通的**v**p**n**也会下载失败。
目前一个常见的解决方案是使用Docker Hub来做一个代理。步骤如下:

编写Dockerfile,然后提交到Github。Dockerfile只需用一行代码:

也就是你要真正拉取的镜像名称,把该镜像作为一个基础镜像即可。

FROM gcr.io/google_containers/example-guestbook-php-redis:v3

在docker hub上先绑定自己的github,然后设置自动构建
在这里插入图片描述

使用阿里云镜像仓库实现拉取国外镜像

按照上面的方法在github中创建Dockerfile

在阿里云上新建镜像仓库

打开阿里云容器镜像服务:https://cr.console.aliyun.com , 新建一个镜像仓库。

  • 选择离自己比较近的区域
  • 按提示填写信息
  • 选择”代码变更时自动构建镜像“和”海外机器构建“,并填写构建信息,比如:
代码分支:branches:master
Dockerfile目录:/kube-apiserver-amd64/v1.10.3
Dockerfile文件名:Dockerfile
镜像版本:v1.10.3

在这里插入图片描述

构建、拉取镜像和打gcr.io标签

  • 点击【管理】,选择【构建】,点击【立即构建】
  • 构建成功后,在【基础信息】中查看用法
  • 拉取新构建成功的镜像,比如:
# 拉取新构建的镜像
docker pull registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-apiserver-amd64:v1.10.3
# 打上gcr.io同名标签
docker tag registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-apiserver-amd64:v1.10.3 k8s.gcr.io/kube-apiserver-amd64:v1.10.3
# 查看镜像
docker images
# 删除新构建的镜像,只保留gcr.io镜像
docker rmi registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-apiserver-amd64:v1.10.3
# 再次查看镜像
docker images

查看gcr.io官方镜像

在前面的docker-library中需要知道准确的镜像名称和镜像标签。

在科学上网的情况下,打开 https://console.cloud.google.com/gcr/images/google-containers/GLOBAL ,在右边的“过滤条件“中输入关键词来搜索。

然后再选择正确的镜像。

通常,gcr.io官方镜像的命名规则为:

gcr.io/google_containers/IMAGE_NAME:IMAGE_TAG

比如:

gcr.io/google_containers/kube-apiserver-amd64:v1.10.3

参考:https://blog.csdn.net/nklinsirui/article/details/80581286

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值