安装及管理docker

文章目录

  • 1.Docker介绍
  • 2.Docker安装
  • 3.免sudo设置
  • 4. 使用docker命令
  • 5.Images
  • 6.运行docker容器
  • 7. 管理docker容器
  • 8.创建image
  • 9.Push Image

1.Docker介绍

Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机,但容器更具可移植性,更节约资源,并且更依赖于主机操作系统。

常见组件简介如下

  • Docker for Mac − It allows one to run Docker containers on the Mac OS.
  • Docker for Linux − It allows one to run Docker containers on the Linux OS.
  • Docker for Windows − It allows one to run Docker containers on the Windows OS.
  • Docker Engine − It is used for building Docker images and creating Docker containers.
  • Docker Hub − This is the registry which is used to host various Docker images.
  • Docker Compose − This is used to define applications using multiple Docker containers.

接下来,此文章将记录在 Ubuntu 20.04 上安装和使用 Docker Community Edition (CE)。 安装 Docker 本身,使用容器和镜像,并将镜像推送到 Docker 存储库。

2.Docker安装

Ubuntu 官方存储库中提供的 Docker 安装包可能不是最新版本。 为了确保获得最新版本,我们将从官方 Docker 存储库安装 Docker。 为此,我将添加一个新的包源,添加 Docker 的 GPG key以确保下载的文件是有效的,然后安装该包。
首先,更新现有的软件包列表:

sudo apt update

接下来,安装一些必备包,让 apt 通过 HTTPS来获取相关package:
这里包含5个必备包:apt-transport-https、ca-certificates 、curl 、software-properties-commo

sudo apt install apt-transport-https ca-certificates curl software-properties-common

然后将官方 Docker 存储库的 GPG key添加到系统中:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将 Docker 存储库添加到 APT 源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

这将使用新添加的repo中的 Docker 包更新我们的package数据库。
确保要从 Docker 存储库而不是默认的 Ubuntu 存储库进行安装:

apt-cache policy docker-ce

output:
docker-ce:
Installed: (none)
Candidate: 5:19.03.93-0ubuntu-focal
Version table:
5:19.03.93-0ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

insalled:(none)代表docer-ce尚未安装
Candidate: 5:19.03.93-0ubuntu-focal 意指候选安装,版本是 5:19.03.93-0ubuntu-focal

如果不清楚包的名字,使用如下命令

apt-cache pkgnames|grep docker

output:
golang-github-docker-notary-dev
docker-ce
docker-ce-cli
docker.io

安装docker

sudo apt install docker-ce

Docker 现在应该已安装,守护进程已启动,并且该进程可以在os重启后自动启动。 检查它是否正在运行:

sudo systemctl status docker

Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

现在安装 Docker 不仅提供了Docker 服务(守护进程),还提供 docker 命令行工具或 Docker 客户端。

3.免sudo设置

默认情况下,docker命令只能由root用户或docker组中的用户运行,该组是在Docker安装过程中自动创建。 如果尝试运行 docker 命令而不使用 sudo 前缀或不在 docker 组中,将会获得到如下输出:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run --help’.

如果想避免在运行 docker 命令时输入 sudo,需将用户名添加到 docker 组:

sudo usermod -aG docker docker

要应用新的组成员身份,需要注销服务器并重新登录,或输入以下内容:

su - docker

通过输入以下内容确认docker用户现已添加到 docker 组:

groups

Output
root docker

4. 使用docker命令

使用 docker 包括向其传递一系列选项和命令,后跟参数。 语法采用以下形式:

docker [option] [command] [arguments]

要查看所有可用的子命令,输入:

docker

从 Docker 19 开始,可用子命令的完整列表包括:

  attach      Attach local standard input, output, and error streams to a running containerbuild       Build an image from a Dockerfilecommit      Create a new image from a container's changescp          Copy files/folders between a container and the local filesystemcreate      Create a new containerdiff        Inspect changes to files or directories on a container's filesystemevents      Get real time events from the serverexec        Run a command in a running containerexport      Export a container's filesystem as a tar archivehistory     Show the history of an imageimages      List imagesimport      Import the contents from a tarball to create a filesystem imageinfo        Display system-wide informationinspect     Return low-level information on Docker objectskill        Kill one or more running containersload        Load an image from a tar archive or STDINlogin       Log in to a Docker registrylogout      Log out from a Docker registrylogs        Fetch the logs of a containerpause       Pause all processes within one or more containersport        List port mappings or a specific mapping for the containerps          List containerspull        Pull an image or a repository from a registrypush        Push an image or a repository to a registryrename      Rename a containerrestart     Restart one or more containersrm          Remove one or more containersrmi         Remove one or more imagesrun         Run a command in a new containersave        Save one or more images to a tar archive (streamed to STDOUT by default)search      Search the Docker Hub for imagesstart       Start one or more stopped containersstats       Display a live stream of container(s) resource usage statisticsstop        Stop one or more running containerstag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEtop         Display the running processes of a containerunpause     Unpause all processes within one or more containersupdate      Update configuration of one or more containersversion     Show the Docker version informationwait        Block until one or more containers stop, then print their exit codes

