Docker技术仓库

简介: 本文详细介绍了Docker中数据卷的作用、特点、管理方式,包括bindmounts和volumes挂载、Dockerfile中的数据卷使用、Docker仓库(公有与私有)以及DockerCompose在多容器应用中的应用。

数据卷


为什么用数据卷?


  1. 宿主机无法直接访问容器中的文件


  1. 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失


  1. 容器之间也无法直接访问互相的文件


为解决这些问题,docker加入了数据卷机制,能很好解决上面问题。


  1. 容器与主机之间、容器与容器之间共享文件


  1. 容器中数据的持久化


  1. 将容器中的数据备份、迁移、恢复等


数据卷的特点


  • 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  • 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
  • 可以使用Docker命令行工具或Docker Compose等工具来创建、删除、备份和恢复数据卷。
  • 由于数据卷存储在主机上的指定位置,相对于容器来说较为隔离,这提供了更高的数据安全性。
  • 容器对数据卷的修改是实时进行的。

数据卷管理


Docker挂载容器数据卷的三种方式


  • bind mounts:将宿主机上的一个文件或目录被挂载到容器上。
  • volumes:由Docker创建和管理。使用docker volume命令管理。
  • tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。


bind mounts方式挂载数据卷


利用docker run/create的参数为容器挂载数据卷


--mount参数          


--mount type=bind, src=宿主机文件或文件夹路径, dst=容器中的文件或者文件夹路径  



volumes方式挂载数据卷


--mount 参数        


--mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径


Docker的数据卷更多会是使用volumes方式来进行使用。


Docker仓库


Docker仓库就是存放docker镜像并有docker pull方法下载的云环境,可以分为公有仓库和私有仓库:


  • 公有仓库指Docker Hub(官方)等开放给用户使用、允许用户管理镜像。    
  • 私有仓库指由用户自行搭建的存放镜像的云环境。


私有仓库搭建


  1. 拉取私有仓库镜像:需要从Docker Hub拉取官方提供的registry镜像,使用命令 docker pull registry。


  1. 启动私有仓库容器:运行命令 docker run -id --name=registry -p 5000:5000 registry,这将创建一个名为registry的容器,并将主机的5000端口映射到容器的5000端口。


  1. 验证私有仓库是否搭建成功:打开浏览器访问 http://私有仓库服务器ip:5000/v2/_catalog,如果看到 {'repositories': []},则表示私有仓库搭建成功。


  1. 配置Docker信任私有仓库地址:修改 /etc/docker/daemon.json 文件,添加 "insecure-registries":["私有仓库服务器ip:5000"],使Docker信任指定的私有仓库地址。注意替换为自己私有仓库服务器的真实IP。


  1. 重启Docker服务:执行 systemctl restart docker 来重启Docker服务,使得之前的更改生效。


  1. 将镜像上传至私有仓库:先使用 docker tag 命令为本地镜像添加一个标签,格式为 私有仓库服务器IP:5000/centos:7。然后使用 docker push 命令将标记的镜像上传到私有仓库


  1. 从私有仓库拉取镜像:使用 docker pull 命令可以从私有仓库拉取已经上传的镜像。


Dockerfile


Dockerfile就是根据特定的语法格式撰写出来的一个普通的文本文件 利用docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像 。


Dockerfile使用命令 – docker build


作用:根据dockerfile创建镜像


docker build [OPTIONS] PATH | URL | -


-t, --tag list        为镜像设置名称和tag      


-f, --file string        指定Dockerfile的路径


特征:


Dockerfile 由一系列指令构成,每个指令通常在文件中占据一行。指令包括基础镜像设置(FROM)、维护者信息(MAINTAINER)、环境变量设置(ENV)、复制文件(COPY 和 ADD)、安装软件包(RUN)、设置工作目录(WORKDIR)、暴露端口(EXPOSE)、指定入口点(CMD 和 ENTRYPOINT)等,每一个Dockerfile命令都会构建一层镜像。



Dockerfile 命令


  • FROM: 指定基础镜像
  • RUN: 构建镜像过程中需要执行的命令。。
  • docker build CMD:添加启动容器时需要执行的命令。
  • ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
  • MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
  • EXPOSE:设置对外暴露的端口。
  • ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
  • ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
  • ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
  • COPY:将本地文件或目录拷贝到镜像的文件系统中。
  • VOLUME:添加数据卷
  • USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
  • WORKDIR:设置工作目录


Docker Compose


Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。


Docker Compose 是 Docker 的官方工具,它允许用户通过编写一个 YAML 文件来配置应用服务。这个配置文件可以定义服务的启动顺序、网络设置、挂载的卷以及其他与服务相关的选项。


Docker Compose 的一些主要功能:


  • 简化多容器应用管理:使用 Docker Compose,开发者可以通过一个配置文件定义多个容器及其相互关系,然后使用一个命令来创建和启动所有服务。


  • 编排容器集群:Compose 项目负责实现对 Docker 容器集群的快速编排,使得部署和管理容器变得更加高效。


  • 支持多种环境:Docker Compose 可以在各种环境中运行,包括生产环境、测试环境和开发环境,以及CI(持续集成)等场景。


  • 声明式配置:通过编写 docker-compose.yml 文件,用户可以声明式地定义服务的配置,这有助于版本控制和团队成员之间的协作。


  • 网络互通:在配置文件中,可以定义服务之间的网络连接,确保容器之间能够相互通信。


  • 灵活的变量支持:Docker Compose 支持使用变量来自定义配置,这使得在不同环境之间迁移和部署变得更加灵活。


管理方式:


使用YAML文件来配置我们应用程序的服务,使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务。


Docker Compose File 有多个版本,基本是向后兼容的,但也有极个别配置项高版本中没有。



Docker Compose File 顶级配置项:


  • version:指定Docker Compose File版本号。


  • services:定义多个服务并配置启动参数。


  • volumes:声明或创建在多个服务中共同使用的数据卷对象


  • volumes:声明或创建在多个服务中共同使用的数据卷对象。


  • configs:声明将在本服务中要使用的一些配置文件。


  • secrets:声明将在本服务中要使用的一些秘钥、密码文件。  


相关文章
|
27天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
1月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
358 11
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
10天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
28 3
|
10天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
31 3
|
14天前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
19天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
24天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
27天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
22天前
|
Kubernetes Docker 容器
掌握Docker容器化技术:从入门到实战
掌握Docker容器化技术:从入门到实战
24 0
|
27天前
|
数据中心 开发者 Docker
理解并实践Docker容器化技术
理解并实践Docker容器化技术