Docker快速上手

news2024/9/23 15:25:09

Docker

  • 前言
  • 一、基本组成
  • 二、常用命令
    • 2.1 Docker服务
    • 2.2 image相关命令
    • 2.3 Container相关命令
  • 三、Docker Volume 容器卷
    • 3.1 匿名挂载
    • 3.2 具名挂载
  • 四、Docker 网络模式
    • 4.1 bridge桥接模式
    • 4.2 host主机模式
    • 4.3 None模式
    • 4.4 Container模式
    • 4.5 Customer模式

前言

本篇文章不再赘述Docker的出身、优缺点、理念等一些概念,想要了解的可以去网上自行查阅资料,几乎每篇相关文章都会有的 - -#

一、基本组成

  • image(镜像)
    • Docker中image是一个只读的模板,我们可以通过镜像构建出容器,一个image可以创建多个container
    • 例如:官方的Centos7镜像相当提供了一套完整的最小化的root文件系统。
  • container(容器)
    • Docker可以利用镜像创建出一个对应的容器,容器是一个资源隔离的操作空间,可以看作一个简易版的Linux环境(包括 root 用户权限、进程空间、用户空间和网络空间等)
    • 例如:官方的Nginx镜像可以创建出一个安装有Nginx的Linux系统,该容器资源隔离,并且存在于当前服务器上。
  • registry(仓库)
    • Docker和Maven一样,拥有公开的仓库存放用户制作上传的镜像,类似于GitHub的,称为DockerHub(公有仓库)。用户和企业可以搭建属于自己的私有仓库。

image相当于Java中一个具体的类。
container相当于Java中使用某个类new出来的实例对象。

二、常用命令

2.1 Docker服务

启动Docker服务

						systemctl start docker

停止Docker服务

						systemctl stop docker

查看Docker服务状态

						systemctl status docker

重启Docker服务

						systemctl restart docker

开机自动启动Docker服务

						systemctl enable docker

查看Docker概要信息

							docker info

Docker帮助文档

							docker help

2.2 image相关命令

查看本地主机上的镜像信息:

							docker images[-qa]
参数:
	-q:只列出imageID
	-a:列出所有image,包括历史记录

Tip:在 Docker 中镜像名称 + TAG(标签) = 镜像 ID ,容器名称 = 容器 ID 。

● 同一个仓库中可以有多个 tag 版本,代表这个镜像的不同个版本,我们使用镜像ID(镜像名称+标签)来定义不同的镜像。
● 如果不知道一个镜像的版本标签,比如:只是用了 ubuntu,Docker 将默认使用 ubuntu:latest 镜像。


搜索对应名称的镜像:

							docker search 镜像名称
示例:
	docker search redis

● 在实际使用中,通常直接去DockerHub搜索镜像,该命令使用频率较低!!!


从仓库中拉取镜像到本地

							docker pull 镜像名称:标签
示例:
	docker pull mysql:5.7(具体名称和标签可以使用search查看镜像后在拉取)

● 拉取镜像时没有添加具体的标签Docker会默认拉取latest最近的镜像。


查看当前container、images、volume所占的存储空间

							docker system df

删除镜像

	删除某个镜像:				docker rmi 镜像名称|镜像ID
	强制删除某个镜像:			docker rmi -f 镜像名称|镜像ID
	强制删除所有的镜像:		docker rmi -f $(docker images -qa)						

2.3 Container相关命令

新建/启动容器:

		docker run [OPTIONS] 镜像名称|镜像ID [COMMAND] [ARG...]