查看特定命令可用的选项,输入docker docker-subcommand --help,如要进一步查看上面stop子命令的选项

docker stop --help

Usage: docker stop [OPTIONS] CONTAINER [CONTAINER…]
Stop one or more running containers
Aliases:
docker container stop, docker stop
Options:
-s, --signal string Signal to send to the container
-t, --time int Seconds to wait before killing the container

查看有关 Docker 的系统面信息,使用:

docker info

output:
Client: Docker Engine - Community
Version: 25.0.4
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.13.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.24.7
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 6
Running: 0
Paused: 0
Stopped: 6
Images: 4
Server Version: 25.0.4
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
Kernel Version: 5.4.0-172-generic
Operating System: Ubuntu 20.04.6 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.925GiB
Name: anzfam
ID: bb7ac293-d8c0-4e8f-ac9b-61a802c06a7c
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

5.Images

Docker 容器是从 Docker image构建的。 默认情况下,Docker 从 Docker Hub 中提取这些image,Docker Hub 是由 Docker 项目背后的公司 Docker 管理的 Docker registry。 任何人都可以在 Docker Hub 上托管其 Docker image,因此大家需要的大多数应用程序和 Linux 发行版都会在那里有托管的image。
注:image后面将统一称作镜像
要检查是否可以从 Docker Hub 访问和下载镜像,输入:

docker run hello-world

or

docker container run  hello-world

注意:这里列出了两种命令写法,前者是旧的命形式,后者是新的命令形式,这种dock+object+command的形式更容易记忆,但为了保持向后兼容性,Docker 仍然保留了旧的命令形式,因此用户可以根据自己的习惯和偏好选择使用哪种形式。
后面的章节中,我也会尽量将这两种形式都列出来

输出将表明 Docker 工作正常:

Output
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

Docker 最初无法在本地找到 “hello-world” 镜像,因此它从默认存储库 Docker Hub 下载该镜像。 下载镜像后,Docker 从镜像创建一个容器,并执行容器内的应用程序并显示消息。

可以使用 docker 命令连同search 子命令来搜索 Docker Hub 上可用的镜像。 例如,要搜索 Ubuntu 镜像,输入:

docker search ubuntu

该脚本将抓取 Docker Hub 并返回名称与搜索字符串匹配的所有镜像的列表。 输出将类似于以下内容:

NAME                             DESCRIPTION                                     STARS     OFFICIAL
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   16927     [OK]
neurodebian                      NeuroDebian provides neuroscience research s…   106       [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   298       [OK]
open-liberty                     Open Liberty multi-architecture images based…   64        [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   115       [OK]
ubuntu-debootstrap               DEPRECATED; use "ubuntu" instead                52        [OK]
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   112
ubuntu/squid                     Squid is a caching proxy for the Web. Long-t…   84
ubuntu/cortex                    Cortex provides storage for Prometheus. Long…   4

在“OFFICIAL ”列中,“OK”表示由项目背后的公司构建和支持的镜像。 一旦确定要您想要使用的镜像像后,可以使用 pull 子命令将其下载到计算机。
执行以下命令将官方 ubuntu 镜像下载到计算机上:

docker pull ubuntu

将看到以下输出:

Output
Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

下载镜像后,您可以通过 run 子命令使用下载的镜像来运行容器。 如同在 hello-world 示例中看到的,如果当docker 连同他的子命令一起执行时镜像时尚未被下载,则 Docker 客户端将首先下载镜像,然后使用它运行容器。

要查看已下载到您的计算机的镜像,输入:

docker images

or

docker image ls

输出将类似于以下内容:

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        latest    ca2b0f26964c   9 days ago      77.9MB
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB

正如将在后面看到的,用于运行容器的镜像可以被修改并用于生成新镜像,然后可以将其上传(术语“push”)到 Docker Hub 或其他 Docker registry。

6.运行docker容器

在上面运行的 hello-world 容器是一个容器示例,仅在发出测试消息后运行并退出的。 功能简单,实际上容器比这个更有用,而且可以与之交互。 类似于虚拟机,只是更加节省资源。
作为示例,我们将使用新的 Ubuntu 镜像运行一个容器。 -i 和 -t 开关的组合可以使用 shell 访问容器交互:

docker run -it ubuntu

or

docker container run -it unbuntu

命令提示符应该会发生变化,反映现在正在容器内工作,将具有以下形式:

Output
root@d9b100f2f636:/#

记下命令提示符中的容器 ID。 在此示例中,它是 d9b100f2f636。 稍后当想要删除容器时,将需要该容器 ID 来识别该容器。
现在可以在容器内运行任何命令。 例如,让我们更新容器内的package数据库。 不需要在任何命令前加上 sudo 前缀,因为已经以 root 用户身份在容器内进行操作:

apt update

然后在其中安装任何应用程序。 我们现在尝试安装 Node.js:

apt install nodejs

这将会从官方 Ubuntu 存储库将 Node.js 安装到容器中。 安装完成后,验证 Node.js 是否已安装:

node -v

Output
v10.19.0

在容器内所做的任何变更将仅套用于该容器。
要退出容器,在提示符下输入 exit。

7. 管理docker容器

使用 Docker 一段时间后,计算机上将有许多active(正在运行)和inactive容器。 要查看active状态的容器,使用:

docker ps

or

docker container ls

output如下:

Output
CONTAINER ID        IMAGE               COMMAND             CREATED

在本文中,启动了两个容器; 一个来自 hello-world 镜像,另一个来自 ubuntu 镜像。 两个容器都不再运行,但它们仍然存在于系统上。

要查看所有容器(活动和非活动),需要使用 -a 开关,否则默认只显示running状态的容器

docker ps -a

or

docker ps container ls -a

Output:

1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie

查看创建的最新容器,使用 -l 开关:

docker ps -l

or

docker container ls -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 40 seconds ago                       quizzical_mcnulty

要启动已停止的容器,使用 docker start,后跟容器 ID 或容器名称。 现在尝试启动 ID 为 1c08a7a0d0e4 的基于 Ubuntu 的容器:

docker start 1c08a7a0d0e4

or

docker container start 1c08a7a0d0e4

容器将启动,可以使用 docker ps 查看其状态:

Output
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         3 minutes ago       Up 5 seconds

要停止正在运行的容器,使用 docker stop,后跟container_ID 或名称。 这次,我们将使用 Docker 为容器分配的名称,即 quizzical_mcnulty:

docker stop quizzical_mcnulty

or

docker container stop quizzical_mcnulty

一旦决定不再需要容器,使用 docker rm 命令删除它,再次使用容器 ID 或名称。 使用 docker ps -a 命令查找与 hello-world 镜像关联的容器 ID 或名称并将其删除。

docker rm youthful_curie

or

docker container rm youthful_curie

当然也可以启动一个新容器并使用 --name 开关为其命名。 还可以使用 --rm 开关创建一个容器,该容器在停止时会自行删除容器。

8.创建image

当启动一个 Docker 镜像时,可以像在虚拟机中一样创建、修改和删除文件。且所做的更改只会应用于该容器。也可以启动和停止它,但一旦使用 docker rm 命令销毁它,这些更改将永久丢失。
本节将展示如何将使用中的容器保存为一个新的 Docker 镜像。
在 Ubuntu 容器中安装 Node.js 后,现在有一个运行在镜像之上的容器,但该容器与前面用于创建它的原始镜像不同。但是有可能希望以后将这个 Node.js 容器作为新镜像的基础。
使用以下命令将更改提交到新的 Docker 镜像实例。从容器创建一个新的镜像

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

or

docker container commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
  • -m 开关用于commit message,提交时的说明文字,帮助其他人了解这个镜像
  • -a 用于指定作者。
  • container_id 是您在本章前面启动交互式 Docker 会话时记下的 ID。
  • repository/new_image_name,除非在 Docker Hub 上创建了其他repository,否则repository通常是您的 Docker Hub 用户名。
    例如,对于用户 sammy,容器 ID 为 d9b100f2f636,命令为:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

or

docker container commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

当提交镜像时,新镜像将保存在计算机本地。 接下来,我们将镜像推送到 Docker registry(例如 Docker Hub),以便其他人可以访问它。

再次list docker images ,将显示新镜像像及其派生它的旧镜像:

docker images

or

docker image ls

Output
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB

在此示例中,ubuntu-nodejs 是新镜像,它源自 Docker Hub 中的现有 ubuntu 镜像。 大小差异反映了所做的改变。 在这个例子中,变化是安装了 NodeJS。 因此,下次需要使用预装 NodeJS 的 Ubuntu 来运行容器时,可以只使用新镜像。
还可以从 Dockerfile 构建镜像,这样就可以在新镜像中自动安装软件。 关于dockerfile构建镜像可以参考其他文章

9.Push Image

从现有镜像创建新镜像后,下一个步骤是与选定的几个朋友、Docker Hub 上的整个世界或您有权访问的其他 Docker registry共享它。 要将镜像推送到 Docker Hub 或任何其他 Docker registry,必须在docker hub官网上注册一个账户。
这里展示怎样将Docker 镜像推送到 Docker Hub。 要了解如何创建自己的私有 Docker registry,请查看如何在设置私有 Docker registry。

要推送镜像,请首先登录 Docker Hub。

docker login -u docker-registry-username

系统将提示使用 Docker Hub 密码进行身份验证。 如果指定了正确的密码,身份验证应该会成功。

注意:如果您的 Docker registry用户名与用于创建镜像的本地用户名不同,将必须使用您的registry用户名来tag镜像。 对于最后一步中给出的示例,可以输入:

docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

假如我的本地用户名是sammy,而docker hub用户名是lakerhu,则应该tag如下:

docker tag sammy/ubuntu-nodejs tommy/ubuntu-nodejs

然后使用以下方式push 这个镜像:

docker push docker-registry-username/docker-image-name

要将 ubuntu-nodejs 镜像推送到 lakerhu存储库,命令为:

docker push lakerhu/nodejs

or

docker image push lakerhu/nodejs

Output
Using default tag: latest
The push refers to repository [docker.io/lakerhu/nodejs]
9ba80eacb2ad: Pushing 14.42MB/132.9MB
9ba80eacb2ad: Pushing 89.34MB/132.9MB
9ba80eacb2ad: Pushed

将镜像推送到registry后,它应该列在您帐户的仪表板上,如下图所示
在这里插入图片描述

如果推送尝试导致此类错误,则可能没有登录:

Output
The push refers to a repository [docker.io/lakerhu/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

使用 docker login 登录并重复推送尝试。 然后验证它是否存在于您的 Docker Hub 存储库页面上。

现在可以使用 docker pull sammy/ubuntu-nodejs 将镜像拉取到新机器并使用它来运行新容器。

docker pull lakerhu/nodejs

or

docker image pull lakerhu/nodejs

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

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

相关文章

Linux -- 线程互斥

一 线程互斥的概念 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。但有时候,很多变量都需要在线程间共享,这样的…

淘宝基于Nginx二次开发的Tengine服务器

最近在群里看到这样一张阿里云网关报错的截图,我保存下来看了下 看到下面有 Tengine提供技术支持,这个Tengine是什么东西呢?我搜索了下似乎是淘宝在nginx的基础上自己改的Web服务器 Tengine还支持OpenResty框架,该框架是基于Ngin…

ARM中专用指令(异常向量表、异常源、异常返回等)

状态寄存器传送指令 CPSR寄存器 状态寄存器传送指令:访问(读写)CPSR寄存器 读CPSR MRS R1, CPSR R1 CPSR 写CPSR MSR CPSR, #0x10 0x10为User模式,且开启IRQ和FRQ CPSR 0x10 在USER模式下不能随意修改CPSR,因为USER模式…

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

【Android】工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决

工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决 1-Factory Mode是什么&#xff1f;2-Factory Mode的显示界面3-找到factory模块中对应设置字体尺寸的代码4-分析与修改代码 Tips 1-Factory Mode是什么&#xff1f; 在Android手机中&#xff0c;Factory Mode&…

Seata 2.x 系列【8】Spring Cloud 集成客户端

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 问题演…

零基础如何学习Web 安全,如何让普通人快速入门网络安全?

前言 网络安全现在是朝阳行业&#xff0c;缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全&#xff0c;初级也会慢慢的卷起来&#xff0c;但是岗位多不用怕&#xff0c;以后各大厂也都会要网络安全人…

读西游记第一回:西游记世界格局

天地之数&#xff1a; 元&#xff1a;十二万九千六百岁&#xff08;129600年&#xff09; 1元12会&#xff1a;子、丑、寅、卯、巳、午、未、申、酉、戌、亥。每会18000年。与12地支对应。 亥会期&#xff1a;前5400年混沌期&#xff0c;后5400年&#xff0c;盘古开天辟地&am…

YOLOv9改进项目|关于本周更新计划的说明24/3/12

目前售价售价59.9&#xff0c;改进点30个 专栏地址&#xff1a; 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 日期&#xff1a;24/3/12 本周更新计划说明&#xff1a; 1. 更新华为Gold YOLO中的…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

链表基础知识详解(非常详细简单易懂)

概述&#xff1a; 链表作为 C 语言中一种基础的数据结构&#xff0c;在平时写程序的时候用的并不多&#xff0c;但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛&#xff0c;所以必须要搞懂链表&#xff0c;链表分为单向链表和双向链表&#xff0c;单向链表很…

【四】【算法分析与设计】贪心算法的初见

455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

提高螺栓连接强度——SunTorque智能扭矩系统

螺栓连接是工程中常见的一种连接方式&#xff0c;其强度对于设备的稳定性和安全性具有至关重要的影响。然而&#xff0c;由于各种因素的影响&#xff0c;螺栓连接在使用过程中往往会出现松动、断裂等问题&#xff0c;导致设备故障和安全隐患。因此&#xff0c;提高螺栓连接的强…

Kanebo HITECLOTH 高科技擦镜布介绍

Kanebo HITECLOTH&#xff0c;这款由日本KBSeiren公司制造的高科技擦镜布&#xff0c;以其卓越的清洁能力和超柔软的布质&#xff0c;成为了市场上备受瞩目的产品。 材质与特性 HITECLOTH采用0.1旦尼尔特级高级微纤维制造&#xff0c;质地细致、坚韧、不起颗粒。这种纤维的特…

利用HubSpot出海CRM和人工智能技术提升出海业务的效率和效果

在当今数字化时代&#xff0c;智能化营销已经成为企业获取客户和扩大市场份额的关键策略。特别是对于出海业务而言&#xff0c;利用智能化营销技术来应对不同文化、语言和市场的挑战&#xff0c;已经成为企业竞争的关键优势。今天运营坛将带领大家探讨如何利用HubSpot CRM和人工…

网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择

目录 导言 网络流量监控的重要性 AnaTraf网络万用表的功能与优势 网络故障排除与优化网络性能 结论 导言 在当今数字化时代&#xff0c;计算机网络已经成为企业和组织的核心基础设施。然而&#xff0c;网络流量的管理和监控对于确保网络性能的稳定和优化至关重要。本文将介…

GIS软件应用(二)

任务&#xff1a; 1. 正确划分渔网并裁剪出研究区域 2. 渔网与poi数据正确空间链接并统计网格内类别POI数量 步骤&#xff1a; 将南京市边界进行投影变换&#xff0c;具体看我的这篇文章&#xff1a;GIS软件应用&#xff08;一&#xff09;-CSDN博客 选择ArcToolbox中的 Cr…

java八股文 笔记(持续更新中~)

1 Redis 2Mysql 3JVM 4java基础底层 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1.穿透 2&#xff1a;击穿 3&#xff1a;雪崩 3 33 4:双写一致 5.持久化 2 JVM: 2&#xff1a; 3&#xff1a; 4&#xff1a; 5&#xff1a; 6&#xff1a; 7&#xff…

【Scrapy】京东商品数据可视化

【Scrapy】京东商品数据可视化 文章目录 【Scrapy】京东商品数据可视化  &#x1f449;引言&#x1f48e;一、爬取数据&#xff1a;1.1 scrapy爬虫库简介&#xff1a;1.2 技术实现&#xff1a;1.2.1搭建框架结构1.2.2 分析网页结构 二、数据保存&#xff1a;三、数据读取以及…

企业计算机服务器中了eking勒索病毒怎么办?Eking勒索病毒解密工具流程

网络数据安全问题一直是众多企业关心的主要话题&#xff0c;网络在为企业提供便利的同时&#xff0c;也为企业数据安全带来未知的隐患。近日&#xff0c;云天数据恢复中心接到许多企业求助&#xff0c;企业的计算机服务器遭到了eking勒索病毒攻击导致企业计算机服务器系统瘫痪无…