了解和使用Docker

news2024/12/26 23:08:12

前提

本文对 Docker 进行全面阐述,详细介绍 Docker 的作用、其基本使用,如常用命令、Dockerfile 的作用及使用、Docker Compose 的作用及使用。常用的基本上都会涉及,其他可以在 Docker 官网进行查漏补缺。

下面还有投票,一起参与进来吧👍

文章目录

  • 前提
  • Docker 的作用
  • Docker 安装
  • Docker 常用命令
    • 容期间通信
    • Docker 数据卷
  • Dockerfile 构建镜像
  • Docker Compose 容器编排

Docker 的作用

这里以容器化发展历程加上应用部署为例子,对 Docker 的作用进行说明。

在只有物理机的时候,大多数开发者或运维人员在部署一个应用时要做以下操作(以 java 应用为例):搭建 java 环境、maven 环境、配置环境变量、打包、运行。这样有几个问题:

  1. 部署慢:以上的过程都是需要手动操作,中间但凡那个环节出问题都需要花费时间排查,而且每次部署都需要重复做同样的操作。
  2. 成本高:一个外网的服务器费用最起码以万为单位进行采购,成本相对高。
  3. 资源浪费:如果应用是计算密集型,那么对 cpu 要求会很高,对内存、磁盘要求就不高,这样一来,闲置的资源就会浪费掉。
  4. 难于扩展迁移:如果要将 windows 服务器的应用迁移到 linux 服务器,一定会出现各种问题。

在虚拟化技术出现后,可以在物理机上开辟多个虚拟机,对物理机的资源进行了充分的使用,且虚拟机之间的资源是隔离的,可以部署多个应用,也降低了成本。 但是虚拟机需要安装操作系统,同样会造成资源浪费。

为了解决虚拟机安装操作系统带来的资源浪费,容器化技术就诞生了,容器化可以理解成不用安装操作系统的虚拟机,如下图,

在这里插入图片描述

这里的 Docker 就是容器化技术最典型的代表,其通过沙箱机制依赖主操作系统,大大的节省了资源、降低成本。除此之外,在应用部署上,Docker 容器本质是包含了部署应用所需的一切资源,包括操作系统依赖的其他组件或应用、数据库、配置等,这样在任何的环境下进行部署时将容器里的资源展开即可部署成功。

比如:我们现在使用 redis 服务,我们不需要去下载redis安装包、gcc等依赖组件等操作,只需要拉取 redis 镜像运行即可。

所以 Docker 的作用不仅仅是节省资源、降低成本,在应用方面也做到了自动部署、应用监控的作用,更简化了开发与运维的沟通,让软件协作方式发生巨大变化。

Docker 安装

这里基于 CentOS 7 进行 Docker 安装,Windows 和 MAC 安装参考 Docker 官网。

执行以下命令进行安装

yum install -y yum-utils
#设置仓库地址
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

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

systemctl start docker

Docker 常用命令

拉取镜像:docker pull 镜像名:<tag> 。 可以通过配置镜像加速器加快拉取镜像的速度,可以参考阿里云 容器镜像服务中的镜像加速器 。
在这里插入图片描述

查看镜像:docker images

启动容器:docker run 镜像名:<tag>

查看容器:docker ps

删除容器:docker rm <-f> 容器id

删除镜像:docker rmi 镜像名:<tag>

与容器交互:docker exec <-it> 容器id /bin/bash

容期间通信

一个宿主机上的容器默认是可以互相通信的,但是每次启动容器后ip会修改,避免因ip变动而修改配置,启动容器时可以给容器命名,通过容器名称通信。命令如下

docker run --name 容器名称 镜像名称 --link 要通信的容器名称 要通信的镜像名称

如果多个容器都需要互相通信,这种方式就会比较繁琐了,此时可以通过创建一个网桥,需要通信的容器都绑定这个网桥即可。命令如下:

#创建网桥
docker network create -d bridge 网桥名称
#绑定网桥
docker network connect 网桥名称 容器名称

Docker 数据卷

为避免容器中产生的数据丢失或者多个容器共享一份数据,Docker 提供了2种数据挂载的方式:

  • 挂载到宿主机:宿主机开辟空间,容器内部文件存储在宿主机上,并访问同一份文件。命令如下:
    docker run --name 容器名称 -v 宿主机目录:容器目录 镜像名称

  • 挂载到共享容器:新建一个容器专门提供其他容器来存储或共享数据,命令如下:

    #创建共享容器
    docker create --name 容器名称 -v 宿主机目录:容器目录 镜像名称 /bin/true
    #挂载到共享容器
    docker run --name 容器名称 --volumes-from  共享容器名称  镜像名称
    

Dockerfile 构建镜像

当需要自己创建一个镜像时可以通过 Dockerfile 来构建镜像,然后上传到镜像仓库(可以自建 Harbor 或者使用公网的),需要使用的直接拉取下来即可。构建命令如下

