Docker容器云介绍及基础应用

Docker容器云技术介绍

Docker技术简介

Docker是一种虚拟化技术,应用容器平台,类似虚拟机。开发者只需要将自己在本机开发测试通过的代码及代码运行的环境一起打包,然后就可以交给运维,运维利用Docker去管理,无论再运行多少份你的代码,其预期效果都是一样的,不再出现“在我的电脑上好好的,怎么到你那就不行了”这样会引发打架的问题。Docker与虚拟机类似,但有很大的不同,初步理解Docker可将它类比为虚拟机。Docker 可以理解为一个容器(当然本质是一个软件),将应用(要发布的网站程序文件)和应用的依赖打包,在任意环境(服务器、云等等)进行部署。

Docker是基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Docker架构

Docker 客户端(CLI):

用户通过 Docker 客户端与 Docker 守护进程进行交互。

CLI 提供了命令行界面,用户可以通过它来执行 Docker 命令,如 docker run、docker build 等。

Docker 守护进程(Docker Daemon):

守护进程是 Docker 架构中的后台服务,负责接收来自客户端的命令,并管理 Docker 对象,如镜像、容器、网络和卷。它在宿主机上运行,并监听客户端的请求。

Docker 镜像(Images):

镜像是 Docker 容器的模板,包含了运行应用程序所需的代码、运行时、库、环境变量和配置文件。镜像是只读的,并且是分层的,这意味着多个镜像可以共享相同的底层镜像层。

Docker 容器(Containers):

容器是镜像的运行实例。当用户启动一个容器时,Docker 从镜像中创建一个容器,并为其分配必要的系统资源。

容器是隔离的,并且是轻量级的,因为它们共享宿主机的内核。

Docker 仓库(Registries):

仓库用于存储和分发 Docker 镜像。Docker Hub 是最大的公共仓库,但用户也可以创建私有仓库。仓库允许用户上传(push)和下载(pull)镜像。

Dockerfile:

Dockerfile 是一个文本文件,包含了用于构建 Docker 镜像的指令和参数。

开发者可以使用 Dockerfile 来自动化镜像的构建过程。

Docker 网络:

Docker 提供了网络功能,允许容器之间以及容器与外部世界之间进行通信。它可以创建桥接网络、覆盖网络或主机网络等。

Docker 卷(Volumes):

卷是 Docker 提供的一种数据持久化机制,它允许数据在容器之间共享,并且独立于容器的生命周期。卷可以用于容器间的数据共享,或者在容器和宿主机之间共享数据。

Docker的优势

  1. 轻量级和快速:Docker利用容器技术相比传统虚拟化技术更加轻量级,启动速度更快,资源消耗更低,使得应用可以更快速地进行部署。
  2. 跨平台:Docker支持跨平台运行,例如Linux系统,Windows,macOS等,为开发和灵活部署提供了更大的灵活性。
  3. 隔离性:Docker容器提供了良好的隔离性,每个容器有自己的文件系统,进程空间和网络空间,相互独立,确保了应用之间互不干扰。
  4. 易于管理:Docker提供了简单易用的命令行工具和API,使得容器的创建,启动,停止,删除等一系列操作变得非常快捷高效。
  5. 可移植性:Docker容器可以在不同的环境中轻松迁移,保证应用在各个环境中的一致性,简化了开发,测试和生产环境之间的部署过程。
  6. 易于维护和拓展:Docker容器可以轻松的维护,如需要更新或替换容器,只需重新构建或部署新的容器。

Docker用途

问题:为什么会出现Docker和使用Docker

一款应用从开发到上线使用,从操作系统,到运行环境,再到运行配置,这期间所碰到的所有的问题需要开发人员和和运维人员进行协作处理,特别是在面对到版本更迭的问题,环境兼容性等问题时,就经常需要开发和运维人员更深入的沟通,这无疑加重了时间成本。复杂的环境配置,冗余的时间成本,因此让过去很多人这样想到,能否从根本上解决这类问题,让项目带着环境一起安装到服务器上呢?换种说法,在部署项目时,将项目自身运行的环境一起打包发布到服务器上运行?于是,Docker出现了。

