全栈工程师开发手册 (作者:栾鹏)
架构系列文章
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