docker build -t 机构/镜像名:<tag> dockerfile目录

docker 会基于 Dockerfile 文件中的指令来构建,具体指令如下:

FROM 镜像名  #基准镜像,基于该镜像构建
MAINTAINER xxxxx #用来描述的
WORKDIR 工作目录 #进入容后设置工作目录,相当于cd /xxx/
ADD ooo /xxx  #复制本地文件ooo到容器中的工作目录 /xxx
ADD ooo.tar.gz /xxx # 复制并解压 ooo.tar.gz 到容器中的工作目录 /xxx
ENV XXX #设置环境常量,文件中可以以${XXX}方式进行使用

运行指令有 RUN、CMD、ENTRYPOINT,其区别为:

  • RUN:Build 构建容器时执行
  • CMD:容器启动时执行的默认命令和参数,如果容器启动时有其他命令,则CMD不生效
  • ENTRYPOINT:容器启动时执行的命令,只有最后一个ENTRYPOINT执行

运行指令有两种声明方式:

  • Shell脚本方式RUN yum install xxx
  • Exec函数方式(推荐此方式): ["yum","install","xxx"]

两者的区别在于一个会创建子进程执行,一个会用新的进程替换主进程执行。

Docker Compose 容器编排

在多个容器存在依赖,比如运行应用的容器依赖数据库、Redis等多个容器都需要部署的情况下,为了减少部署时间,可以通过 Docker Compose 将这个应用及其依赖的容器统一定义,达到一键部署效果,这个我们叫做容器编排。

在进行容器编排时需要声明 docker-compose.yml 文件定义各个容器以及依赖关系,然后执行 docker-compose up -d 命令进行容器启动。下面提供一个 docker-compose.yml 示例:

version: '1.0'
services:
  service1: # 容器名、可通过此进行通信
    build: service1 dockerfile目录
    restart: always # 容错机制,当容器宕机后自动重启
    environment: # 启动容器时添加环境变量
      环境变量: xxxx 
  service1:
    build: service2 dockerfile目录
    depends_on: # 依赖某个容器,并可进行通信
      - service1
    ports: # 端口映射
      - '宿主机端口:容器端口'
    restart: always # 容错机制,当容器宕机后自动重启

需要注意的是 Docker Compose只能单机,能力有限。集群或者其他复杂场景k8s可以更好的满足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRM客户管理系统开发 获客管理营销全搞定

企业经营管理是有很大学问的&#xff0c;无论是生产经营、销售、服务还是客户管理、维护、营销都是需要付出一定的人力物力来管理的。传统的企业管理多是通过人工方式来完成&#xff0c;个中细节繁琐复杂&#xff0c;耗时耗力还很容易出现纰漏。所以随着科技的发展&#xff0c;…

vscode配置文件-vutur自动格式化-eslint校验-属性换行

