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.mzph.cn/news/828133.shtml

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

相关文章

【docker】

下载脚本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce yum install -y yum-utils device-mapper-persistent-data lvm2 --s…

Redis概述

目录 redis概述1. 什么是redis2. 为什么使用redis3. redis为什么快4. 哪些场景下使用redis 参考 Redis概述 Redis在线体验网站 Try Redis 基础概念&#xff0c;后续知识有时间整理&#xff08;数据结构、核心知识、高可用&可扩展、应用实践&#xff09; redis概述 1. 什么是…

YOLOv9改进策略 | 添加注意力篇 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

Mac中隐私安全性设置-打开任何来源

文章目录 **Mac中隐私安全性设置-打开任何来源**一、目的二、打开方式 Mac中隐私安全性设置-打开任何来源 一、目的 从外部下载的软件频繁打不开&#xff0c;需要从隐私安全性中重新选择一下&#xff1b;默认Mac隐藏了任何来源 二、打开方式 打开终端&#xff0c;输入一下命…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

算法提高 第一期 KMP扩展算法

1## 具体思路&#xff1a; 和KMP算法的是想类似&#xff0c;充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串&#xff08;以模式串为开头的字串&#xff09;的真前缀和真后缀&#xff08;指子串的开始字符与子串的最后字符相等的…

docker中的资源控制

前言 docker 使用cgrqup控制资源&#xff0c;K8S 里面也有limit&#xff08;使用上限&#xff09; docker通过cgroup来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 Control …

【单链表】LeetCode:203.移除链表元素

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 该题是数据结构&#xff0c;单链表的一道基本题&#xff0c;刚刚准备学习数据结构&#xff0c;或者正在学习数据结…

JRT多服务器同步程序

之前的JRT只部署在一个服务器&#xff0c;实际运用可能会有数台、数十台、或者更多服务器。那么多台服务器就需要程序同步机制。这里借助Rsync同步&#xff0c;但是有个问题是Rsync同步jar之后他不知道是否需要重启站点&#xff0c;为此实现java控制台驱动Rsync&#xff0c;重定…

前端css中的transform(转换)的使用

前端css中的transform的使用 一、前言二、流程图三、举例&#xff08;一&#xff09;、平移1.平移&#xff0c;源码12.源码1运行效果(1).视频效果(2).截图效果 3.平移3d效果&#xff0c;源码24.源码2运行效果&#xff08;1&#xff09;、视频效果&#xff08;2&#xff09;、截…

深入了解计算机系统——利用循环展开对程序的优化

系列文章&#xff1a; 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 一些概念CPE 初步优化消除不必…

python爬虫之爬取文本内容(2)

一、基本案例 #注意&#xff1a;需要将requests包换成2.27.1 #中文编码gbk也可能是utf-8 import requests #from bs4 import BeautifulSoupif __name__ __main__:url https://www.biqg.cc/book/6909/1.html#目标访问网站url#伪装头信息的引入header {"User-Agent"…

Golang | Leetcode Golang题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; func firstMissingPositive(nums []int) int {n : len(nums)for i : 0; i < n; i {for nums[i] > 0 && nums[i] < n && nums[nums[i]-1] ! nums[i] {nums[nums[i]-1], nums[i] nums[i], nums[nums[i]-1]}}for i …

Redis入门到通关之Redis实现Session共享

文章目录 ☃️前期概要☃️基于Session实现登录方案☃️现有方案存在的问题☃️Redis代替Session的业务流程❄️❄️设计key的结构❄️❄️设计key的具体细节❄️❄️整体访问流程 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博…

Windows 10 安装配置WSL2(Ubuntu 20.04)教程

Windows 10 安装配置WSL2&#xff08;Ubuntu 20.04&#xff09;教程 一、WSL简介 WSL&#xff08;Windows Subsystem for Linux&#xff09;是一个兼容层&#xff0c;允许在Windows 10上原生运行Linux二进制可执行文件。 二、安装WSL2 3.1 传统手动安装 更新系统&#xff…

OFDM同步技术

文章目录 前言一、OFDM 同步技术二、MATLAB 仿真1、STO 估计技术①、核心源码②、仿真结果 2、CFO 估计技术①、核心源码②、仿真结果 三、资源自取 前言 本文对 OFDM 同步技术以思维导图的形式呈现&#xff0c;有关仿真部分进行了讲解实现。 一、OFDM 同步技术 OFDM 同步技术…

前端工程化02-复习jQuery当中的插件开发

2、jQuery插件开发 在我们开发的时候、有时候jQuery提供的方法并不能满足我们的需求&#xff0c;如果我们想给jQuery扩展一些其他的方法&#xff0c;那这种情况下&#xff0c;可能会需要写一个插件 jQurey官网&#xff1a;jquery.com 例如一些、图片懒加载插件、滚动的插件、…

阿里云效中的Story Point是什么,代表的是什么意思,该怎么填

文章目录 Story Point是什么一个合理的Point应该能让团队的其他成员相对准确的评估任务难度根据自己对任务难度的分析对比团队Point标准评估一个任务是多少Point点时建议三个人评估 这是我阅读并参考的文章 中文翻译Story Point 故事 点&#xff08;观点&#xff0c;论点&#…

GDPU unity游戏开发 碰撞体与关节

让你设计的角色跑起来吧&#xff0c;可以是动画&#xff0c;也可以是碰撞器的运动。 运动小车 找到小车素材&#xff0c;导入到层级面板。然后可以新建一个地面让小车在上面运动&#xff0c;新建一个方块当障碍物。 摆放好后&#xff0c;要加组件。记住&#xff0c;在unity中运…

多商家AI智能名片商城系统(开源版)——构建高效数字化商业新生态

一、项目概述 1、项目背景 1&#xff09;起源 随着数字化时代的快速发展&#xff0c;传统名片和商城系统已经难以满足企业日益增长的需求。商家需要更高效、更智能的方式来展示自己的产品和服务&#xff0c;与消费者进行互动和交易。同时&#xff0c;开源技术的普及也为开发…