OPTIONS:
 -name = '容器名称': 为容器指定一个名称,可以代替容器ID
 -d :后台运行容器,并返回容器ID			-i :交互式运行容器,通常配合-t使用。
 -t :为容器分配一个交互终端,通常和-i一起使用,启动交互式终端。
 -P :随机端口映射。					-p :指定端口映射 x:y 将容器内的y端口映射到主机的x端口
 -dns 8.8.8.8:指定容器使用的 DNS 服务器,默认和宿主一致。
 -dns-search example.com:指定容器 DNS 搜索域名,默认和宿主一致。
 -m 设置容器使用内存最大值。
 -network="bridge":指定容器的网络连接类型,支持 bridge 、host 、none、container 四种类型,默认 bridge 。
 -expose=[]:开放一个端口或一组端口。
 -restart :指定重启策略,可以写 --restart=awlays 总是故障重启。
 -volume , -v::绑定一个卷。一般格式为 主机文件或文件夹:虚拟机文件或文件夹 。
COMMAND(启动命令)
ARG(启动参数)

示例:  启动一个交互式容器。       
			docker run -it --name=ubuntu ubuntu:20.04 /bin/bash

列出正在运行的所有容器

							docker ps [-qa]
参数: 
 -a :累出当前所有正在运行的容器 + 历史上运行过的容器。
 -q :只显示容器编号。

容器的启动/停止/重启/删除

停止:						docker stop 容器名称或容器ID
重启:						docker restart 容器名称或容器ID
强制停止:					docker kill 容器名称或容器ID
删除已经停止的容器:			docker rm 容器名称或容器ID
删除所有容器:					docker ps -qa | xargs docker rm -f

三、Docker Volume 容器卷

Container通过共享宿主机的内核,可以运行一个或多个应用程序,这些应用程序运行在一个相对隔离的环境中,与宿主机和其他容器相互隔离。

大多数场景下,我们希望在容器中进行操作后产生的数据改变能够保留下来,制作新的镜像或许是一种方法,但是效率比较低下,因此Docker提供了容器卷的方式,通过Volume能够共享宿主机和容器的文件系统。

通过容器卷挂载,宿主机指定目录下的文件目录将和容器内指定目录下的文件在存储上共享。


容器卷Volume相关命令:

列出所有卷:							docker volume ls
创建卷:								docker volume create 卷名称
查询卷详情:							docker inspect 卷名称
删除卷:								docker volume rm 卷名称
移除无用卷:							docker volume prune 卷名称

在这里插入图片描述
Docker允许在创建运行/创建容器的时候指定卷挂载:

  • Docker 支持三种挂载方式:
    • ① Docker默认在外部创建文件夹,并自动挂载到容器内部指定的文件夹中,默认存储在宿主机的/var/lib/docker/volumes/目录下,但Docker会自动管理这些目录,用户通常不需要直接访问它们。
    • ② 用户可以通过Docker CLI命令(如docker volume create、docker run -v等)来创建和管理数据卷,并指定卷的名称和挂载点。
    • ③ 临时文件系统将数据存储在宿主机的内存中,适用于需要快速读写的临时数据(容器停止或删除时,tmpfs挂载中的数据会被清空)。

大部分场景下,我们都会使用-v或是-mount参数指定挂载的源目录和目标路径。

3.1 匿名挂载

匿名挂载是指在创建或运行容器时,不指定数据卷的名称,而只指定容器内部的挂载路径。Docker会自动为这些数据卷生成一个随机的唯一标识符(通常是一个复杂的字符串)作为名称。

# Docker 将创建出匿名卷,并保存容器 /usr/share/nginx/html 下面的内容
			docker run -d -P -v /usr/share/nginx/html nginx

匿名挂载的数据卷的生命周期通常与创建它的容器相关联,如果容器被删除,且没有其他容器或Docker命令引用该数据卷,则该数据卷也可能被删除

匿名挂载使用起来方便快捷,但由于数据卷的名称是随机的,可能会比较难追踪到数据卷,适合容器删除的时相关数据卷也一并删除的场景。

3.2 具名挂载

具名挂载是指在创建或运行容器时,为数据卷指定一个具有实际意义的名称。这个名称可以在多个容器间共享,并且可以通过名称来管理和维护数据卷。

		docker run -d -P -v /var/nginx/html:/usr/share/nginx/html nginx
