8.Docker 镜像 容器 仓库 学习

470 阅读5分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

Docker 镜像 容器 仓库

docker与虚拟化

  • 虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存等抽象、转化后呈现出来,使用户以更好的方式来应用这些资源。
    虚拟化目标往往是为了在同一个主机上运行多个系统或者应用,从而提高资源的利用率,降低成本,方便管理及容错容灾。

  • 操作系统级的虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。docker以及其他容器技术就属于此范畴。

容器、仓库、镜像运行关系图:

image.png

1.镜像(Image)

类似虚拟机镜像

搜索镜像

docker search # 在docker index中搜索image

--automated=false 仅显示自动创建的镜像

--no-trunc=false 输出信息不截断显示

-s 0 指定仅显示评价为指定星级的镜像

下载镜像

docker pull # 从docker registry server 中下拉image

还可通过指定标签下载某镜像

docker pull [:TAG]

docker pull centos:7

查看镜像/删除

docker images: # 列出images

docker images -a # 列出所有的images(包含历史)

docker ps -a #列出本机所有容器

docker rmi : # 删除一个或多个image

存出和载入镜像

存出本地镜像文件为.tar

docker save -o ubuntu_14.04.tar ubuntu:14.04

导入镜像到本地镜像库

docker load --input ubuntu_14.04.tar或者

docker load < ubuntu_14.04.tar

上传镜像

用户在dockerhub网站注册后,即可上传自制的镜像。

docker push NAME[:TAG]

2.容器(Container)

类似linux系统环境,运行和隔离应用。
容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变。
容器是镜像的一个运行实例,不同的是它带有额外的可写层。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。

3.仓库(Repository)

每个仓库存放某一类镜像。

仓库是集中存放镜像的地方。每个服务器上可以有多个仓库。 仓库又分为公有仓库(DockerHub、dockerpool)和私有仓库

DockerHub:docker官方维护的一个公共仓库https://hub.docker.com,其中包括了15000多个的镜像,大部分都可以通过dockerhub直接下载镜像。
也可通过docker search和docker pull命令来下载。

DockerPool:国内专业的docker技术社区,http://www.dockerpool.com也提供官方镜像的下载。

3.1 docker私有仓库的搭建:

192.168.2.189 仓库

192.168.2.201 客户端

  • 1.先拉取registry镜像(用来启动仓库)和busybox镜像(用来上传)
docker pull registry

docker pull busybox

这里下载的是registry 2

  • 2.使用docker tag命令将这个镜像标记为192.168.2.189:5000/busybox
docker tag IMAGR[:TAG] NAME[:TAG]

docker tag docker.io/busybox 192.168.2.189:5000
  • 3.修改docker配置文件,增加参数 --insecure-registry=192.168.2.189:5000

此处的参数指定为非安全模式,也就是http而不是https,然后重启docker服务。

  • 4.创建registry容器并启动
docker run -d -p 5000:5000 --privileged=true -v /myregistry:/var/lib/registry registry
  • –privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: '/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)错误

  • -v选项指定将/myregistry/目录挂载给/var/lib/registry/,/tmp/registry是registry版本1的仓库目录。

  • /myregistry为本地创建的目录。

  • 5.把本地标记的镜像push到仓库

docker push 192.168.2.189:5000/busybox
  • 6.查看本地目录/myregistry以及在客户端上pull刚才push的镜像

客户端在pull之前也需要修改配置文件指定仓库,也和上面一样添加参数--insecure-registry=192.168.2.189:5000,然后重启docker。

  • 7.也可以通过registry v2 api来查看push的镜像是否存在于仓库

在Docker中安装软件环境

Docker 中国官方镜像加速 www.docker-cn.com/registry-mi…

Docker 中国官方镜像加速

一般情况下,都会永久性的配置镜像加速,在Linux中修改 /etc/docker/daemon.json 文件,填入以下内容:

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

如果daemon.json不存在的话,需要自己创建一下。
文件修改保存成功之后,记得重启一下Docker服务,以便让这个镜像加速生效。 重启Docker服务 我们在【在centos系统中安装Docker】一节中讲过Docker随着服务器重启自动启动的内容,正好可以通过命令service docker restart来实现Docker服务的重启。
具体详情请查看 yuque.com/zhoubang/do…
然后我们在Linux中执行命令:

service docker restart

1. 方法一、docker pull xx (推荐)

1.1获取JAVA镜像:

在终端客户端命令行输入以下命令,获取JAVA镜像。

docker pull java

默认是从Docker Hub官方的仓库中下载镜像的。如果没有指定对应的版本,默认会获取版本为latest的镜像。

注意:
latest是针对于镜像所在的仓库里面的软件最新版本。并非是软件本身的最新发布版本。

2. 查看下载的镜像

命令行中执行命令,查看刚刚下载的JAVA镜像:

docker images

3.启动容器

命令行中执行命令,启动JAVA镜像容器:

docker run -d -it --name java java
  • 其中,--name后面的“java”是为容器指定了一个别名,而最后的那个“java”指的是下载镜像时的名称。

  • 命令以及参数的含义:

    • run:启动一个镜像容器
    • -d:指定容器运行于后台
    • -it:-i 和 -t 的缩写;
    • -i:以交互模式运行容器,通常与 -t 同时使用
    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
    • --name:指定容器名字,后续可以通过名字进行容器管理

4.查看运行的容器

首先我们在命令行中执行命令,查看处于运行状态的容器:

docker ps

2.方法二、通过 Dockerfile 构建

参考