由于软件系统的多样性激增如今典型的系统可能由各种不同编程语言编写的后端而这个组合的全部或部分都需要能够在各种不同的硬件上运行——从开发者的笔记本电脑,到公司内部的测试集群,再到云端的生产环境。每个环境都存在差异,它们在不一样的硬件上运行着不一样的操作系统和不同版本的程序库。Docker容器简化了移动应用程序的工作,开发者只需专注于程序开发,再也不用担心测试与正式发布时环境及依赖关系的差异所带来的问题。运维部门则只需专心处理与运行容器相关的核心问题,例如分配资源、启动和停止容器,以及在服务器间的迁移工作。

Registry仓库

Registry仓库是一种专门用于存储镜像文件或其他类型文件的集中式或分布式存储仓库。它们通常用于开发和运维团队进行软件开发、部署和维护。

Registry仓库可以托管各种类型的文件,包括软件包、镜像文件、文档、配置文件等。它们通常提供了用户界面和API,用于上传、下载和管理存储的文件。一些Registry仓库也提供了权限管理、版本控制、审计日志等功能,以确保文件的安全性和可追溯性。

Registry仓库可以是私有的或公共的。私有Registry仓库通常由企业或组织内部使用,用于存储和管理内部开发的软件包、镜像文件等。公共Registry仓库则可以供开发者和用户共享和下载开源软件包、镜像文件等。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

除了公共的 Docker Hub,用户也可以设置私有 Registry 仓库来存储和管理镜像。

私有仓库可以提高安全性,因为它们允许更精细的访问控制和镜像管理。

Docker Registry 是用来存储和分发 Docker 镜像的系统,提供了一个集中的镜像仓库,用户可以将自己构建的 Docker 镜像推送到 Registry 中,其他用户则可以从 Registry 拉取镜像。

Registry 的类型

1.Docker Hub
Docker 官方提供的公共 Registry,用户可以免费推送和拉取公共镜像,但对于私有镜像有数量限制。它是最常用的镜像仓库。

2.私有 Registry
企业或个人可以搭建自己的私有 Registry,以满足对镜像的控制和安全需求。通过私有 Registry,用户可以更好地管理镜像,并避免公共网络中的安全隐患。

3.第三方 Registry 服务
像阿里云、Google Container Registry (GCR)、Amazon Elastic Container Registry (ECR) 等云服务提供商也提供了 Docker Registry 服务,支持镜像的存储与管理。

Registry 的核心组件

镜像存储
Docker Registry 可以将 Docker 镜像存储在本地存储系统或者云端存储系统中,镜像存储包括镜像的分层信息和元数据。

镜像分发
用户可以通过 docker push 命令将镜像上传到 Registry 中,通过 docker pull 命令从 Registry 拉取镜像。

镜像标签(Tags)
镜像在 Registry 中是通过标签来标识不同版本的,常用的标签如 latest、v1.0 等。

镜像管理
Registry 提供对镜像的管理能力,支持镜像的删除、垃圾回收和清理无效层等操作。

Registry应用场景

持续集成和持续部署

在 DevOps 环境中,Registry 仓库可以与 CI/CD 工具集成,自动构建、测试和部署应用程序。构建完成的容器镜像会被推送到 Registry,以供后续部署使用。

版本控制

Registry 能够存储不同版本的镜像,这使得开发团队可以轻松回滚到先前的版本,或者在不同环境(如开发、测试、生产)中使用不同版本的镜像。

镜像共享

多个团队或开发者可以通过 Registry 共享镜像,实现团队之间的协作,避免重复构建相同的镜像。

安全合规性

通过私有 Registry,可以控制谁可以访问和使用镜像,确保敏感数据和知识产权的安全。此外,Registry 还可以与安全扫描工具集成,以确保上传的镜像没有已知的漏洞。

高效资源管理

Registry 可以帮助管理和优化存储资源。通过清理未使用的镜像和标签,保持仓库的整洁。

多云和混合云部署

在多云或混合云环境中,Registry 能够作为中心化的镜像管理工具,方便在不同云平台之间迁移和部署容器化应用。

私有云环境

在企业内部部署私有云的场景中,私有 Registry 提供安全的镜像存储和管理,适合需要控制云环境的企业。

Docker安装与基本使用

Docker安装

1.拉取阿里云的yum源文件

下载yum-utils软件后,拉取镜像

yum-config-manager --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