Tip: -v参数可以使用多个,能够同时挂载多个数据卷

具名挂载具有持久化特性,具名数据卷的生命周期不直接关联于任何单个容器,只要不被显式删除,它就会一直存在。

如果将非空卷安装到存在某些文件或目录的容器中的目录中,则这些文件或目录会被安装遮盖,就像将文件保存到 Linux 主机上的 /mnt 中一样,然后将 USB 驱动器安装到 /mnt 中。在卸载 USB 驱动器之前,/mnt 的内容将被 USB 驱动器的内容遮盖。 被遮盖的文件不会被删除或更改,但是在安装绑定安装或卷时将无法访问。

外部目录覆盖内部容器目录内容,但不是修改。所以需要谨慎,外部空文件夹挂载方式可能会导致容器内部是空文件夹而导致容器启动失败。

四、Docker 网络模式

Docker 提供了多种网络模式,允许容器之间以及容器与宿主机之间进行通信。这些网络模式包括:bridge桥接模式、host主机模式、container容器模式、none无网络模式、Custom自定义模式。

查看docker网络					docker network ls
查看网络源数据					docker network inspect 网络ID
创建网络							docker network create 网络名称/ID
删除网络							docker network rm 网络名称/ID

Docker 默认启动的时候,会为我们创建三个网络:
在这里插入图片描述

4.1 bridge桥接模式

在这里插入图片描述

  • Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥( docker0 ),在Docker0创建一对虚拟网卡,一半在主机上以vethXXX命名,一般在容器内eth0,启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP ,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
  • docker run 创建容器的时候,没有指定 network 的话默认使用的网桥模式就是 bridge ,使用的就是 docker0 。在宿主机使用 ifconfig 命令就可以看到 docker0 和自己 create 的 network 的 eth0,eth1,eth2……代表网卡一,网卡二,网卡三……
  • 网桥 docker0 创建一对对等虚拟设备接口一个叫 veth,另一个叫 eth0 ,成对匹配。
    • 整个宿主机的网桥模式都是 docker0,类似一个交换机有一堆接口,每个接口叫 veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫 veth pair)。
    • 每个容器实例内部也有一块网卡,每个接口叫 eth0 。
    • docker0 上面的每个 veth 匹配某个容器实例内部的 eth0 ,两两配对,一一匹配。
  • 综上所述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的 ip ,此时两个容器的网络是互通的。

4.2 host主机模式

容器不再拥有自己的网络空间,而是直接与主机共享网络空间,基于改模式创建的容器对应ip实际就是与主机同一个网段。

例如:
宿主机IP:192.168.113.1
容器IP:192.168.113.X

在这里插入图片描述

4.3 None模式

Docker拥有自己的网络空间,但是不与主机共享,这个网络模式下的容器不会被分配网卡、IP、路由等相关信息,处于不联网的状态。

  • 完全隔离,不存在与外部任何服务器的网络访问,只有的本地网络127.0.0.1,处于绝对安全。

在这里插入图片描述

4.4 Container模式

Container模式的创建需要基于已存在的容器网络模式,即新建的容器和已经存在的一个容器共享一个网络 ip 配置而不是和宿主机共享。
在这里插入图片描述

  • 新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

4.5 Customer模式

不使用Docker自带的网络模式,反而自己创建一个,这种模式在生产环境下比较常用。

  • 自定义网络默认使用的是桥接网络 bridge 。
  • 自定义网络本身就维护好了主机名和 ip 的对应关系(ip 和域名都能通),常用。
基于bridge模式创建一个名为demo的网络,并且子网范围为192.168.133.0/24,网关为192.168.113.1
docker network create --driver bridge --subset 192.168.133.0/24 --getway 192.168.133.1 demo

