配置docker镜像仓库 docker镜像仓库命令

高考知道 2025-05-01 10:31:10

Docker镜像存储格式分析

执行:

新版本的docker镜像存储其实步——安装必要的软件是很绕的,各种ID和目录定义较多,不是很直观,本文较详细的分析一下镜像本地存储和在registry存储的格式。测试用的docker版本是20.10.9,存储引擎overlay2。

配置docker镜像仓库 docker镜像仓库命令配置docker镜像仓库 docker镜像仓库命令


配置docker镜像仓库 docker镜像仓库命令


如何在Ubuntu14.04上搭建私有docker registry-Linux

wzb@wzb-pc:~$ sudo mkdir -p /etc/docker

运行私有docker registry,就好比为docker镜像运行私有git仓库。在Ubuntu14.04上搭建私有docker registry-Linux的步骤:

docker commit

1、在docker registry上,应当创建一个拥有sudo权限的用户(如果可以,在客户机上也如此)。

2、docker registry软件是一款python应用,因此为了使其能够运行起来,需要安装python开发环境以及必要的库:

sudo apt-get updatesudo apt-get -y install build-essential python-dev libnt-dev python-pip liblzma-dev

第二步——安装并配置docker registry

1、为了安装的稳定的docker registry发行版,将使用python包管理工具pip:

sudo pip install docker-registry

2、docker-registry需要配置文件。默认地,pip将该配置文件放置在相当偏僻的地方,因系统中python的安装位置而异。因此,为了找到该路径,将尝试运行registry,以查看相关的输出:

gunicorn --access-logfile - --debug -k gnt -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

3、由于配置文件不在正确的位置,上述尝试将会以失败而告终,并输出一条包含FileNotFoundError错误消息。

docker 怎么从镜像仓库获取镜像

我的docker本地镜像仓库中有tomcat:8.5.16。内网环境下测试执行:

配置docker的启动参数。

# ctl status docker 1

如图红框所示,修改/usr/lib/d//docker.serv

启动参数增加--add-registry=.example:5000 --insecure-registry=.example:5000

重启docker:

# ctl daemon-reload# ctl restart docker12

ECS有2种集群,Fargate 与 EC2 Linux。验证

执行:

# docker 1

输出一行有:

Registries: .example:5000 (insecure), docker.io (secure)1

registry添加成功。

可以看出,这里在执行docker pull的时候不需要带上本地镜像仓库的地址,直接会自动从本地镜像仓库拉取。

docker pull 下来的镜像文件存放的位置

1. 存放在 /var/lib/Docker

2. reitories-aufs文件:

{"hello-world":{"latest":"7a5a2d73abce5e0eab6aa3fa06f5d08308c79efed1e6f0392b298c322c0f955b"},

"tensorflow/tensorflow":{"latest":"05a46e5af4d377866454047abf232a2f3489a5d01cebe33a6d63e2540781b77c"}

}}

备注:从docker镜像仓库中拉了两个镜像

docker pull hello-world

docker pull tensorflow/tensorflow

3./v上面说了任务定义,那么任务这个概念也很简单,被运行的任务定义。ar/lib/docker/graph/这个文件夹:

json -保存着关于这个镜像的元数据 (JSON文件包含了仓库名、标签、以及标签对应的镜像ID)

layersize – 一个整数,表示layREPOSITORYer的大小。

layer/ – 子文件夹,保存着rootfs该容器的镜像

如何制作docker ubuntu

# docker pull tomcat:8.5.161

我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。

命令格式

制作镜像的方式主要有两种:

通过docker commit 制作镜像

通过docker build 制作镜像

docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。再将改动提交到版本系统中。

选择基础镜像

基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像

我们以ubuntu为例子来说明

步骤1:运行ubuntu 镜像

docker run -i -t ubuntu /bin/bash

apt-get -yqq update

安装完成后,对apache2进行配置和修改

步骤3:退出docker并保存镜像

使用“exit”命令退出容器

运行docker comit 命令, 进行保存

docker commit 61412230ae46 own-apache2

docker commit 命令参数说明

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS:

-c, --change=[] Apply Dockerfile instruction to the created image, 没用过

-m, --message= 提交时的说明文字

-p, --pause=true 在commit时,将container 暂停

CONTAINER:

可以使用container 的名字或者ID

指定镜像仓库,上述例子中,指定的是本地存储

可以指定远程镜像仓库,如docker hub。也可自建仓库来存放image

TAG:

镜像TAG

如何使用阿里云 docker 镜像仓库使用

首先要记得登录 docker login

wzb@wzb-pc:~$ sudo docker