拉取后在/etc/yum.repos.d/下可以看到docker-ce.repo文件

可以使用rpm -qi进行查询Docker的软件包

2.下载Docker

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

下载Docker

安装完成后可以使用yum -list 检查或使用docker --version

3.启动docker

systemctl start docker

4.开启镜像加速

因为Docker hub仓库在国外,导致网络延迟较高,使用镜像加速可以有效的提高下载的速度,从而节省时间。

使用阿里云镜像加速地址,登陆阿里云,查看自己的镜像加速地址:

复制地址,在/etc/docker/daemon.json下写入:

{ "registry-mirrors": ["https://rtgofewn.mirror.aliyuncs.com"] }

5.开启网络转发功能

默认会自动开启的状态,检查文件/proc/sys/net/ipv4/ip_forward文件显示的数值

若是1,代表功能已经启动,不是的话可以手动开启,编辑文件/etc/sysctl.conf添加:

sysctl -p立即更新即可。

Docker基本命令使用

  • 镜像使用

什么是镜像

镜像是一种轻量级的,可独立执行的软件包,用来打包软件运行环境和基于软件运行的开发环境,它包含运行某个软件所需要的内容,包括了代码,库,环境变量,配置文件等。

Docker镜像加载的原理

UnionFS(联合文件系统):UnionFS文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层一层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种各样的应用镜像。

特性:一次同时加载多个文件系统,但是从外面开起来,只能看一个文件系统,联合加载会把各层文件系统叠加起来,最终的文件系统会包含所有的底层文件和目录

测试一下,使用docker拉取nginx的镜像:

通过这里可以发现,下载的镜像时层层下载的,层层下载的好处在于资源的共享,例如有多个镜像都是由同一个基础镜像构成而来的,那么宿主机只需要在磁盘上保留一个基础镜像,同时内存也只需要加载一份基础镜像就可以为所有容器提供服务了,而且每层都可以被共享。

1.搜索镜像

[root@docker ~]# docker search 【镜像名称】

参数解释:

Name:镜像名称

DESCRIPTION:这个镜像的描述

STARS:下载次数

OFFICIAL:是否是由官方提供

2.镜像拉取

Docker拉取镜像时,如果不指定镜像的具体标签和版本,会自动拉取镜像的latest版本,这是Docker仓库中的默认标签,通常代表是该镜像的最稳定版本。

[root@docker ~]# docker pull 【centos镜像名称】

查看镜像:

[root@docker ~]# docker images

CentOS系统镜像拉取成功。

下载好的镜像可以在 /var/lib/docker/image/overlay2/repositories.json 下进行查看

[root@docker ~]# cat /var/lib/docker/image/overlay2/repositories.json

3.删除镜像

[root@docker ~]# docker rmi  centos:latest

docker rmi [镜像名:镜像标签]或者使用镜像ID进行删除

若镜像打了标签,可以强制删除

[root@docker ~]# docker rmi -f a82a8f162e18

-f强制删除这个镜像id下的所有镜像标签

4.查看单个镜像详细信息

[root@docker ~]# docker inspect 【镜像信息】

5.给镜像打标签

[root@docker ~]# docker tag 【mysql:latest】 【mysql:host】

Docker tag 【镜像名:初始tag】  【镜像名:要修改的tag】

打完标签后会在原有的基础上增加一个带有新标签的镜像,除了添加了新的标签,其他的都一样,并没有改变。

6.导出镜像

[root@docker ~]# docker save -o centos.tar centos:latest

docker save -o 【导出后的文件名】 【要保存的镜像名和标签】

centos:latest 镜像将被导出并保存为一个名为 centos.tar 的文件。这个 .tar 文件包含了镜像的所有层、元数据等,可以用于传输、备份或在其他系统上导入。

7.导入镜像

[root@docker ~]# docker load -i centos.tar

docker load -i 【指定要加载的镜像本地存放位置】

二.容器使用

1.查看容器的状态

[root@docker ~]# docker ps -a    --查看所有容器

[root@docker ~]# docker ps   --查看正在运行的容器

CONTAINER ID : 容器的ID

IMAGE:加载的镜像

COMMAND:运行的程序

CREATED:创建时间

STATUS;当前状态

PORTS:端口映射

NAMES:名称