Docker 允许创建自定义网络,以便更好地控制容器之间的通信。自定义网络提供了比默认桥接网络更高级的网络配置选项,如网络隔离、容器间的自动 DNS 解析等。

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

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

相关文章

2024计算机技术与软件专业技术资格考试-系统规划与管理(高级)

2024年报名时间:2024年8月22日10:00-9月2日16:00 2024年考试时间:2024年11月9日-11月12日 计算机技术与软件专业技术资格(水平)考试是原中国计算机软件专业技术资格和水平考试(简称软件考试)的完善与发展。…

windows 10x64 22H2专业纯净版2028.8.24

Windows 10 22H2专业版19045.3208,据传这版最稳定,速度快。原版制作,打齐KB5028166和服务堆栈更新KB5028318补丁。 禁用了系统升级,删除Windows Defender,禁用打印机服务,需要安装打印机的自行打开服务Prin…

逆序对的数量——归并排序

逆序对的数量 归并排序的解法&#xff0c;今天自己拿前台样例模拟了一遍才算是入门了归并排序的感觉 #include<bits/stdc.h>using namespace std; typedef long long ll; const int N1e510; int a[N]; int temp[N]; int k;ll mergesort(int q[],int l,int r) {if(l>r)…

string类的使用与实现

标准库中的string类 string类(了解) string类的文档介绍 注意&#xff1a;在使用string类时&#xff0c;必须包含#include头文件以及using namespace std; auto和范围for 在了解string的用法前在学习一个知识&#xff1b; auto关键字 auto是作为一个新的类型指示符来指示编译器…

若依AjaxResult的get(AjaxResult.CODE_TAG)有时返回的200,有时返回的字符串“200“

这个项目是多模块项目&#xff0c;之前通过web json格式&#xff0c;多模块之前传输用的RestTemplate&#xff0c;但是对接其它系统时要用XML就添加了XML的依赖。 原来 原来ajaxResult.get(AjaxResult.CODE_TAG).equals(200)能返回true&#xff0c; 现在get(AjaxResult.CODE…

3.2.6 盘古开天地start_kernel

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 3.2 内核初始化(盘古开天地) 3.2.1 内核初始化的神话 3.2.2 从头 (Head)开始 3.2.3 从头初始化到身体 3.2.4 宇之内存的空分复用 3.2.5 宙之CPU的时分复用 3.2.6 盘古开天地start_kernel 3.2.6 盘古开天地start_…

abc 366 E+F(曼哈顿距离 x y 两个坐标分别计算)(贪心+01背包)

E题&#xff1a; 题意&#xff1a;给定的 xi yi 。求有多少点 到给人 若干定点 的曼哈顿距离 和 小于等于D. 因为D 最大时 1e6,-1e6<xi<1e6。 所以 可能的 点 的 x 的范围是 [-2e6 2e6] 同理 y 的 范围 一样。 将 x y 分开讨论。 我们可以枚举 某个x 的 个数&#xff0…

聚类:k-Means 和 k-Medoid

1. 前言 在《对静态分析缺陷报告进行聚类&#xff0c;以降低维护成本》 提到使用 k-Medoid 通过相似缺陷的聚类&#xff0c;来减少程序员对大量缺陷分析的工作量。 k-Medoid 和传统的 k-Means 聚类算法有什么差别呢&#xff1f; 简单的说&#xff0c;K-Medoid 算法是一种基于…

golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法

golang中 RSA解密前端&#xff08;jsencrypt&#xff09;发来的密文后出现 "crypto/rsa: decryption error" &#xff0c; 这个问题首先需要确认你的私匙和公匙是否匹配&#xff0c; 如果匹配 那检查入参数据类型&#xff0c; 前端发送来的rsa加密后的数据一般都是…

《黑神话:悟空》到底是用什么语言开发的