vscode配置文件-vutur自动格式化-eslint校验-属性换行 {// eslint 配置"eslint.enable": true,"eslint.run": "onType","eslint.options": {"extensions": [".js",".vue",".jsx",".tsx…

实验篇(7.2) 02. 部署物理实验环境(上) 远程访问 ❀ Fortinet网络安全专家 NSE4

【简介】当大家了解到并不需要很高的代价就可以动手做FortiOS 7.2的实验&#xff0c;很多人愿意尝试使用FortiGate防火墙硬件来学习最验难掌握的远程访问部分&#xff0c;这里我们将学习现场部署一套物理实验环境&#xff0c;让大家看到&#xff0c;在一张桌子上&#xff0c;在…

【软件设计师】高频考点集锦

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软考…

什么是IP地址及IP地址分类详解

概念 IP地址&#xff0c;英文名为IP Address&#xff0c;是internet protocol address的缩写&#xff0c;译为互联网协议地址&#xff0c;又译为网际协议地址。它是IP协议&#xff08;internet protocol &#xff09;提供的一种统一的地址格式&#xff0c;分配给使用IP协议的设…

软件测试----软件生命周期(研发阶段)

1、市场需求调研 2、可行性研究 3、产品项目立项 4、需求开发 &#xff08;1&#xff09;输出《需求规格说明书》 &#xff08;2&#xff09;测试团队&#xff1a;参与需求测试&#xff08;需求评审&#xff09; 5、设计 &#xff08;1&#xff09;开发团队&#xff1a; …

PDF文件数字证书签名指南

一、安装PDF证书的环境 1.1 PDF证书安装环境 Windows pc 机一台 安装Adobe Acrobat 软件 PDF文档签名证书一张(备注&#xff1a;本指南使用沃通内部文档加密证书进行操作,通用其它版本证书) 1.2 网络环境要求 请确保您签名的电脑可以正常访问外网。 二、PDF证书安装 2.…

Android java层hook------xposed框架的使用

xposed曾经是android平台上最好的java层hook和调试工具&#xff0c;由于已经不再更新&#xff0c;当前支持的android系统版本比较老旧&#xff0c;目前只能支持到android6.0&#xff0c;故已经逐渐落伍&#xff0c;目前android上最广泛使用的hook工具是frida&#xff0c;这是另…

数据结构《链表》无头单向非循环-动图详解

前言 前面学习了顺序表发现&#xff0c;顺序表虽然好&#xff0c;但也有很多不足的地方&#xff0c;比方说&#xff0c;顺序表是一块连续的物理空间&#xff0c;如果头插或者头删&#xff0c;那么整个数组的数据都要移动。但是链表不一样&#xff0c;链表是通过指针访问或者调…

昨天面了个腾讯拿 48K 出来的,让我见识到了基础的天花板

今年的春招基本已经进入大规模的开奖季了&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&a…

ESP8266获取天气预报信息,并使用CJSON解析天气预报数据

一、实现功能 当前文章介绍如何使用ESP8266和STM32微控制器&#xff0c;搭配OLED显示屏&#xff0c;制作一个能够实时显示天气预报的智能设备。将使用心知天气API来获取天气数据&#xff0c;并使用MQTT协议将数据传递给STM32控制器&#xff0c;最终在OLED显示屏上显示。 心知…

Python篇——数据结构与算法(第二部分)

目录 二、排序算法&#xff08;承接第一部分&#xff09; 1、堆排序算法——树的基础知识补充 2、树的基本概念 3、二叉树基础知识 &#xff08;1&#xff09;满二叉树 &#xff08;2&#xff09;完全二叉树 &#xff08;3&#xff09;二叉树的存储方式&#xff08;表示方式…

Python基础教程:第九章_Python异常模块与包

从现在开始&#xff0c;让我们来进入到新的章节&#xff0c; Python 异常模块与包的内容学习。本章节我们主要分为 6 部分进行讲解&#xff0c;包含了 Python 异常的相关操作以及 Python 的模块操作&#xff0c; Python 的包操作和安装第三方 Python 包的相关操作。 了解异常 …

【Netty】Netty ChannelHandler(四)

文章目录 前言一、ChannelHandler二、ChannelInboundHandler三、ChannelOutboundHandler四、ChannelDuplexHandler总结 前言 前两篇文章我们已经对Netty进行了简单的了解和架构设计原理的剖析。 相关文章链接如下&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构…

在互联网寒冬,我们应届生应如何提高竞争力?

前言 在当前就业形势下&#xff0c;如何提高应届生在职场中的竞争力&#xff1f;具有哪些有效的方法和策略可供选择&#xff1f;这是一个备受关注的热点话题。哪些方面会对应届生的职场发展起到关键的推动和支撑作用呢&#xff1f;我也来讲一下我是打算如何提升自己的职场竞争力…

移动应用架构解析:用户界面层、业务逻辑层、数据访问层

移动应用的成功离不开一个良好的架构设计&#xff0c;在移动应用开发过程中&#xff0c;合理的层次结构对于应用的可维护性、可扩展性和可测试性至关重要。 移动应用的常见层次结构包括用户界面层、业务逻辑层、数据访问层&#xff0c;但是随着跨平台开发框架的不断发展&#…

【低压配电漏电继电器660V/LLJ-100H/AC220V 中性点漏电保护 JOSEF】

LLJ-F(S)系列漏电继电器 系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120…

医学影像检测方法(B超、DR、CT、MRI)

医学影像检测方法 当涉及到医学影像学时&#xff0c;B超&#xff08;超声波检查&#xff09;、DR&#xff08;数字X射线摄影&#xff09;、CT&#xff08;计算机断层扫描&#xff09;和MRI&#xff08;磁共振成像&#xff09;是常见的诊断工具。以下是对这四种影像技术的基本概…

智能门锁揭开新方案:NV340D芯片打造更智能安全的语音解锁体验

智能门锁可以实现一键开锁、实时监控等功能&#xff0c;带来了更便捷、智能的门禁管理体验&#xff0c;逐渐成为人们生活中必不可少的一部分。近年来&#xff0c;随着人工智能技术的不断进步&#xff0c;越来越多的智能门锁开始集成语音控制系统&#xff0c;以提供更加方便的门…

人民大学与加拿大女王大学金融硕士项目——职场不会拒绝一个优秀的金融人才

在金融行业摸爬滚打多年的金融人&#xff0c;通过多年的拼搏与积累&#xff0c;已身处于一个相对舒适、从容的阶段&#xff0c;能沉淀下来再学习的金融人更是令人钦佩。在繁忙的工作之余他们依然保持对学业的热情&#xff0c;以应对瞬息万变的环境发展。人民大学与加拿大女王大…