2.容器创建

[root@docker ~]# docker create -it centos:latest /bin/bash

-i  让容器开启标准输入

-t  让docker分配一个伪终端tty

-it 合起来实现和容器交互的作用,运行一个交互式会话shell

/bin/bash  shell 放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是bin/bash

3.启动容器

[root@docker ~]# docker start 【容器ID】

在启动容器之后,使用docker ps查看一下是否运成功。

4.创建并启动容器

[root@docker ~]# docker run -itd ubuntu:latest /bin/bash

命令等同于docker create ubuntu:latest /bin/bash后再docker start 【id】

参数解释:

-i (interactive): 让容器保持标准输入打开,即使没有连接到容器。这个选项允许你在容器内进行交互(比如接收命令输入),但要结合 -t 使用效果更好。

-t (tty): 为容器分配一个伪终端。这个选项会让容器内的进程看起来像是在终端中运行,通常与 -i 结合使用,使得容器可以与用户交互。

-d (detached mode): 让容器以后台模式运行,即容器启动后不占用当前终端,这样你可以继续在当前终端执行其他操作。通过这个选项,容器会在后台运行并输出容器的 ID。

Itd一起用起到的作用是:启动一个容器并保持它的标准输入和伪终端打开,使得可以与容器进行交互(-i 和 -t), 同时容器会以后台模式运行(-d),即不会占用当前终端。

Docker run:当使用docker run 命令创建容器时,docker后台的运行过程为

  1. 检查本地是否有指定的镜像,若没有会在公仓下载
  2. 利用镜像创建一个容器
  3. 分配一个文件系统给容器,在制度的镜像层外面挂在一层可读写层。
  4. 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中
  5. 分配一个地址池中的IP地址给容器。
  6. 执行用户指定的应用程序,执行完毕后容器被终止运行

5.停止容器

[root@docker ~]# docker stop 【73d674241960容器ID】

docker stop会给容器一个退出的信号,给容器一个缓冲的时间区去保存数据,再关闭容器,这样不会导致容器数据的丢失;也可以使用docker kill 【容器哦ID】进行关闭容器的操作,但是这样是直接关闭容器的进程,易造成数据的丢失。

6.查看容器的详细信息

[root@docker ~]# docker inspect 【c348ab5e8bc9容器ID】

7.进入容器

进入容器有两种方式:一次性进入和永久进入

(1)一次性进入:

[root@docker ~]# docker run -it centos:latest /bin/bash

临时进入容器中,这种方式是创建一个新的容器,在这个容器中运行镜像,退出容器之后,容器自动停止运行。

  (2)永久进入:

永久进入首先要开启一个容器

[root@docker ~]# docker exec -it 【c348ab5e8bc9容器ID】 /bin/bash

进入容器后执行一些操作后,exit退出容器后,不影响容器的进程。

测试:

启动ubuntu系统进行一些操作:

安装成功,测试成功

8.导出容器

[root@docker ~]# docker export 【c348ab5e8bc9容器ID/容器名】 > 【centos_c34导出后的名】

可以看到在该目录下的centos_c34即为导出的容器。

可以使用scp复制到其他主机上

[root@docker ~]# scp centos_c34 root@192.168.128.129:/root

在192.168.128.129主机上查看

9.导入容器

将复制过来的centos_34容器导入192.168.128.129的Docker容器中:

[root@d2 ~]# docker import centos_c34【导出的容器名】 centos:scp【镜像名:tag】

在Docker中,使用 docker import 命令导入时,导入的文件会被存储为镜像,而不是容器。这是因为 docker import 设计的作用就是将镜像文件(如压缩包、备份等)转换为Docker镜像。镜像是不可变的,容器则是基于镜像运行的实例。

解决办法:

使用docker image查看镜像,基于导入的镜像创建一个容器,让这个镜像在容器中运行即可。

10.查看容器中的进程信息

[root@docker ~]# docker top 【15008c37a476容器ID】 

11.可视化界面工具

Portainer是一个Docker的可视化管理平台,提供了一个良好的界面,用于管理和监控Docker容器,镜像,网络等。

