Dockerhtml
Docker镜像管理python
以前的文章,第一篇容器的搭建,第二篇DockerFile的介绍,今天讲介绍docker的其余辅助功能。web
仓库是集中存放镜像的地方,又分公共仓库和私有仓库。docker
1、Docker Hub公共镜像市场数据库
Docker Hub是Docker官方提供的最大的公共镜像仓库,目前包括了超过100 000的镜像,地址为:ubuntu
https://hub.docker.com/ 。具体的使用不介绍了。安全
2、Docker 搭建本地私有仓库bash
1.使用registry 镜像建立私有仓库网络
使用命令:docker run -d -p 5000:5000 registry:2app
默认状况下,仓库会被建立在容器的/var/lib/registry目录下。能够经过-v参数来将文件存放在本地的指定路径。 命令:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry regisrty:2而后对镜像镜像上传,以Ubuntu为例:
docker tag ubuntu:18.04 127.0.0.1:5000/test
使用命令进行上传:
docker push 127.0.0.1:5000/test
问题:
Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers).
解决参考资料:
https://www.cnblogs.com/lkun/p/7990466.html
https://www.cnblogs.com/kangoroo/p/7994801.html
https://www.cnblogs.com/zeppelin/p/5906410.html
查看镜像仓库:
curl 127.0.0.1:5000/v2/search
2.下载镜像
首先,修改Docker daemon的启动参数,添加以下参数,表示信任这个私有仓库,不进行安全证书检查:
DOCKRE_OPTS="--insecure-registry 192.168.92.xxx:5000"
以后重启Docker服务,并从私有仓库中下载镜像到本地:
service docker restart
docker pull 127.0.0.1:5000/test
Docker 数据管理
在生产环境中使用Docker,每每须要对数据进行持久化,或者须要在多个容器之间进行数据共享,这必然涉及容器的数据管理操做:
容器中的管理数据主要有两种方式:
数据卷:容器内数据直接映射到本地主机环境。
数据卷容器:使用特定容器维护数据卷。
1、数据卷
数据卷是一个可供容器使用的特殊目录,他将主机操做系统目录直接映射进容器,相似于Linux中的mount行为。
1.建立数据卷
Docker提供了volume子命令来管理数据卷,以下命令能够快速在本地建立一个数据卷:
docker volume create -d local test
2.绑定数据卷
除了使用volume子命令来管理数据卷外。还能够能够在建立容器时将主机本地的任意路径挂载到容器内做为数据卷,这种形式建立的数据卷称为绑定数据卷。
在用docker run命令的时候,可使用-mount选项来使用数据卷。-mount选项的三种类型数据卷,包括:
volume:普通数据卷,映射到主机/var/lib/docker/volume路径下。
bind:绑定数据卷,映射到主机指定路径下。
tmpfs:临时数据卷,只存在于内存中。
命令:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry regisrty:2
2、数据卷容器
1.目的或者说是做用
若是用户须要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,可是它的目的是专门提供数据卷给其余容器进行挂载。
2.建立和删除
首先,建立一个数据卷容器dbdata,并在其中建立一个数据卷挂载到/dbdata:
docker run -it -v /dbdata --name dbdata ubuntu
进入容器,查看/dbdata目录:
而后,能够在其余容器中使用 --volumes-from来挂载dbdata容器中的数据卷,例如:
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录,三个容器如何一方,在该目录下的写入,其余容器均可以看到。若是删除了挂载的容器,数据卷并不会被自动删除。若是要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v 命令来指定同时删除关联的容器。
3.使用场景
能够利用数据卷来对其中的数据进行备份,恢复,以实现数据的迁移。
3.1 备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu cvf /backup/backup.tar /dbdata
3.2恢复
首先建立一个带有数据卷的容器dbdata2:
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
而后建立另外一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
端口映射与容器互联
1、端口映射实现容器访问
1.从外部访问容器
当容器中运行一些网络应用,要让外部访问这些容器应用的时候,能够经过 -p 或 -P 参数来指定端口映射。当使用-P大写的标记时,Docker会随机映射一个49000~49900的端口。具体的使用,将不进行介绍,这个很简单。
2、互联机制实现便捷互访
容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建链接关系,接收容器能够经过容器名快速访问到源容器,而不用指定具体的IP地址。
1.自定义容器命名
目的是:一是好记,二是当要链接其余容器时候,也可使用容器名称而不用改变。
使用 --name 标记能够为容器自定义命名。
2.容器互联
使用-- link 参数可让容器之间安全地进行交互。
先建立一个新的数据库容器:
docker run -d --name db training/postgres
而后建立一个新的web容器,并将它链接到db容器:
docker run -d -P --name web --link db:db training/webapp python app.py
此时,db容器和web容器创建了互联关系。
--link参数的格式为--link name:alias,其中name是要连接的容器的名称,alias是别名。
Docker至关于在两个互联的容器之间建立了一个虚拟机通道,并且不用映射它们的端口到宿主机上。在启动db容器的时候并无使用-p 或-P标记,从而避免了暴露数据库服务端口到外部网络上。
Docker经过两种方式为日期公开链接信息:一是更新环境变量,二是更新/etc/hosts文件。
使用env命令来查看web容器的环境变量:
docker run --rm --name web2 --link db:db training/webapp env
其中DB_开头的环境变量是供web容器链接db容器使用,前缀采用大写的链接别名。
除了环境变量,docker还添加host信息到父容器的/etc/hosts的文件。
docker run -t -i --rm --link db:db training/webapp /bin/bash
这里有2个hosts信息,第一个是web容器,web容器用本身的id做为默认主机名,第二个是db容器的IP和主机名。能够在web容器中安装ping命令来测试跟db容器的连通:
apt-get install -yqq inetutils-ping
ping db
繁荣Aaron
技术/英语/杂谈
长按二维码关注咱们