Docker的介绍及应用

news2024/12/24 9:52:00
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.coloradmin.cn/o/1633384.html

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

相关文章

笔试刷题-Day11

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、游游的水果大礼包 题目链接&#xff1a;https://ac.nowcoder.com/acm/problem/255193 类型&#xff1a;求一个表达式的最值&#xff08;并不是贪心,因为该题条件太少&…

毕业设计注意事项(嘉庚学院2024届更新中)

1.开题 根据学院发的开题报告模板完成&#xff0c;其中大纲部分可参考资料。 2.毕设以及实习 2.1 毕设 根据资料中的毕设评价标准&#xff0c;对照工作量 2.2 实习材料提交 2.2.1 校外实习 实习前&#xff1a;根据学院要求&#xff0c;填写好实习承诺书&#xff0c;实习单位…

贝叶斯统计实战:Python引领的现代数据分析之旅

贝叶斯统计这个名字取自长老会牧师兼业余数学家托马斯贝叶斯(Thomas Bayes&#xff0c;1702—1761)&#xff0c;他最先推导出了贝叶斯定理&#xff0c;该定理于其逝世后的1763年发表。但真正开发贝叶斯方法的第一人是Pierre-Simon Laplace(1749—1827)&#xff0c;因此将其称为…

清华同方电脑c盘满了怎么清理?别慌,学会这几个实用技巧

随着日常使用电脑&#xff0c;C盘&#xff08;通常是系统盘&#xff09;往往会积累大量的文件、程序和系统缓存&#xff0c;导致磁盘空间逐渐减少。当C盘空间不足时&#xff0c;电脑的性能可能会受到影响&#xff0c;甚至导致一些程序无法正常运行。对于清华同方电脑的用户来说…

2000.1-2023.8中国经济政策不确定性指数数据(日度、月度)

2000.1-2023.8中国经济政策不确定性指数数据&#xff08;日度、月度&#xff09; 1、时间&#xff1a;日度&#xff1a;2001.1.1-2022.06.17&#xff0c;月度2000.1-2023.8 2、指标&#xff1a;CNEPU&#xff08;经济政策不确定性指数&#xff09; 3、来源&#xff1a;China…

[BJDCTF 2020]base??(古典密码)

题目&#xff1a; 从题目我们看出dict是一个python的字典&#xff0c;但与原始的base64的表不同&#xff0c;所以我们想到通过替换原始的表&#xff0c;来对密文解密。 my_dict{0: J, 1: K, 2: L, 3: M, 4: N, 5: O, 6: x, 7: y, 8: U, 9: V, 10: z, 11: A, 12: B, 13: C, 14:…

2024五一杯ABC题资料合集+代码+参考论文!!!

一.赛题思路 (赛题出来以后第一时间在群内分享) 二.比赛日期和时间 比赛开始时间:2024年5月1日(周三)10;00 比赛结束时间:2024年5月4日(周六&#xff09;12:00 三.将在明天分享的资料合集如下 4.我们这边会分享22年的题目完整全部的过程 5.数学建模的29个通用模型及MATLAB…

吴恩达2022机器学习专项课程(一)7.2 逻辑回归的简化成本函数

问题预览/关键词 本节课内容逻辑回归的损失函数简化之后的形式是&#xff1f;为什么可以简化&#xff1f;成本函数的通用形式是&#xff1f;逻辑回归成本函数的最终形式是&#xff1f;逻辑回归为什么用对数损失函数计算成本函数&#xff1f;为什么不直接给出逻辑回归损失函数的…

Makefile 快速入门

参考自:Makefile 20分钟入门&#xff0c;简简单单&#xff0c;展示如何使用Makefile管理和编译C代码_哔哩哔哩_bilibili 注: 视频中用的是C&#xff0c;博主这里用C语言实现 喜欢老师的于老师的还请多多点赞&#xff0c;觉得博主写得不错的&#xff0c;也可以点赞、收藏哦 本…

面对网络安全,做好风险评估对企业会带来哪些帮助

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为企业不容忽视的重要议题。企业作为社会经济活动的主要参与者&#xff0c;其网络安全不仅关系到自身的生存与发展&#xff0c;更与国家的经济安全、社会稳定息息相关。因此&#xff0c;企业必须高度重视…

UG NX二次开发(C#)-去掉模型更新的警报提示窗口

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、前言2 、解决方案 1、前言 在我的微信群《UG NX二次开发学习讨论》中有个群友发出一个问题&#xff0c;就是参数化模型修改后&#xff0c;有时更新是正确的&…

STM32开启停止模式,用外部中断唤醒程序运行

今天学习了一下STM32的停止模式&#xff0c;停止模式下&#xff0c;所有外设的时钟和CPU的电源都会被关闭&#xff0c;所以会很省电&#xff0c;打破这种停止模式的方式就是外部中断可以唤醒停止模式。要想实现这个功能&#xff0c;其实设置很简单的&#xff0c;总共就需要两步…

【数据结构初阶】时间复杂度和空间复杂度详解

今天我们来详细讲讲时间复杂度和空间复杂度&#xff0c;途中如果有不懂的地方可翻阅我之前文章。 个人主页&#xff1a;小八哥向前冲~-CSDN博客 数据结构专栏&#xff1a;数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 c语言专栏&#xff1a;c语言_小八哥向前冲~的博客-CS…

OceanBase 助力同方智慧能源,打造安全可靠、高性能的能源数据架构

本文作者&#xff1a;丁泽斌&#xff0c;同方智慧能源数据库工程师 业务背景 作为同方股份有限公司旗下的领军企业&#xff0c;同方智慧能源集团矢志成为全球领先的综合智慧能源解决方案提供商。凭借中核集团和清华大学的科技实力&#xff0c;专注于向建筑、交通、工业、北方供…

Linux工具篇 之 vim概念 操作 及基础指令讲解

学校不大 创造神话 讲桌两旁 陨落的王 临时抱佛脚 佛踹我一脚 书山有路勤为径 游戏玩的很起劲 想要计算机学的好&#xff0c;我的博客列表是个宝 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀…

linux的lcd屏幕调试

x2600-lcd的sat101cp50d24b1屏幕的驱动调试 1.硬件关联 屏幕型号&#xff1a;sat101cp50d24b1 原理图&#xff1a; 很显然&#xff0c;这是RGB666显示格式的屏幕&#xff0c;RGB管脚DATA0-DATA17--为数据线 DEN 数据使能线。 VSYNC 垂直同步信号线。 HSYNC 水平同步信号线。…

vue-print-nb插件来实现打印功能——打印布局及尺寸处理

之前写过一篇文章是关于vue-print-nb插件实现打印功能&#xff0c; vue插件——vue-print-nb 实现打印功能:http://t.csdnimg.cn/ahuxp 但是在实际使用过程中&#xff0c;打印的效果不尽如人意。下面把打印页面和遇到的问题做一下汇总&#xff1a; 1.html代码——给打印元素绑…

vivado Aurora 8B/10B IP核(6)-本地流量控制(Native Flow Control)

Aurora 8B/10B 协议包括本地流控制&#xff08;NFC&#xff09;接口&#xff0c;其允许接收机通过指定必须 放入数据流的空闲数据跳数来控制接收数据的速率。 甚至可以通过请求发送器临时发送空闲&#xff08;XOFF&#xff09; 来完全关闭数据流.NFC 通常用于防止 FIFO 溢出条…

Python | Leetcode Python题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; class Solution:def totalNQueens(self, n: int) -> int:def backtrack(row: int) -> int:if row n:return 1else:count 0for i in range(n):if i in columns or row - i in diagonal1 or row i in diagonal2:continuecolumns.add…

【Unity基础】TextMeshPro组件学习过程记录

目录 1.TextMeshPro组件渲染创建文本RTL Editor字体Font Asset字体加粗&#xff0c;下划线等字体大小控制字体颜色控制字体渐变控制字符间隔、单词间隔、行间距、段落间距控制WrappingUV映射控制代码 2.TextMeshPro组件AssetFace InfoGeneration Setting 3.使用Dynamic SDF Sys…