首先安装portainer工具,在后台运行一个容器,将本机端口8080映射为9000,--restart表示设置容器重启策略,always表示无论为什么退出,Docker都会自动重启该容器,-v /var/run/docker.sock:/var/run/docker.sock: 挂载 Docker的Unix 套接字。这使得 Portainer 可以与宿主机上的 Docker 守护进程进行通信,管理 Docker 容器、镜像等资源。通过挂载这个文件,Portainer 可以控制和监控 Docker 环境,--name portainer: 为容器指定一个名称(portainer)。如果你不指定名称,Docker 会为容器生成一个随机名称。指定名称可以让你更方便地管理和操作容器,portainer/portainer-ce: 指定要运行的 Docker 镜像。这里使用的是 Portainer 社区版

[root@docker ~]# docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer-ce

在浏览器中输入http://ip:8080

登入可视化界面。

在这里同样可以看到docker的数据。

12.在容器中拷贝文件到主机

在容器中创建一个文件,名为hello_world.txt文件,将这个文件拷贝到主机上

[root@docker ~]# docker cp cf3c82e26cf8:/etc/hello_world.txt /opt/

docker cp 【容器ID】:/容器内路径  /主机路径

13.具名挂载和匿名挂载

具名挂载和匿名挂载的区别:具名挂载是指在Docker中使用指定名称创建的卷,在创建的时候就明确指定,这样Docker会根据名字创建或使用已有同名的卷,具名卷由Docker来管理,储存在Docker的默认目录里,利于管理。匿名挂载:在启动容器时为挂载的卷生成一个没有指定名字的卷,也储存在Docker默认的卷目录中,但是由于没有指定的名称,用户没办法通过名称来进行管理。

(1)具名挂载

利用nginx举例

[root@docker ~]# docker run -d -p 3344:80 --name nginx_1 -v nginx_N:/etc/nginx nginx:latest

创建并启动容器,在挂载目录-v时,写了容器内的路径,nginx_N是一个指定的卷名称

查看卷的时候会查到我们指定的名称

(2)匿名挂载

[root@docker ~]# docker run -d   --name nginx_A -v /etc/nginx nginx:latest

-v后只加在容器内的路径

在此可以发现,并没有一个指定的名称,并不利于管理。

14.Docker环境下运行nginx

(1)基本启动

[root@docker ~]# docker run -d -p 80:80 --name docker_nginx nginx:latest

启动容器,查看容器状态,http://ip:80进行访问

(2)自定义配置文件和挂载

在搭建之前,先创建挂载卷目录,再将先前的nginx的配置文件复制到该目录下:

查看配置文件目录:

将先前启动的nginx容器删除,重新创建一个容器

为容器指定挂载卷,对应其配置文件

[root@docker ~]# docker run -d -p 80:80 --name docker_nginx -v /etc/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

 -v /etc/nginx/conf/conf.d:/etc/nginx/conf.d -v /etc/nginx/log:/var/log/nginx -v /etc/nginx/html:/usr/share/nginx/html nginx:latest

查看容器的状态是否启动

进行登录访问

我们可以对文件进行一些修改,将nginx改为docker_nginx,所有的修改过程都在主机上进行,因为nginx的配置文件是挂载的形式,我们对本地的文件进行修改会自动同步到容器当中,不要进容器中修改。

修改文件后,我们需要重启容器

[root@docker ~]# docker restart 3706b01a9aaf

再次进行访问:

DockerFile制作镜像

Docker File介绍

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像的制作实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile,Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成 image 即可, 省去了敲命令的麻烦。除了手动生成Docker镜像之外,可以使用Dockerfile自动生成镜像。Dockerfile是由多条的指令组成的文件,其中每条指令对应 Linux 中的一条命令,Docker 程序将读取Dockerfile 中的指令生成指定镜像。Dockerfile结构大致分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

Dockerfile每行支持一条指令,每条指令可携带多个参数。

DockerFile参数说明

FROM

指定基础镜像,用于后续的指令构建。

MAINTAINER

指定Dockerfile的作者/维护者。

LABEL

添加镜像的元数据,使用键值对的形式。

RUN

在构建过程中在镜像中执行命令。

CMD

指定容器创建时的默认命令。(可以被覆盖)

ENTRYPOINT

设置容器创建时的主要命令。(不可被覆盖)

EXPOSE

声明容器运行时监听的特定网络端口。

ENV

在容器内部设置环境变量。

