第5章:Docker 的image镜像管理

第5章:Docker 的image镜像管理

在之前的介绍中,我们知道 docker images 是 docker 的三大组件之一。

docker 把下载的 images 存储到 docker 主机上,如果一个 image 不在主机上,docker 会从一个镜像仓库下载,默认的仓库是 DOCKER HUB 公共仓库。

接下来将介绍更多关于 docker images 的内容,包括:

 使用和管理本地主机上的 images

 创建一个基础的 images

 上传 images 到 docker hub(公共 images 仓库)

 列出本地主机上已经存在的 images

5.1、配置镜像源

1、创建daemon.json镜像源配置文件

Docker配置镜像源需要编辑或创建 /etc/docker/daemon.json 文件,添加国内镜像加速器以加速镜像的下载。

镜像源可以理解为一台存放了很多镜像软件的服务器,可以通过URL进行访问下载。

// 阿里云的镜像加速器

cpp 复制代码
# touch /etc/docker/daemon.json
# vim /etc/docker/daemon.json

上面配置的docker镜像源,我们在通过网络搜索或者下载镜像的时候,必须确保本机能忘通互联网,并确保本机

与上面的镜像源站点能够互通。有些因为本地DNS的问题导致的域名解析问题,我们可以通过在daemon.json里面配置能够解析的DNS服务器的IP地址。配置示例如下所示:

2、加载daemon.json并重启docker服务

cpp 复制代码
# systemctl daemon-reload
# systemctl restart docker

5.2、docker数据保存路径

5.2.1、docker数据默认路径

在Linux系统中,Docker镜像默认存放在/var/lib/docker/目录下。具体来说,当您使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时,Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。

在Linux系统中,Docker镜像文件默认存放在/var/lib/docker/目录下。具体来说,当你使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时,Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。每个镜像都由一个或多个层组成,这些层在文件系统中以SHA256哈希值命名。

在/var/lib/docker/overlay2/目录下,Docker会为每个正在运行的容器创建一个UUID命名的目录,用于存放该容器和它的元数据。这种设计使得Docker能够高效地管理容器和镜像,同时也为开发者提供了灵活的操作和管理方式。

此外,/var/lib/docker/目录下还包括了其他子目录,如containers用于存储容器的相关信息,volumes用于存储数据卷等。这些子目录共同构成了Docker在Linux系统下的完整存储结构。

cpp 复制代码
# cd /var/lib/docker

# ls

5.2.2、修改docker数据路径位置

在Linux系统中,Docker数据的默认保存位置路径为"/var/lib/docker"下面。在生产环境中,当docker数据过于庞大的时候,docker大量的数据会占用"/"分区,给系统带来影响,面对这种情况大多的做法是给一个物理磁盘,分区以后挂载,然后修改docker的配置文件,指向该目录。从而降低因docker数据庞大给系统带来的影响。

修改docker数据的路径位置,需要编辑"/etc/docker/daemon.json"文件。

cpp 复制代码
# mkdir /docker/docker_date_dicretory		//创建docker数据保存目录

# vim /etc/docker/daemon.json		//在该文件里面添加如下内容

{
  "data-root": "/docker_date_dicretory"
}


cpp 复制代码
#systemctl daemon-reload

#systemctl restart docker

5.3、获取docker image镜像

Docker服务配置完成以后,我们就需要获取docker容器所需要的镜像文件。默认情况下,本机不存在任何docker的镜像文件。我们可以通过下列方法来查看本地是否存在docker image镜像文件。

5.3.1、查询本地image镜像

cpp 复制代码
# docker images -a			//显示本地所有的镜像


✍各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG: 镜像的标签版本号

IMAGE ID: 镜像ID

CREATED: 镜像创建时间

SIZE: 镜像大小

同一个仓库源可以有多个TAG版本,代表这个仓库源的拥有镜像多个版本,可以使用 REPOSITORY:TAG 指定唯一镜像。如果不指定TAG版本,则默认是最新版本(latest)

cpp 复制代码
# docker images -q			//只显示本地镜像ID

5.3.2、搜索网络image镜像

由于docker安装之后,本地没有镜像,可以通过在搜索网络镜像,根据搜索到的镜像列表清单来下载或者运行一个对应的镜像。

cpp 复制代码
# docker search nginx			//从网络搜索nginx镜像

