Docker的介绍及应用

1.什么是Docker

我们在部署大型项目的时候,肯定会遇到这种问题,大学项目组件较多,运行环境复杂,部署时会碰到一些问题:例如node、redis、mysql等这些应用都有自己的依赖和函数库。这种复杂的依赖关系很容易出现兼容问题。开发、测试、生产环境如果有差异还会遇到其他问题。为了解决依赖兼容和运行环境不一致的问题,Docker就诞生了。

Docker是如何解决依赖的兼容问题的?

依赖混乱的解决:

将应用的函数库依赖、配置与应用一起打包,形成可移植镜像

Docker应用运行在容器中,使用沙箱机制,相互隔离

跨系统的解决:

首先我们需要先了解这些:对于不同的Linux系统,只是上层的应用不同,内核都是Linux,内核是用来操作计算机硬件的。上层应用操作是将内核的命令集合封装起开作为一个函数,多个函数形成一个函数库,通过函数来操作计算机硬件,因为不同的Linux系统(例如:ubuntu、centOS),他们的函数名字不同,自然会产生跨系统报错问题

Docker的解决方案就是将用户程序与所需要调用的系统(比如ubuntu)函数库一起打包,因此可以在任意Linux系统上运行。

简化来说:Docker是一个快速交付应用、运行应用的技术。可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统。运行时利用沙箱机制形成隔离容器,各个应用互不干扰。启动、移除都可以通过一行命令完成,方便快捷。

2.Docker与虚拟机

虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在Windows系统里面运行Ubuntu系统,这样就可以任意运行Ubuntu应用了。 Hypervisor的作用是用来模拟硬件的信息。

Docker与虚拟机的区别

Docker的硬盘占用较小(一般为Mb)、启动较快。是一个系统进程。

虚拟机的硬盘占用较大(一般为Gb)、启动较慢。是在操作系统中的操作系统。

3.Docker的架构

Docker是一个CS架构的程序,由两部分组成:

服务器(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

客户端(client):通过命令或者RestAPI向Docker服务端发送指令,可以在本地或者远程服务器端发送指令。

客户端可以通过docker build命令构建镜像,命令到达DockerServer后会被docker daemon 守护进程接收和处理,根据client提供的数据构建一个镜像。

通过docker pull命令可以拉取镜像,命令到达DockerServer后会通过docker daemon守护进程去Registry里面拉取指定镜像。

通过docker run 命令创建容器,命令到达DockerServer后会通过docker daemon守护进程去创建容器。

4.安装Docker

1.卸载旧的版本

sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

这说明之前没有安装过docker。

2.安装yum-utils工具

sudo yum install -y yum-utils

3.设置镜像仓库

sudo yum-config-manager \

--add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.更新yum

yum makecache fast

5.安装docker社区版

sudo yum install docker-ce docker-ce-cli containerd.io

6.启动docker

#关闭防火墙

systemctl stop firewalld

#禁止开机启动防火墙

systemctl disable firewalld

#启动docker

sudo systemctl start docker

#查看docker状态

sudo systemctl start docker

6.配置镜像

由于docker官方镜像仓库网速较差,我们需要设置国内镜像:

#设置中科大镜像

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

5.Docker基本操作

镜像操作

镜像名称一般分为两部分组成:[repository]:[tag] tag指的是版本,如果没有写版本就是最新版本。

对于镜像的操作无非就是crud:

docker build :构建镜像

docker pull :拉取镜像

docker image:查看镜像

docker rmi :删除镜像

docker push :推送镜像到服务端

docker save :保存镜像为一个压缩包(可以通过U盘copy)

docker save -o nginx.tar nginx:latest

nginx.tar为保存的压缩包的名字,后面跟的是镜像的名字和tag

docker load :可以加载压缩包为镜像

容器操作

docker run :创建容器并运行

命令解读:

docker run:创建并运行一个容器

--name:给容器起一个唯一的名字

-p:将宿主机端口与容器端口映射,冒号左侧是主机端口,右侧是容器端口

因为容器具有隔离性,客户不能直接访问,所以需要映射到宿主的端口,这样的话客户就可以访问。

-d:后台运行容器

docker pause:将运行的容器暂停

docker unpause:将暂停的容器启动

docker stop:将运行的容器停止

docker start:将停止的容器启动

暂停是将进程挂起,内存保留

停止是将进程杀死,内存删除

docker ps 查看所有运行的容器及状态

-a :参数可以查看所有容器,容器如果stop的话docker ps查看不了,加个-a参数就行

docker logs 查看容器运行日志

docker exec :进入容器执行命令

docker exec -it name bash

docker rm :删除指定容器

-f:docker rm 不能移除正在运行的命令,但是通过-f参数可以删除

数据卷(容器数据管理)

因为docker所有文件和数据都和容器耦合在一起:

不便于修改:

当我们要修改Nginx的html内容时,要进入容器内部修改,很放不方便

数据不可复用:

在容器内的修改对外是不可见的,所有修改对新创建的容器都是不可复用的,而且如果修改过多,时间久了你也不知道修改了什么。

升级维护困难:

数据在容器内,如果要升级容器,必然要删除旧的容器,所有的数据也跟着删除了

为了解决上面三个问题,就有了我们的数据卷,数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。Docker主机会管理很多个数据卷,每一个数据卷都会对于,宿主机/var/lib/docker/volumes/的真实的文件目录

拿nginx举例,nginx的静态资源都会放在/usr/share/nginx/html,配置文件会放在/etc/nginx/confg。我们可以让容器内部的这两个文件与数据卷关联。如果修改任何一方,另一方也会同步更新。 数据卷的这种关联特性,可以解决前两个问题,如果需要升级,只需要挂载之前的数据卷就可以了。第三个问题也迎刃而解。

操作数据卷

数据卷操作基本语法如下:

docker volume [COMMAND]

docker volume 命令是数据卷操作,根据命令后跟随的command来确定下一步操作:

create:创建一个volume

inspect:显示一个或多个volume的信息

ls:列出所有的volume

prune:删除未使用的volume

rm:删除一个或多个指定的volume

挂载数据卷

我们在创建容器时,可以通过-v参数来挂载一个数据卷到某个容器目录

docker run --name nginx -p 80:80 -v html:/usr/share/nginx/html -d nginx

通过这个命令我们可以看到nginx的默认页面已经关联到我们宿主机具体的文件夹里面了。如果挂载的数据卷如htlm不存在,会自动创建!

6.Dockerfile自定义镜像

镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

镜像是一个分层结构,每一层称为一个Layer:

BaseImage层:包含基本系统函数库、环境变量、文件系统

Entrypoint:入口,镜像中应用启动的命令

其他:在BaseImage基础上添加依赖、安装程序,完成整个应用的安装和配置

Dockerfile语法

什么是Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建,每一个指令都会形成一层Layer

Dockerfile的常见命令

7.DockerCompose

什么是DockerCompose

Docker Compose可以基于Compose文件帮我们快速部署分布式应用,而无需手动一个个创建和运行容器,DockerCompose的作用是帮我们快速部署分布式应用,无需一个一个微服务去构建镜像和部署

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。语法格式如下:

其实就是将docker run 命令的参数转换成指令

安装DockerCompose

直接在release中下载对应的linux发行版【docker-compose-linux-x86_64】
https://github.com/docker/compose/releases/tag/v2.18.1

下载完后将软件上传至 Linux的【/usr/local/bin】目录下然后重命名:

sudo mv docker-compose-linux-x86_64 docker-compose

授予权限:

sudo chmod +x /usr/local/bin/docker-compose

然后就完事了

卸载

rm /usr/local/bin/docker-compose

docker-compose --version #如果不出现版本信息,则表示卸载成功

常用命令:

# 前台启动, 启动项目中的所有服务。

docker-compose up

# 后台启动, 启动所有服务并在后台运行。

docker-compose up -d

# 停止所有服务。

docker-compose stop

restart

docker-compose restart重启服务容器。

docker-compose restart # 重启工程中所有服务的容器

docker-compose restart nginx # 重启工程中指定服务的容器

start

docker-compose start启动服务容器。

docker-compose start # 启动工程中所有服务的容器

docker-compose start nginx # 启动工程中指定服务的容器

stop

docker-compose stop停止服务容器。

docker-compose stop # 停止工程中所有服务的容器

docker-compose stop nginx # 停止工程中指定服务的容器

# 删除服务容器(容器)

docker-compose down

# 输出日志,不同的服务输出使用不同的颜色来区分

docker-compose logs

# 跟踪日志输出

docker-compose logs -f

8.Docker镜像仓库

镜像仓库有公有和私有两种形式:

公共仓库:例如Docker Hub,网易云镜像服务、DaoCloud镜像服务、阿里云镜像服务等。

除了使用公开仓库外,用户还可以本地搭建私有Docker Registry。企业自己的镜像最好采用私有Registry来实现。从而达到保护商业机密的目的

私有镜像仓库的搭建

配置Docker信任地址

vi /etc/docker/daemon.json

添加属性 insecure-registries(192.168.137.1这是我自己电脑的ipv4地址)如果有多个属性记得加”,“

"insecure-registries":["http://192.168.137.1:8080"]

重加载

systemctl daemon-reload

重启docker

然后导入我们写的compose文件:

📎docker-compose.yml

然后运行

docker-compose up -d

输入http://192.168.10.8:8080/查看,启动成功

这样我们的私有镜像仓库就搭建完毕了

在私有镜像仓库里拉取或推送镜像

打包:

docker tag nginx:latest 192.168.10.8:8080/my-nginx:1.0

上传:

拉取:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GitHub】github学生认证,使用copilot教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&a…

Python PyTorch 获取 MNIST 数据

Python PyTorch 获取 MNIST 数据 1 PyTorch 获取 MNIST 数据2 PyTorch 保存 MNIST 数据3 PyTorch 显示 MNIST 数据 1 PyTorch 获取 MNIST 数据 import torch import numpy as np import matplotlib.pyplot as plt # type: ignore from torchvision import datasets, transform…

如何修复U盘在Windows 10上断开又重新连接的问题?这里有方法

序言 有时,当你把U盘连接到电脑上时,U盘每隔几秒钟就会断开连接并重新连接,这导致你无法正常复制和传输文件,这真的很烦人。硬件或驱动程序可能有问题。 在这种情况下,你需要确保此U盘与其他计算机是否正常工作。如果是,则表示你的驱动器没有问题。如果不是,不要担心。…

基于RK3588的全国产鸿蒙边缘计算工控机在智能交通ETC收费系统的应用

1.1 产品简介 基于智能交通、工业互联等行业快速智能化发展的需求&#xff0c;以 OpenHarmony 为框架开发嵌入 HamonyOS&#xff0c;打造了具有高智能、高可靠、高安全的自主 可控的边缘处理器 XM-RK3588。 图 1-1 边缘处理器 HamonyOS强化 IoT 互联互动能力&#xff0c;让边缘…

Java-Collection集合极其遍历

Collection是Java中的一种单列集合&#xff0c;即每次添加只能添加一个元素。它是单列集合的祖宗接口&#xff0c;其功能是全部单列集合都可以使用的 常用方法&#xff1a; public boolean add(E e) 将特定对象添加到当前集合中public void clear() 清空集合public boolean r…

SWOT分析法:知彼知己的战略规划工具

文章目录 一、什么是SWOT分析法二、SWOT分析法如何产生的三、SWOT分析法适合哪些人四、SWOT分析法的应用场景五、SWOT分析法的优缺点六、SWOT分析实例 一、什么是SWOT分析法 SWOT分析法是一种用于评估组织、项目、个人或任何其他事物的战略规划工具。SWOT是Strengths&#xff…

我们该如何看待AIGC(人工智能)

目录 AIGC的概述&#xff1a; AIGC的发展经历&#xff1a; AIGC的概述&#xff1a; [TOC]( &#x1f680;文章目录) ---AIGC全称为AI-Generated Content&#xff0c;指基于生成对抗网络GAN、大型预训练模型等人工智能技术&#xff0c;通过已有数据寻找规律&#xff0c;并通过…

智能化安全防护:AI防火墙的原理与应用

随着人工智能技术的迅猛发展&#xff0c;其在各个领域的应用也日益广泛。作为引领数字化转型的重要力量&#xff0c;AI技术为我们的生活和工作带来了前所未有的便利与效率。在通信领域&#xff0c;人工智能的应用同样展现出了巨大的潜力和价值&#xff0c;特别是在网络安全防护…

vCenter 物理配置与虚拟机配置对应关系

目录 背景现状概念存储池物理与虚拟资源分配及使用情况汇总 分配cpu内存硬盘VSAN、VM Encryption和VVOL No Requirements厚置备和精简置备 总结cpu内存硬盘建议 背景 现在有三台服务器&#xff0c;需要统计上面所有服务占用的资源情况与总和&#xff0c;目的是看还有多少资源可…

Pandas数据分析小技巧

Pandas数据分析小技巧&#xff1a;提升数据处理效率与准确性的秘诀 Pandas是一个强大的Python数据分析库&#xff0c;它提供了快速、灵活且富有表现力的数据结构&#xff0c;使得数据清洗、转换、分析等操作变得简单而高效。本文将介绍一些Pandas数据分析的小技巧&#xff0c;…

【Linux】谈谈shell外壳是什么?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

火车头采集怎么发布到Wordpress

火车头采集怎么快速发布到Wordpress系统&#xff0c;可以按照以下步骤操作&#xff1a; 目录 1. Wordpress火车头采集发布模块 2. 发布模块内容参数映射&#xff0c;火车头采集发布数据到Wordpress 3. 简数采集一键发布到Wordpress方法 1. Wordpress火车头采集发布模块 如…

主成分分析PCA原理以及特征

一、PCA原理 原始数据 x ∈ R N x\in R^N x∈RN&#xff0c;经过PCA投影后的数据 y A x &#xff0c; y ∈ R P yAx&#xff0c;y\in R^P yAx&#xff0c;y∈RP 其中&#xff0c; A ∈ R P N A\in R^{P\times N} A∈RPN 二、PCA特征 1、降低数据的维度 2、提取数据的特征…

链表的回文结构(画图精讲)

题目的讲解 解决思路 1&#xff0c;先找中间节点 2&#xff0c;然会进行逆置 3&#xff0c;最后进行对比 1&#xff0c;找到中间节点 这个我们采取快慢指针&#xff0c;来找到中间节点 快慢指针是一种常用的技巧&#xff0c;用于在链表或数组中找到中间节点、检测循环或者解决其…

快速理解Laravel容器(IOC、DI、Provider、Contract)

源码理解思维的提升 分享一些个人见解。 Laravel里面的某些概念&#xff0c;就像魔术一样&#xff0c;看起来很厉害&#xff0c;当知道魔术怎么变的&#xff0c;就会认为也不过如此。所以不必感觉Laravel里有些概念难以理解。 应当抛除被框架约束思维的枷锁&#xff0c;用PHP…

【ContextCapture建模精品教程】PhotoScan空三成果导入ContextCapture建模教程

【ContextCapture建模精品教程】PhotoScan空三成果导入ContextCapture建模教程 文章目录 前言一、PhotoScan软件空三解算二、ContextCapture软件操作总结前言 ContextCapture是一款行业应用广的三维建模的软件,但是ContextCapture处理的空三能力比较弱,导致出现后期模型效果…

Golang流程控制语句

文章目录 顺序控制分支控制if语句switch语句 循环控制for循环语句 跳转控制break语句continue语句goto语句return语句 顺序控制 顺序控制 默认情况下&#xff0c;Go代码执行顺序是按照从上到下依次执行的&#xff0c;这种按照顺序执行的代码就叫做顺序语句。如下&#xff1a; …

Linux 学习之路 -- 进程篇 -- 进程控制

目录 一、进程终止 <1>使用语言和系统自带的方法&#xff0c;进行转换 <2>自定义错误码 <3>小结&#xff1a; <2>两个接口exit / _exit 二、进程等待 <1>简单了解 <2>wait调用 <3>waitpid调用 <4>status <1>W…

第十四章大数据和数据科学4分

14.1 引言 14.1.3 科学理念 1.数据科学 数据科学将数据挖掘、统计分析和机器学习与数据集成整合&#xff0c;结合数据建模能力&#xff0c;去构建预测模型、探索数据内容模式。 数据科学依赖于&#xff1a; 1&#xff09;丰富的数据源。具有能够展示隐藏在组织或客户行为中不…

顺序表的应用-通讯录

顺序表的应用-通讯录 1.操作2.功能要求2.1.功能要求2.2.思路小结2.3.文件梳理2.4.代码实现"SeqList.h""Contact.h""SeqList.c""Contact.c""test.c" 1.操作 链接: 顺序表专题 这篇文章介绍了顺序表的概念与基本操作。 本文将…