ADD

将文件、目录或远程URL复制到镜像中。

COPY

将文件或目录复制到镜像中。

VOLUME

为容器创建挂载点或声明卷。

WORKDIR

设置后续指令的工作目录。

USER

指定后续指令的用户上下文。

ARG

定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。

ONBUILD

当该镜像被用作另一个构建过程的基础时,添加触发器。

STOPSIGNAL

设置发送给容器以退出的系统调用信号。

HEALTHCHECK

定义周期性检查容器健康状态的命令。

SHELL

覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

利用DockerFile制作CentOS镜像

首先,想在制作出来的CentOS7镜像中提前预装一些软件包,但是由于CentOS系统停止维护,导致yum源不可用,所以在DockerFile中,加入了修改yum文件的内容。

创建空目录,在空目录下创建DockerFile文件并编写

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

DockerFile内容解释:

FROM:基础镜像,选择Docker拉取的centos:latest镜像

ENV MYPATH :设置新的centos工作环境,系统直接跳转到/etc/yum.repos.d/目录之下(方便修改yum的文件)

第一二个RUN:用于拉取新的yum的文件

第三四个RUN:下载软件包

EXPOSE:暴露80端口

CMD:/bin/bash 镜像的默认使用环境shell

保存DockerFile文件,使用docker build 构建新镜像

[root@docker centos_image]# docker build -f Dockerfile -t hzycentos7:0908 .

创建成功,细节:在使用DockerFile创建镜像的时候镜像名不能大写,若有大写会有报错提醒:

invalid reference format: repository name must be lowercase

测试:

使用hzycentos7创建容器

启动该容器进行查看

进入容器后发现和我们的预设变量是相同的,默认进入/etc/yum.repos.d/目录下,并且yum源进更新为了可用的yum源。

测试成功。

总结:

创建镜像的过程:

  1. 创建空目录,用于存放DockerFile文件以及其他配置文件
  2. 编写DockerFile文件,注意文件格式和路径
  3. 保存DockerFile文件,并使用docker build 创建镜像,使用docker images检查镜像
  4. 创建一个新的容器进行测试查看是否和DockerFile预设值相同

Registry仓库安装与基本使用

Docker

192.168.128.128

Client

192.168.128.129

1.拉取镜像

[root@docker ~]# docker pull registry

2.开启Registry

[root@docker ~]# docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

参数解释:

-v /data/registry:/var/lib/registry: 将宿主机上的 /data/registry 目录挂载到容器内的 /var/lib/registry 目录。

-p 5000:5000: 将宿主机的 5000 端口映射到容器的 5000 端口。这样,你可以通过宿主机的 5000 端口访问这个私有镜像仓库。

--restart=always: 容器自动重启策略。无论容器是因为崩溃还是宿主机重启,都会自动重启该容器。

--name registry: 指定容器的名字为 registry。

registry:latest: 使用 registry 镜像的 latest 版本来启动容器。registry 是官方提供的 Docker 镜像仓库实现。

3.添加私有仓库地址

{

"insecure-registries":["192.168.128.128:5000"],               --私有仓库地址

"registry-mirrors":["https://rtgofewn.mirror.aliyuncs.com/"]     --阿里镜像加速

}

修改后,重启Docker

systemctl restart docker

4.将镜像重新打标签

[root@docker ~]# docker tag hzycentos7:0908 192.168.128.128:5000/centos:hzy

5.推送镜像到私有仓库

[root@docker ~]# docker push 192.168.128.128:5000/centos:hzy

6.访问网址查看镜像

7.客户端上传镜像

(1)客户端client下载安装Docker后,编辑文件/etc/docker/daemon.json,写入仓库地址和镜像加速地址:

(2)客户端镜像打标签

[root@client ~]# docker tag nginx:new 192.168.128.128:5000/nginxhzy:new

(3)客户端上传

查询上传结果

[root@client ~]# curl http://192.168.128.128:5000/v2/_catalog

{"repositories":["centos","nginxhzy"]}

[root@client ~]#

8.从仓库内拉取镜像

服务器端拉取客户端上传的nginxhzy镜像

[root@docker ~]# docker pull 192.168.128.128:5000/nginxhzy:new

查询本地镜像

本篇文章到此结束,债见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值