{"Reitories":

使用配置文件 /etc/docker/daemon.json(没新建该文件)

没 /etc/docker文件夹 请执行

写入镜像加速址(镜像加速址 阿云容器Hub服务控制台 加速器 查看)

sudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-rors": ["自镜像加速址"]}EOF

wzb@wzb-pc:~$ sudo ctl daemon-reload

wzb@wzb-pc:~$ sudo ctl restart docker

4测试拉传镜像

例拉简单busybox镜像

busyboxLinux系统提供该系统主要功能包含些与GNU相关功能选项

wzb@wzb-pc:/etc/docker$ sudo docker pull busybox

Windows7系统安装docker,每次pull远程仓库镜像到本地,为什么总会生成两个一样的镜像文件?

解apt-get -y install apache2决步骤

1. 安装好docker环境 (自行搜索网上教程)

2. 运行docker (自行搜索网上教程)

3. 打开docker管理器, 右键选择设置

4. 打开putty进入docker (docker 默认地址: 192.168.99.100 默认账号: docker 默认密码: tcuser)

5. 查看查看前系统及docker安装情况目录是否挂载成功!

Docker push镜像到远程仓库

3重启daemon及docker

如果遇到问题

error: An image does not exist locally with the tag

solution:这个地方特别要注意,推上去的镜像前面的仓库名必须和自己的用户名一致

比如我的用户名叫ucasxza 那我的镜像前面的路径也得叫ucasxza

push之前要给镜像打上tag ucasxza

sudo docker tag jamtur01/static_web ucasxza/static_web

jamtur01是 本docker书中给的例子

然后就可以p-a, --author= 提交的镜像作者ush成功啦

AWS服务建设之路-Docker集群

步骤2:安装软件并修改软件配置, 比如:安装apache2

最近的项目处于种种原因要放到亚马逊上面,也正好体验一下世界云计算平台的服务。于是又开始了漫长的爬坑路。不得不说AWS的管理交互台设计充满了工业气息,新手很难上手,但熟练工会觉得很直观。

这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。

简单来说分4步:

ECR是私有镜像仓库,先把自己的镜像上传上来,这一步的坑就在于要上传镜像不能直接 docker login 需要

ECS有一个很重要的概念,任务定义。这个概念类似于 k8s 的 pod。任务定义抽象出了任务这个概念,一项任务可以包含多个docker镜像及对应的参数/环境配置,并且拥有CPU,内存限额。

任务定义拥有版本号,只能创建新版本不能修改以前版本。

而在集群中的调度则是以任务定义为对象。

所以我们为我们每一个服务创建了1个任务定义,一个任务定义包含1个镜像。

这里有3种网络模式供选择:

大部分情况我们都使用桥接模式,少部分情况使用 awsvpc 。主机模式则尽量不要使用,不利于编排。 awsvpc 的具体使用场景会在下文服务发现章节介绍。

动态端口映射 技术,是指将容器在宿主机上的外部端口随机映射,只在桥接模式下有效。

勾上日志配置,ECS就会自动把镜像的标准输出定向到 CloudWatch,就可以去那里查看镜像日志了,当然专业的日志系统还是得ELK。

Fargate是很酷炫的架构,特别是在资源占用量不稳定,时间不确定的情况下很合适。而且全部使用awsvpc网络模式,所有的服务都可以拥有IP,纯正的无架构。只有一个缺点,贵(同样资源量是EC2的3倍价格...

建议创建空集群,再自行添加,不然容易触发一些 keng

一个任务可能包含多个容器,这个任务可能是在有限时间内执行完毕就停止的,比如一次性脚本,也可能是无限运行的,比如nginx。

服务这个概念比较复杂,一个服务会管理一个任务定义在运行时的方方面面

服务没有停止功能,只能修改任务数为0。

服务删除后,需要手动停止已经运行的任务。

AWS提供基于Router53(DNS服务)的服务发现,其实很难用,awsvpc模式的很方便,桥接模式下特难用。

在awsvpc模式中 ,因为每个任务都有自己的IP,所以端口可以直接固定,不会存在冲突,配合基于Router53的服务发现可以直接完成完美的服务发现--无论如何更新重启服务,总能通过固定域名访问到服务。但因为一台只能绑定3张网卡,所以只能启动3个awsvpc模式容器。

在桥接模式中 ,每个任务都使用宿主机的ip,以及随机分配的端口,所以服务发现需要带上端口,不然也不能正常发现。AWS提供SRV类型的DNS记录用作服务发现,本身是没有问题,但SRV并不是被广泛接受的记录类型,浏览器与网络库均不能解析SRV记录,所以要访问服务还需要定制DNS解析。

所以我们最终选择使用Eureka作为服务发现服务,使用awsvpc作为补充的服务发现服务,比如将Eureka本身及xxl-job等使用awsvpc部署。

在选用了Eureka之后,又遇到了问题。因为使用了动态端口映射,所以向Eureka注册的端口不是Spring的端口,并且容器内部无法知道宿主机的ip与端口。

这里通过多种方式配合破局:

不过要注意,启用元数据服务,需要修改ECS配置,而这个配置是在集群创建时就写入的,所以要修改ECS配置,必须要先修改自动伸缩组的初始化脚本,再删除伸缩组内所有,再重新添加。

这样就可以在Eureka中心正确展示服务信息了。

版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。