# docker search ubuntu --filter is-official=true //过滤搜索,只搜索官方的ubuntu镜像

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

ubuntu Ubuntu is a Debian-based Linux operating sys... 16653 [OK]

websphere-liberty WebSphere Liberty multi-architecture images ... 297 [OK]

open-liberty Open Liberty multi-architecture images based... 62 [OK]

neurodebian NeuroDebian provides neuroscience research s... 105 [OK]

ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 52 [OK]

--filter :过滤搜索,或者使用短选项 -f

is-official=true :只搜索官方的镜像

cpp 复制代码
# docker search ubuntu --filter stars=60  //过滤搜索,只搜索大于60的ubuntu镜像

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

ubuntu Ubuntu is a Debian-based Linux operating sys... 16653 [OK]

websphere-liberty WebSphere Liberty multi-architecture images ... 297 [OK]

open-liberty Open Liberty multi-architecture images based... 62 [OK]

--filter :过滤搜索,或者使用短选项 -f

stars=60 :搜索大于60的ubuntu镜像

cpp 复制代码
# docker search ubuntu --filter stars=60 --filter is-official=true //过滤搜索,只搜索大于60的官方镜像

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

websphere-liberty WebSphere Liberty multi-architecture images ... 297 [OK]

open-liberty Open Liberty multi-architecture images based... 62 [OK]

neurodebian NeuroDebian provides neuroscience research s... 105 [OK]

