Docker快速上手

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.mzph.cn/web/51247.shtml

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

相关文章

读软件开发安全之道:概念、设计与实施08密码学(下)

1. 对称加密 1.1. symmetric encryption 1.2. 使用各方共享的密钥来隐藏数据 1.2.1. 对称加密在本质上依赖共享密钥 1.3. 所有加密都是通过对明文进行转换,把明文消息(或者原始消息)变成无法识别的形式(也称为密文&#xff09…

LeetCode 热题100-69 有效的括号

有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相…

我的CSDN-----第128天创作纪念日

机缘 起初的我,是为了在学习代码的过程中通过写博客的方式来巩固自己的知识。后来在遇到不会的问题时可以在csdn上面查找,寻求一点思路,将学到的知识通过博客的方式呈现出来。 收获 每当发布一篇博客后,就会收到很多人的评论加关…

Adobe Animate (AN)软件安装,硬件配置(附安装包)

目录 一、Adobe An 软件简介 Adobe An 软件的特点 Adobe An 软件的优势 下载 二、Adobe An 软件安装 安装前的准备工作 安装过程中的注意事项 安装后的设置 三、Adobe An 软件使用 高级动画技巧 交互设计 优化与性能提升 四、Adobe An 软件快捷键 选择工具快捷键…

Linux 下命令行参数和环境变量

Linux 下命令行参数和环境变量 命令行参数为什么要有命令行参数谁可以做到结论 环境变量一些现象查看环境变量添加环境变量添加内存级环境变量永久有效 其他环境变量HOMEPWDSHELLHISTSIZE 自定义环境变量定义取消 本地变量整体理解环境变量环境变量的组织方式Linux 代码获取环境…

31. 高度过渡 带粘性分区标题的列表

高度过渡 当元素的高度未知时,将元素的高度从 0 过渡到 auto。 使用 transition 指定 max-height 的变化应该被过渡。使用 overflow: hidden 防止隐藏元素的内容溢出其容器。使用 max-height 指定 0 的初始高度。使用 :hover 伪类将 max-height 更改为由 JavaScript 设置的 --…

【机器人学】7-2.六自由度机器人自干涉检测-计算圆柱体的上下圆心坐标【附MATLAB代码】

目录 前言 机械臂几何参数 机器等效圆柱体坐标确定 MATLAB代码 前言 上一章介绍了机器人自干涉检测的总体算法,提出了算法的三个核心: 一 根据机械臂的几何数据以及DH参数,确定机械臂等效的圆柱体的上下圆心坐标。 二 将一个圆柱体旋转到…

网络攻击原理及过程

网络攻击原理表 攻击者 内容 攻击访问 攻击效果 攻击意图 黑客 挑战 间谍 用户命令 破坏信息 好奇 恐怖主义者 脚本或程序 本地访问 信息泄密 获取情报 公司职员 自治主体 远程访问 窃取服务 经济利益 职业犯罪分子 电磁泄露 拒绝服务 恐怖事…

CSS3 3D 转换

CSS3 3D 转换 CSS3 3D 转换是一种强大的技术,它允许开发者创建出令人印象深刻的3D视觉效果,而无需复杂的JavaScript或第三方库。通过使用CSS3的3D转换功能,设计师可以轻松地将元素旋转、倾斜、移动或缩放,以创建出深度和透视感。在本文中,我们将探讨CSS3 3D转换的基础知识…

python 压力测试脚本

需求: 生成一个12位不重复的随机数将随机数赋值给Json 串中的 orderCode字段将Json用ECB 指定 key为bJXQezYtR4ZSNK4p进行加密并作为值传给{ “data”: “” }设置每秒30个并发持续1分钟调用接口接口输出测试测试报告 代码示例 import json import random import…

鸿蒙验证码,鸿蒙认证服务验证码,鸿蒙云存储上传图片

1、在entry / oh-package.json5目录下,增加依赖: "dependencies": {hw-agconnect/cloud: "^1.0.0",hw-agconnect/hmcore: "^1.0.0",hw-agconnect/auth-component: "^1.0.0",long: ^5.2.1} 整体效果 {"…

vue.js - 看板娘 Live2d

文中的资源文件在这里:我的资源中,打好包了已经,地址:live2d资源 1、在项目的 src/assets 文件夹中,添加 live2d 的资源文件 2、在 src/components 文件中,编写 live2d的index.vue组件 3、在 App.vue 中…

技术文档索引

1.Python爬虫之BeautifulSoup的文章链接 2.Python爬虫之正则表达式

【重点】人工智能大语言模型技术发展研究报告2024|附下载

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力,正在引发经济、社会、文化等领域的变革和重塑。 2023 年以来,以ChatGPT、GPT-4 为代表的大模型技术的出台,因其强大的内容生成及多轮对话能力,引发全球新…

MYSQL————数据库的约束

1.约束类型 1.not null:指示某列不能存储null值 2.unique:保证某列的每行必须有唯一值 3.default:规定没有给列赋值时的默认值 4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯…

《中国科技论坛》

《中国科技论坛》杂志   刊名:中国科技论坛/Forum on Science and Technology in China 主办:中国科学技术发展战略研究院 编辑出版:中国科技论坛杂志社 创刊:1985 刊期/版面:月刊,大16开 刊号&#…

聊聊最近很火的后端即服务

最近,你可能经常听到“后端即服务”(Backend as a Service, BaaS)这个词。不论是在技术论坛上,还是在开发者社区,BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆?今天我们就来聊聊这个话题&#…

TCP粘包和抓包

在 TCP 套接字中,发送和接收缓冲区用于暂存数据,以确保数据的可靠传输。具体来说,TCP 的 socket 收发缓冲区的主要特点和概念如下: 1. 发送缓冲区(Send Buffer) 定义: 发送缓冲区用于存储待发送的数据。应…

大模型从入门到精通——词向量及知识库介绍

词向量及知识库介绍 1.词向量 1.1 什么是词向量 词向量是一种将单词表示为实数向量的方式。每个单词通过一个高维向量来表示,向量的每一维都是一个实数,这些向量通常位于一个高维空间中。词向量的目标是将语义相似的单词映射到相邻的向量空间中&#…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…