《黑神话&#xff1a;悟空》&#xff08;Black Myth: Wukong&#xff09;是一款由中国游戏开发公司游戏科学&#xff08;Game Science&#xff09;开发的动作角色扮演游戏。该游戏主要使用了以下技术栈&#xff1a; 开发引擎&#xff1a;游戏科学公司使用了**虚幻引擎5&#x…

blender--二维平面图标变为三维网格

有时候我们希望把一些二维图片能变成三维网格&#xff0c;本案例我们就针对这一场景进行实现。 首先我们可以先去找一张需要的图片(注意&#xff0c;本例需要图片是svg格式)&#xff0c;我们可以在阿里巴巴矢量图标库等平台进行搜索&#xff0c;如图所示&#xff0c;找到需要的…

Python优化算法12——蝴蝶优化算法(BOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

ProtoBuf简要介绍与快速上手使用(C++版)

文章目录 一、 初识ProtoBuf1. 序列化和反序列化概念2. ProtoBuf是什么3. ProtoBuf的使用特点 二、 讲解说明三、 快速上手1. 创建 .proto 文件2. 编译 contacts.proto 文件&#xff0c;生成C文件3. 序列化与反序列化的使用4. 小结 ProtoBuf 使用流程 一、 初识ProtoBuf 1. 序…

线程是什么?和进程区别是什么?怎么用?

目录 一、什么是进程 二、什么是线程 总结&#xff1a;线程和进程的区别&#xff1f; 三、线程的使用 四、线程的调用 一、什么是进程 进程&#xff0c;也叫任务。就是正常执行的程序。 一个程序有两种状态&#xff1a; 一是没有被执行&#xff0c;在硬盘上躺着的软件&…

Qt Example Callout Extention(about QChart/QGraphicsView/QGraphicsItem)

问题 Qt Example callout 展示了在平面直角坐标系中画tips。知识点涉及到QChart/QGraphicsView/QGraphicsItem。如何在平面直角坐标系中画点、折线、圆、长方形&#xff1f; Example路径 D:\Qt\5.15.2\Src\qtcharts\examples\charts\callout\callout.cpp 代码 main #incl…

C++ 有向图拓扑排序算法

代码 #include <algorithm> #include <cassert> #include <functional> #include <map> #include <memory> #include <queue> #include <set> #include <unordered_set> #include <vector>namespace jc {template <…

【JAVA基础】位运算

文章目录 位运算按位与操作按位或操作按位取反按位亦或 移位运算有符号左移有符号右移 位运算 处理数据的时候可以直接对组成整形数值的各个位完成操作 &|~^andornotxor 下面我们以byte类型为例子&#xff1a; 按位与操作 两个操作数&#xff0c;如果同为1则为1&#…

【JavaEE初阶】IP协议

目录 &#x1f4d5;引言 &#x1f334;IP协议的概念 &#x1f333;IP数据报 &#x1f6a9;IPv4协议头格式 &#x1f6a9;IPv6的诞生 &#x1f3c0;拓展 &#x1f384;IP地址 &#x1f6a9;IP地址的格式&#xff1a; &#x1f6a9;IP地址的分类 &#x1f3c0;网段划分…

【计算机三级-数据库技术】操作题大题(第七套)

第七套操作题 第46题 假定要建立一个关于篮球职业联盟的数据库&#xff0c;需管理如下信息&#xff1a; 每个球队有球队名称、所在城市&#xff1b; 每位球员有球员姓名、薪酬; 每场比赛有比赛编号、比赛时间、比赛结果、参加比赛的主场球队、参加比赛的客场球队。 其中带下划…

Redis—基础篇

Redis基础 1. Redis 简介2. Redis 应用3. Redis 数据结构3.1 String3.2 hash3.3 list3.4 set3.5 sorted set 4. Redis 为什么快&#xff1f;5. Redis I/O 多路复用6. Redis 6.0多线程 1. Redis 简介 Redis 是一种基于键值对的 NoSQL 数据库 Redis 中的 value 支持 string、ha…