ubuntu-upstart DEPRECATED, as is Upstart (find other proces... 115 [OK]

5.3.3、拉取网络image镜像

例如,如果你想要拉取一个名为nginx的镜像,你可以运行以下命令:

cpp 复制代码
# docker pull nginx			//从公网仓库拉取一个nginx镜像
# docker pull centos			//从公网仓库拉取一个centos镜像

如果你需要特定版本的镜像,你可以在镜像名后面加上冒号和标签(tag)。例如,如果你想要拉取nginx的特定版本1.19.0,你可以运行:

cpp 复制代码
# docker pull nginx:1.19.0
# docker pull centos: 8.4.2105

5.3.4、查询拉取的image镜像

cpp 复制代码
# docker image ls


1、在容器里面运行镜像

cpp 复制代码
# docker run -it --name ou1  -d 5d0da3dc9764 bash

2、查看容器运行状态

cpp 复制代码
# docker container ls

3、进入容器系统

cpp 复制代码
# docker exec -it b40515a360a3 bash

5.4、创建docker image镜像

5.4.1、基于现有基础镜像创建

先使用基础镜像创建一个容器,然后对容器进行修改,最后使用commit命令提交为一个新的镜像。以tomcat镜像为例,下面例子中,创建一个名为"ou-1_tomcat"的容器,拉取镜像tomcat,当本地没有名为"tomcat"的镜像时候,系统会从镜像源站点下载不同版本的tomcat镜像,

1、根据基础镜像创建容器

cpp 复制代码
# docker run --name ou-1_tomcat -p 8080:8080 -d tomcat

--name: 容器名称ou-1_tomcat

-p : 容器外部端口和内部端口8080:8080

-d tomcat 镜像名称tomcat

✍说明:

tomcat是镜像的名称,本地主机必须存在该同名的镜像,如果本地主机没有tomcat镜像,在主机通互联网的情况下会自动去下载该镜像,直至下载完毕并且容器运行成功。

如果本机既没有本地镜像,又不通互联网,那么上面的指令会执行失败。总的来说,创建容器必须关联一个镜像,容器不能独立存在。

cpp 复制代码
# docker container  ls	//查询容易

CONTAINER ID: 容器名称ID

IMAGE: 镜像名称

CREATED: 创建历史时间

STATUS: 容器状态运行时间

PORTS: 容器所使用的外部端口->内部端口

NAMES: 容器名称

2、进入修改容器

cpp 复制代码
# docker exec -it 81ae4f507fca  /bin/bash       // 进入容器81ae4f507fca是容器的ID

进入容器以后,在容器里面修改tomcat的主页信息,用于测试

cpp 复制代码
root@81ae4f507fca:/usr/local/tomcat# cd webapps/ROOT/
root@81ae4f507fca:/usr/local/tomcat/webapps/ROOT# rm -f index.jsp
root@81ae4f507fca:/usr/local/tomcat/webapps/ROOT# echo echo welcome to tomcat > index.html
root@81ae4f507fca:/usr/local/tomcat/webapps/ROOT# exit
exit

3、打包新镜像

将容器里面运行的程序及运行环境打包生成新的镜像

cpp 复制代码
语法:docker commit -m="描述消息" -a="作者" 容器id或容器名 镜像名:tag
cpp 复制代码
# docker commit -m="修改默认主页" -a="小洋" 81ae4f507fca itany/tomcat:v1

也可以加上-p选项:生成过程中停止容器运行

cpp 复制代码
# docker commit -m="修改默认主页" -a="小洋" -p 81ae4f507fca itany/tomcat:v1

本示例中描述信息为"修改默认主页"、作者为"小洋"、容器ID为"81ae4f507fca"、打包的新镜像名称为"itany/tomcat"、tag即镜像版本为"v1"

4、运行新镜像

使用新镜像运行容器

cpp 复制代码
# docker run --name tomcat_v1 -p:18080:8080 -d itany/tomcat:v1

//运行名称为"tomcat_v1"容器(容器非必须存存在,可以自定义即是创建了一个新容器);-p参数连接宿主机端口18080,容器主机端口8080形成内外映射关系;镜像名称是"itany/tomcat"(镜像必须存在,并且名称对应);版本号为v1

测试访问默认页:

http://ip:8080/index.html

这里是一些常用的选项:

• -d: 后台运行容器并打印容器ID;

• -i: 以交互模式运行容器,通常与 -t 同时使用;

• -t: 分配一个伪终端,通常与 -i 同时使用;

• --name: 为容器指定一个名称;

• -p: 发布容器的端口到主机;

• -v: 挂载一个目录或文件;

5.4.2、基于本地模版创建

基于本地模版创建image镜像,首先要获取到镜像的模版文件,docker images镜像的模版文件可以通过相关的网站上去下载想要的模版文件,然后将docker images镜像的模版文件载入到系统当中加载,加载成功后,进入容器编辑修改容器的自定义内容,达到自己预想的目的,修改成一个完整的容器镜像,然后再打包成自己的镜像,后期就可以移植和使用镜像了,下面整理了一些docker images镜像模版的下载网址,可供下载和参考

https://download.openvz.org

1、下载镜像的模版文件

下面从该网址下载一个centos7的docker镜像文件

cpp 复制代码
# wget https://download.openvz.org/template/precreated/centos-7-x86_64.tar.gz


2、导入镜像

cpp 复制代码
# cat /root/centos-7-x86_64.tar.gz | docker import -- centos:v7

//导入模版文件centos-7-x86_64.tar.gz为镜像,镜像命名为centos,tag版本v7

cpp 复制代码
# docker images -a

✍说明:

下载的模版镜像文件都为压缩的后的归档文件,我们在导入成镜像之前,无需手动去 解压缩模版归档文件,通过docker import去做导入的时候,docker会自行解压缩。

3、创建容器并运行镜像

cpp 复制代码
# docker run -it--name ou_centosv7  -d  centos:v7 bash

//加上-it参数交互式创建容器后并进入容器系统。这里不用加上-p带端口后,是因为该镜像是一个操作系统镜像,不是类似于tomcat,ngigx中间件之类的需要加上映射端口。当然如果容器操作系统有内部端口,也可以映射出来。

-it参数创建容器后会直接跳转到容器系统。键入exit可以退出容器

cpp 复制代码
# docker run --name cenots_V7 -d centos:v7 bash    //非交互式运行容器

这里是一些常用的选项:

• -d: 后台运行容器并打印容器ID;

• -i: 以交互模式运行容器,通常与 -t 同时使用;

• -t: 分配一个伪终端,通常与 -i 同时使用;

• --name:为容器指定一个名称;

• -p: 发布容器的端口到主机;

• -v: 挂载一个目录或文件;

4、进入容器

cpp 复制代码
# docker ps -a
cpp 复制代码
# docker exec -it c1627038e286  bash       // 进入容器81ae4f507fca是容器的ID

5.4.2、基于dockerfile创建

后面补充

5.5、Docker image镜像归档与恢复

5.5.1、image镜像归档目的

Docker是一个轻量级的虚拟化平台,具有部署块、好移植的特点,可用于生产环境的工程包放置在docker下面部署测试,成熟之后,再移植到生产环境中运行。

我们知道docker里面所使用的image镜像需在在连接互联网的情况下才能够从docker的网络仓库里面拉取镜像文件。Docker镜像的归档可用于在没有互联网环境下image镜像的迁移、容器的迁移等适用场景。

5.5.2、使用docker save归档镜像

1、docker save

docker的命令行接口设计得很优雅,很多命令的帮助直接在后面加--help就可以查看

cpp 复制代码
#  docker save --help

Usage: docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Aliases:

docker image save, docker save

Options:

-o, --output string Write to a file, instead of STDOUT

docker save用于来将一个或多个image打包保存为归档文件。Docker save通常与-o选项一起使用,如下所示:

cpp 复制代码
语法:
# docker save -o [归档文件名称.tar] [镜像名称]
# docker save -o [归档文件名称.tar] [容器名称]

示例:

如上图所示,我们将上图中的镜像或者容器使用docker save 进行归档打包,那么可以进行如下操作:

cpp 复制代码
# docker save -o redis:4.0_docker_image.tar redis:4.0               //这两条指令具备相似功能
# docker image save -o redis:4.0_docker_image.tar redis:4.0

//将名为redis:4.0镜像打包为归档文件保存为redis:4.0_docker_image.tar

cpp 复制代码
# docker save -o redis:4.0_docker_container.tar inspiring_benz     //这两条指令具备相似功能
# docker image save -o redis:4.0_docker_container.tar inspiring_benz

//将名为inspiring_benz容器打包为归档文件保存为 redis:4.0_docker_container.tar

完成打包之后,那么在当前目录下面,就会产生两个*.tar的归档文件。docker save如果指定的是container,docker save将保存的是容器背后的image。
2、docker load

cpp 复制代码
# docker load -i my_image.tar             //这两条指令具备相似功能
# docker image load -i my_image.tar

或者使用重定向输入的方式加载镜像

cpp 复制代码
# docker load  < my_image.tar               //这两条指令具备相似功能
# docker image load < my_image.tar

3、docker save使用场景

docker save的应用场景是,如果你的应用是使用docker-compose.yml编排的多个镜像组合,但你要部署的客户服务器并不能连外网。这时,你可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。

5.5.3、docker tag给镜像添加REPOSITORY和TAG

1、docker tag给新镜像添加REPOSITORY和TAG

docker tag 命令用于用于给镜像打标签。如上面所述,使用"docker save"归档后的镜像本地tar文件类型镜像,使用"docker load -i"导入本地镜像库以后,没有镜像名称"REPOSITORY"、标签版本"TAG"。因此,是使用 "docker run"创建容器载入镜像的时候,无法选中镜像,所以可以使用"docker tag"来标记归档后的镜像名称和版本。

如下图所示。下图是使用 docker load -i载入的归档镜像:

可以看到有3个镜像没有REPOSITORY、TAG

cpp 复制代码
语法:
docker tag  SOURCE_IMAGE[:TAG]  TARGET_IMAGE[:TAG]
docker tag  image_id new_repository:tag           //这两条指令具备相似功能
docker image tag  image_id new_repository:tag
cpp 复制代码
# docker tag e1a73233e3be nginx:v1
# docker tag 01e1fdb168a4 postgres:v9.6
# docker tag 2f7f7bce8929 redis:v4.0

# docker images -a

如上图所示,三个镜像头添加上了REPOSITORY、TAG。那么接下来,我们可以使用容器来运行本地

镜像了。

注意事项:

-使用命令字"docker image tag"给镜像添加名称和版本的时候。分别有两种情况:

第一情况:使用"docker image load -i"加载的镜像没有REPOSITORY(镜像名称)、TAG(镜像版本),如下图所示:

这种情况下使用docker image tag"命令字给镜像添加REPOSITORY(镜像名称)、TAG(镜像版本)。例如:

cpp 复制代码
#docker image tag 44241dbd4d38 mysql:5.6	//修改后如下图所示
#docker image ls

第二种情况;使用"docker image load -i"加载的镜像已经具备REPOSITORY(镜像名称)、TAG(镜像版),如下图所示:

通过命令字"docker image inspect 2f7f7bce8929"查询得知该镜像的TAG(版本号)错误,如下图所示:

该镜像的版本号为"1.13.2",因此我们需要修改该镜像的TAG(版本号),因此可以通过命令字"docker image tag"来修改。操作语法如下所示:

cpp 复制代码
#docker image tag old_tag  new_tag
#docker image tag nginx:1.10 nginx:1.13.0

修改完成后,系统里面会增加一个相同ID(IMAGE_ID)的镜像,如下图所示:

cpp 复制代码
#docker image ls

本意是修改镜像的名称、版本号。通过上述操作以后,新建了一个相同ID的镜像。这种情况下,我们可以删除错误版本号的镜像。

值得注意的是,使用命令字"docker image rmi"删除镜像的时候,不能连接镜像ID,只能连接镜像的名称和版本号。如果使用该命令字删除镜像的时候,连接的是镜像的ID,那么所有相同ID的镜像将都被删除。

cpp 复制代码
#docker image rmi 2f7f7bce8929		//同ID的镜像将被清空
#docker image rmi nginx:1.10



2、docker run在容器里面运行新镜像

cpp 复制代码
语法:
docker run  -d - -name [新容器名称] --p [外部端口:内部端口]   镜像ID
cpp 复制代码
# docker run -d --name ou1_container -p 8089:8080  e1a73233e3be
# docker ps -a   //查询所有运行的容器

3、进入容器

cpp 复制代码
# docker exec -it c0cd31ce835c  bash

5.5.4、使用docker export归档镜像

Docker export与docker save类似,都可以归档镜像,但是这两个指令的应用场景不同,并且两者后面相接的对象不同。Docker save 后面连接的是镜像(镜像名称或者镜像ID),而docker export后面连接的是容器(容器名称或者容器ID)。

如下所示,例如下面有这么存在运行的容器镜像,为了离线使用,我们可以使用docker export归档,然后拷贝复制到需要使用的主机上面。

1、docker export

cpp 复制代码
# docker container ls

或者使用

cpp 复制代码
# docker ps -a

如上图所示,可以看见有5个容器在运行。现在我们可以通过docker export归档在运行的容器。

cpp 复制代码
语法:
docker export  -o  归档名称.tar  容器ID
cpp 复制代码
# docker export -o nginx_1.13_docker2.tar	22392ae1b331
# docker export -o mongo_3.7_docker2.tar 7fc0bd77b0e9
cpp 复制代码
# ls

可以看见归档的两个文件,后面就可以作为离线镜像使用了。

Docker export 后面连接的事container容器的ID,但是实质归档的事容器背后的所属镜像。

2、docker import

接下来,我们使用docker import在于上面的两个docker归档文件,载入以后,并容容器里面运行

cpp 复制代码
语法:
docker import  -o  归档名称.tar  REPOSITORY
cpp 复制代码
# docker import ngingx_1.13.2_docker2.tar nginx
# docker import mongo_3.7_docker2.tar mongo

# docker  image ls		//查看导入的容器

3、docker run在容器里面运行新镜像

cpp 复制代码
# docker run  -it --name ou1 -d e6c1ab8ce382 /bin/bash
# docker run -it --name ou2 -d  3fca27ba9000 /bin/bash

# docker ps -a		//查看容器运行状态

4、进入容器

cpp 复制代码
# docker exec -it 3520a59f48cd /bin/bash
# docker exec -it 4d8a0708de1d /bin/bash

5、docker save和docker export的区别

总结一下docker save和docker export的区别:

  1. docker save保存的是镜像(image),docker export保存的是容器(container);
  2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
  3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

5.5.5、使用docker commit归档镜像

docker commit 命令用于将容器的当前状态保存为一个新的 Docker 镜像。

docker commit 命令通常用于创建镜像来保存容器的状态,以便在将来可以重用或分发该镜像。

cpp 复制代码
语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

• -a :提交的镜像作者。

• -c :使用 Dockerfile 指令来创建镜像。

• -m :提交时的说明文字。

• -p :提交镜像前暂停容器(默认为 true)。

示例:

cpp 复制代码
启动一个新容器
#docker run -d -it --name my_container ubuntu bash
cpp 复制代码
进行一些更改:
#docker exec my_container yum -y install net-tools
cpp 复制代码
提交容器为新镜像:
#Docker commit centos_7.9.2009 centos_7.9.2009:latest
cpp 复制代码
添加作者信息和提交信息:
#docker commit -a "John Doe" -m "Added new features" centos_7.9.2009 centos_7.9.2009:latest
cpp 复制代码
在不暂停容器的情况下提交镜像:
#docker commit --pause=false my_container my_new_image
cpp 复制代码
#docker image ls

常用场景

保存工作进度: 在开发或测试过程中,将容器的当前状态保存为镜像,以便稍后可以恢复。

创建基础镜像: 为特定应用程序或环境配置创建自定义基础镜像。

分发配置: 将特定配置或应用程序状态保存为镜像,以便分发给其他团队成员或在不同环境中使用。

docker commit 命令是一个强大的工具,允许用户将容器的当前状态保存为新的 Docker 镜像。通过使用该命令,用户可以创建自定义镜像,以便在将来重用或分发。添加适当的作者和提交信息,有助于跟踪镜像的历史和变化。

5.6、删除docker镜像

5.6.1、image镜像命名

docker特定算法生成,镜像名称长度位64位随机字符。当我们使用"docker image ls"或者使用"docker image -a"去查询镜像的时候,镜像名称只输出12位前导码作为镜像名称来显示出来,后面52位长度的字符不会显示。

如下所示:

cpp 复制代码
# docker image ls

镜像ID:691a00f92e2c、f876bfc1cc63分别都位12位字符

我们可以通过一下方式查询镜像的详细ID信息:

cpp 复制代码
# docker image inspect 691a00f92e2c

5.6.2、image镜像保存位置

Docker中,docker安装部署好已经,docker的文件存储目录是"/var/lib/docker/"下面,在该目录下面有若干个关于docker数据的存储目录。其中我们通过pull下载的镜像位置路径是"/docker_run/image/overlay2/imagedb/content/sha256/"下面

cpp 复制代码
# docker image ls

5.6.3、删除镜像

Docker中,可以通过一下方式删除pull下载来的镜像。

cpp 复制代码
# docker image rmi 67fa590cfc1c       		  	//删除IMAGE ID为"67fa590cfc1c"的本地镜像

或进入docker镜像的保存路径位置,删除对应的镜像文件

cpp 复制代码
# docker image ls
cpp 复制代码
# cd /var/lig/docker/image/overlay2/imagedb/content/sha256
# ls
cpp 复制代码
# rm -rf 691a00f92e2cc3484c042773ef6fb321b63a6e6899f2aca72246c883c431574f
# docker image ls
cpp 复制代码
# docker image rmi -f  67fa590cfc1c  		  	//强制删除镜像。

# docker image rmi ---no-prune 67fa590cfc1c   //不移除该镜像的过程镜像,默认移除

# docker image rmi `docker images -q` 			//删除所有镜像

5.7、docker image镜像管理指令集

语法:docker image [指令]

相关推荐
草莓熊Lotso2 小时前
MySQL 数据类型核心指南:选型、实战与避坑
linux·运维·服务器·数据库·c++·人工智能·mysql
阿梦Anmory2 小时前
快速部署Milvus 2.6.4单机版向量数据库(Docker Compose方式)
数据库·docker·milvus
逻极2 小时前
深入剖析Docker核心架构:从组件交互到内核原理详解
docker·系统架构·linux内核·devops·容器技术
赵文宇(温玉)2 小时前
OpenClaw-In-Docker安全、独立、便捷的OpenClaw部署运行方案,已在Github开源
安全·docker·github
fanjinhong_85212 小时前
Docker 镜像与容器关系解析
linux·docker
升职佳兴2 小时前
Docker 安装、镜像管理与 Dockerfile 构建实战(openEuler 版)
运维·docker·容器
芥子沫2 小时前
提示词管理工具推荐prompt-manage,Docker一键部署和使用指南
docker·容器·prompt·提示词
2501_915921432 小时前
在 Linux 上通过命令行上架 iOS APP,Fastlane + AppUploader(开心上架)
android·linux·运维·ios·小程序·uni-app·iphone
珠海西格2 小时前
红区之困:分布式光伏爆发背后的“逆流危机”
大数据·运维·服务器·数据库·人工智能·分布式