Podman容器技术基础入门

Podman容器技术基础入门

介绍podman

为什么使用podman

Podman 是 Docker 的替代品,用于容器化应用程序的本地开发。Podman 命令将 1 对 1 映射 Docker 命令,包括它们的参数。你可以使用 podman 为 docker 添加别名,并且从不会发现管理本地容器的是两种完全不同的工具。Podman 的核心功能之一是它专注于**安全性。**使用 Podman 不需要守护进程。相反,它使用传统的 fork-exec 模型,并且大量地使用 用户名称空间 和 网络名称空间 。因此,Podman 比 Docker 更加孤立,使用起来也更安全。更多细节请点击这里

podman与docker的区别

docker 需要在我们的系统上运行一个守护进程(docker daemon),而podman 不需要
启动容器的方式不同:

  • docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process。Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process。

  • 因为docke有docker daemon,所以docker启动的容器支持–restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动docker需要使用root用户来创建容器,但是podman不需要

安装podman

[root@localhost ~]# yum -y install podman
[root@localhost ~]# alias docker=podman

// 定义别名
[root@localhost ~]# docker  images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
[root@localhost ~]# podman  images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE

podman使用帮助

要获得一些帮助并了解Podman的工作原理,您可以使用以下帮助:

$ podman --help
$ podman <subcommand> --help

有关更多详细信息,您可以查看手册页:

$ man podman
$ man podman-<subcommand>

另请参阅Podman 故障排除指南,以查找有关如何解决常见配置错误的已知问题和提示。

普通用户使用的配置

在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置

cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使用cgroup V2启用了运行Podman的Linux发行版,则可能需要更改默认的OCI运行时。某些较旧的版本runc不适用于cgroup V2,必须切换到备用OCI运行时crun。

安装crun

[root@localhost ~]# yum -y install crun

使用–runtime选项在命令行中打开对cgroup V2的替代OCI运行时支持

podman  --runtime crun

也可以修改containers.conf文件runtime = "runc"到runtime = “crun”

[root@localhost ~]# vim /usr/share/containers/containers.conf 
......
runtime = "crun"      # 取消注释并将值改为crun
......


[root@localhost ~]# podman run -d -p 80 docker.io/library/httpd
736c2146b807988538c700a207a45b1be50f4b3e8466b9cc57a68b4d7b5ea568
[root@podman ~]# podman inspect -l | grep crun
        "OCIRuntime": "crun",
            "crun",

安装slirp4netns

slirp4nets包为普通用户提供一种网络模式

[root@localhost ~]# yum -y install slirp4netns

安装fuse-overlayfs

在普通用户环境中使用Podman时,建议使用fuse-overlayfs而不是VFS文件系统,至少需要版本0.7.6。

[root@localhost ~]# yum -y install fuse-overlayfs

配置storage.conf文件

[root@localhost ~]#  vim /etc/containers/storage.conf
......
mount_program = "/usr/bin/fuse-overlayfs"  #取消注释
......

/etc/subuid和/etc/subgid配置

Podman要求运行它的用户在/etc/subuid和/etc/subgid文件中列出一系列UID,shadow-utils或newuid包提供这些文件

[root@podman ~]# cat /etc/subuid
demo:100000:65536
bus:165536:65536

[root@podman ~]# cat /etc/subgid
demo:100000:65536
bus:165536:65536

// 在/etc/subuid和/etc/subgid查看,每个用户的值必须唯一且没有任何重叠

该文件的格式为USERNAME:UID:RANGE

  • 在/ etc / passwd或getpwent中列出的用户名。
  • 为用户分配的初始uid。
  • 为用户分配的UID范围的大小

用户的配置文件

三个主要的配置文件是container.conf,storage.conf和registries.conf。用户可以根据需要修改这些文件。

container.conf
Podman读取时,按照循序来了,当前面一位找不到时,就去找下一个

1./usr/share/containers/containers.conf
2./etc/containers/containers.conf
3.$HOME/.config/containers/containers.conf

storage.conf
podman保存在本地的容器镜像和其运行容器的文件目录。

1./etc/containers/storage.conf
2.$HOME/.config/containers/storage.conf

在普通用户中/etc/containers/storage.conf的一些字段将被忽略

graphroot=``""`` ``container storage graph ``dir` `(default: ``"/var/lib/containers/storage"``)`` ``Default directory to store all writable content created by container storage programs.` `runroot=``""`` ``container storage run ``dir` `(default: ``"/run/containers/storage"``)`` ``Default directory to store all temporary writable content created by container storage programs.

在普通用户中默认

graphroot=``"$HOME/.local/share/containers/storage"``runroot=``"$XDG_RUNTIME_DIR/contai

registries.conf
配置按此顺序读入,这些文件不是默认创建的,可以从/usr/share/containers或复制文件/etc/containers并进行修改

1./etc/containers/registries.conf
2./etc/containers/registries.d/*
3.HOME/.config/containers/registries.conf

podman login 登录,默认授权文件在${XDG_RUNTIME_DIR}/containers/auth.json

[root@podman ~]# cat /run/user/0/containers/auth.json 
{
	"auths": {
		"docker.io": {
			"auth": "********************="
		}
	}
}

podman常用基础命令

podman search:查找

// --filter=is-official:指定查找官方版本的httpd
[root@localhost ~]# podman search httpd --filter=is-official
INDEX       NAME                      DESCRIPTION                      STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/httpd   The Apache HTTP Server Project   3794    [OK]       

podman pull:下载(拉取)镜像

注意:Podman在不同的注册管理机构中搜索。因此,建议使用完整的映像名称(docker.io/library/httpd而不是httpd)来确保使用正确的映像

// 拉取httpd镜像
[root@localhost ~]# podman pull docker.io/library/httpd
Trying to pull docker.io/library/httpd...
Getting image source signatures
Copying blob e5ae68f74026 done  
Copying blob aa379c0cedc2 done  
Copying blob d3576f2b6317 done  
Copying blob bc36ee1127ec done  
Copying blob f1aa5f54b226 done  
Copying config ea28e1b82f done  
Writing manifest to image destination
Storing signatures
ea28e1b82f314092abd3f90a69e57d6ccf506382821ee0b8d9b48c3e47440c1f

// 当你不知道镜像准确位置,无法确定的时候,直接podman pull + 镜像名,然后上下滑动选择你要指定拉取镜像的位置
[root@localhost ~]# podman pull nginx
? Please select an image: 
    registry.fedoraproject.org/nginx:latest
    registry.access.redhat.com/nginx:latest
    registry.centos.org/nginx:latest
  ▸ docker.io/library/nginx:latest

podman images:显示所有镜像

[root@localhost ~]# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/nginx   latest   f652ca386ed1   12 days ago   146 MB
docker.io/library/httpd   latest   ea28e1b82f31   12 days ago   148 MB

podman run:运行容器

运行一个非常基本的 httpd 服务器

[root@localhost ~]# podman run -d -p 80:80 docker.io/library/httpd
a15ffcd949cb9f18d0322cf6ae4f740eee2e6ffa0eed0677570747693171d19d

注意:由于容器在分离模式下运行,由命令中的 表示,Podman将在执行命令后打印容器ID。它还添加了一个伪 tty,用于在交互式 shell 中运行任意命令。-dpodman run-t

注意:我们使用端口转发来访问HTTP服务器。要成功运行,至少需要 slirp4netns v0.3.0。

podman ps:列出正在运行的容器

[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED             STATUS                 PORTS               NAMES
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  About a minute ago  Up About a minute ago  0.0.0.0:80->80/tcp  thirsty_maxwell

在这里插入图片描述
注意:如果添加 -a 命令,Podman 将显示所有容器(已创建、已退出、正在运行等)

podman inspect:查看容器详细信息

查看最新信息(最新的信息以最新的时间来定义)

您可以"检查"正在运行的容器,以查找有关其自身的元数据和详细信息。 将提供许多有用的信息,如环境变量,网络设置或分配的资源。podman inspect

由于容器在无根模式下运行,因此不会为容器分配 IP 地址

[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS               NAMES
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  3 minutes ago  Up 3 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell
[root@localhost ~]# podman inspect a15ffcd949cb
[
    {
        "Id": "a15ffcd949cb9f18d0322cf6ae4f740eee2e6ffa0eed0677570747693171d19d",
        "Created": "2021-12-14T18:40:02.330917567+08:00",
        "Path": "httpd-foreground",
        "Args": [
            "httpd-foreground"
        ],
        "State": {
            "OciVersion": "1.0.1-dev",
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            ......

// -l 查看最新信息
[root@localhost ~]# podman inspect -l | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "10.88.0.2"

curl + IP:访问测试页面

如您所见,容器未分配 IP 地址。容器可通过本地计算机上的已发布端口访问。

[root@localhost ~]# curl 192.168.200.138
<html><body><h1>It works!</h1></body></html>

在另一台计算机上,需要使用运行容器的主机的 IP 地址

curl http://<IP_Address>:80

注意:除了使用curl之外,您还可以将浏览器指向http://localhost:80。

podman logs:查看容器日志

[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS               NAMES
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  7 minutes ago  Up 7 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell
[root@localhost ~]# podman logs a15ffcd949cb
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Dec 14 10:40:03.083511 2021] [mpm_event:notice] [pid 1:tid 140514200993088] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations
[Tue Dec 14 10:40:03.083684 2021] [core:notice] [pid 1:tid 140514200993088] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.200.1 - - [14/Dec/2021:10:41:46 +0000] "GET / HTTP/1.1" 200 45
192.168.200.1 - - [14/Dec/2021:10:41:46 +0000] "GET /favicon.ico HTTP/1.1" 404 196
192.168.200.1 - - [14/Dec/2021:10:42:38 +0000] "-" 408 -
192.168.200.138 - - [14/Dec/2021:10:46:06 +0000] "GET / HTTP/1.1" 200 45

//  -l:查看最新日志
[root@localhost ~]# podman logs -l
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Dec 14 10:40:03.083511 2021] [mpm_event:notice] [pid 1:tid 140514200993088] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations
[Tue Dec 14 10:40:03.083684 2021] [core:notice] [pid 1:tid 140514200993088] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.200.1 - - [14/Dec/2021:10:41:46 +0000] "GET / HTTP/1.1" 200 45
192.168.200.1 - - [14/Dec/2021:10:41:46 +0000] "GET /favicon.ico HTTP/1.1" 404 196
192.168.200.1 - - [14/Dec/2021:10:42:38 +0000] "-" 408 -
192.168.200.138 - - [14/Dec/2021:10:46:06 +0000] "GET / HTTP/1.1" 200 45

podman top:查看容器的 pids

[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS               NAMES
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  9 minutes ago  Up 9 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell
[root@localhost ~]# podman top a15ffcd949cb
USER       PID   PPID   %CPU    ELAPSED           TTY   TIME   COMMAND
root       1     0      0.000   9m30.118872467s   ?     0s     httpd -DFOREGROUND 
www-data   7     1      0.000   9m30.119002833s   ?     0s     httpd -DFOREGROUND 
www-data   8     1      0.000   9m30.119095631s   ?     0s     httpd -DFOREGROUND 
www-data   9     1      0.000   9m30.119190449s   ?     0s     httpd -DFOREGROUND 
www-data   91    1      0.000   7m14.119268827s   ?     0s     httpd -DFOREGROUND 


// -l: 查看最新的pids
[root@localhost ~]# podman top -l
USER       PID   PPID   %CPU    ELAPSED           TTY   TIME   COMMAND
root       1     0      0.000   10m9.965557662s   ?     0s     httpd -DFOREGROUND 
www-data   7     1      0.000   10m9.965785544s   ?     0s     httpd -DFOREGROUND 
www-data   8     1      0.000   10m9.965928944s   ?     0s     httpd -DFOREGROUND 
www-data   9     1      0.000   10m9.966310959s   ?     0s     httpd -DFOREGROUND 
www-data   91    1      0.000   7m53.966531091s   ?     0s     httpd -DFOREGROUND

podman stop:停止容器

[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS               NAMES
0cfcacd30c8e  docker.io/library/httpd:latest  httpd-foreground  21 seconds ago  Up 20 seconds ago                      web
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  12 minutes ago  Up 11 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell

-l:停止最新的容器 
[root@localhost ~]# podman stop -l
0cfcacd30c8e9736993b5ca57826649de65b424d386f7bdf954d38ce5b5ae24d
[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS               NAMES
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  12 minutes ago  Up 12 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell

podman start:启动容器

-l:启动最新的容器
[root@localhost ~]# podman start -l
0cfcacd30c8e9736993b5ca57826649de65b424d386f7bdf954d38ce5b5ae24d
[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS               NAMES
0cfcacd30c8e  docker.io/library/httpd:latest  httpd-foreground  2 minutes ago   Up 2 seconds ago                       web
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  13 minutes ago  Up 13 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell

podman rm:删除容器

-f:强制删除
-l:指定最新的
[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS               NAMES
0cfcacd30c8e  docker.io/library/httpd:latest  httpd-foreground  4 minutes ago   Up 2 minutes ago                       web
a15ffcd949cb  docker.io/library/httpd:latest  httpd-foreground  15 minutes ago  Up 15 minutes ago  0.0.0.0:80->80/tcp  thirsty_maxwell
[root@localhost ~]# podman rm -f -l
0cfcacd30c8e9736993b5ca57826649de65b424d386f7bdf954d38ce5b5ae24d

podman rmi:删除镜像

-f:强制删除
[root@localhost ~]# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/nginx   latest   f652ca386ed1   12 days ago   146 MB
docker.io/library/httpd   latest   ea28e1b82f31   12 days ago   148 MB
[root@localhost ~]# podman rmi -f f652ca386ed1
Untagged: docker.io/library/nginx:latest
Deleted: f652ca386ed135a4cbe356333e08ef0816f81b2ac8d0619af01e2b256837ed3e
[root@localhost ~]# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/httpd   latest   ea28e1b82f31   12 days ago   148 MB

podman tag:修改标签

[root@localhost ~]# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/httpd   latest   ea28e1b82f31   12 days ago   148 MB
[root@localhost ~]# podman tag docker.io/library/httpd:latest docker.io/syblyw0806/httpd:v1.0
[root@localhost ~]# podman images
REPOSITORY                   TAG      IMAGE ID       CREATED       SIZE
docker.io/syblyw0806/httpd   v1.0     ea28e1b82f31   12 days ago   148 MB
docker.io/library/httpd      latest   ea28e1b82f31   12 days ago   148 MB
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一部分 了解COM 第1章 COM概述 何谓CoM COM术语 COM利与弊 COM的好处 COM的局限性 COM组件与接口 何谓接口 接口特征 接口类型 接口规则 接口设计 COM组件的实现规则 实现IUnknown规则 内存管理规则 引用计数规则 COM激活 COM类型 COM客户机 COM服务器 ActiveX控件 COM与面向对象技术 包装 抽象 多态 继承 COMTrader应用程序 小结 第2章 由VC++建立并使用COM服务器 IDL文件 建立第一个COM服务器 定义自定义接口 实现IUnknown和自定义接口 完成COM服务器 生成测试客户机 用ATL建立COM服务器 关于ATL 用ATL建立进程内COM服务器 用ATL建立进程外COM服务器 线程与COM服务器 Win32多线程应用 线程COM组件 自动化与IDispatch 用VC++实现IDispatch ATL与自动化 Automation数据类型 再谈类型库 C++自动化客户机 VB自动化客户机 小结 第3章 用VB建立并使用COM服务器 选择COM项目 设计接口 描述接口 浏览接口 生成对象 使用ClassBuilder 增加属性 增加方法 增加事件与枚举 使用ActiveXDataObject(ADO) 在服务器组件中使用Recordset对象 在客户机组件中使用ADOR 生成断开的Recodset 生成自己的RecodsctS 使用用户定义类型 错误处理 服务器客户机错误处理 使用VBErr.Raise机制 在VB中使用线程模型 设置线程模型 了解再入性与公寓 小结 第二部分 COM与Internet 第4章 在VC++中建立并使用ActiveX控件 ACtiveX控件概还 属性与方法 控件与容器通信 事件与连接点 建立第一个控件 生成控件 测试控件 增加方法 增加属性 增加事件 增加属性页 允许属性保持 使用控件 建立复合控件 增加复合控件 增加功能 增加事件 处理复合控件事件 处理错误 使用控件 小结 第5章 在VB中建立并使用ActiveX控件 VB控件简介 约束与无约束控件 控件生成技术 属性类型 方法 属性配置 过程属性 环境属性配置 运行时只读属性 只在运行时有效的属性 扩展属性 容器属性 合成控件属性 可关联属性 持续与属性包 属性包 使用ActiveX控件界面向导 了解控件寿命 生成ActiveX控件 生成无约束控件 生成设计时数据约束控件 生成运行数据约束控件 小结 第6章 用VC++建立InternetCOM组件 IEActiveX控件 轻量级控件 安全控件 持续属性 文档对象模型编程 活动服务器组件 活动服务器页面 ASP页面的COM组件 小结 第7章 用VB建立InternetCOM组件 无窗口控件 ActiveX控件容器的线程模型 ActiveX控件的安全性 Web页面访问 VBDHTML项目 DHTML项目基础 DHTML应用程序样本 VBIIS应用程序 WebClass 一个IIS应用程序样本 设计控件 设计控件与HTML文件 样本设计控件 小结 第三部分 了解DCOM 第8章 DCOM概述 何谓DCOM 为什么使用DCOM DCOM操作 DCOM组件位置 进程内或进程外组件 代理 RPC(RemoteProcedureCall,远程过程调用) 调动 数据传递 DCOM配置实用程序 DCOM应用程序的安全机制 验证 授权 加密 整性检查 小结 第9章 用VC++建立DCOM服务器 标准与自定义调动 标准调动 自定又调动 网络通伯 远程激活 AppID注册表项 可配置AppID注册表项参数 IUknown优化 DCOM与NT服务 NT服务解剖 基于NT服务的COM服务器 小结 第10章 用VB建立DCOM服务器 应用程序对象模型 何谓对象模型 如何生成对象模型 DCOM设计准则与技术 再论调动 按数值与按引用 DCOM进程外服务器 建立DCOM组件 增加测试客户机 IIS应用程序 增加WebClasses 使用模板 增加自定义Webltems 远程错误处理 小结 第四部分 了解COM++ 第11章 COM++概述 COM与WindowsDNA 用户界面层技术 中间层技术 数据库层技术 组件服务配置 事务处理 排队组件(QC) 实时结构的限制 事务性消息排队 排队组件结构 排队组件故障恢复 QC安全性 动态负荷平衡 对象地 小结 第12章 用VC++建立COM++组件 ADO编程 ADO与OLEDB VC++中的ADO VC++的ADO扩展 建立COM++应用程序 温习IObjectContext接口 用ATL建立COM++组件 编制基于角色的安全性 处理COM+事务 控制事务结果 指定事务属性 确定事务情境 传递接口指针 共享状态 建立事务性COM+组件 小结 第13章 用VB建立COM+组件 了解事务 事务与多层应用程序 COM+与事务 事务属性:ACID COM+系统简介 COM+运行环境 COM+ComponentServices COM+接口 资源分配器 应用程序组件 探索COM+编程模型 COM+组件作为COMDLL 基本COM+编程规则 COM+API 用VB编程COM+ 对象描述表 COM+组件的生命周期 ObjectControl接口 MTS活动 COM+中生成对象 安全引用 组件之间的参数传递 数据类型 使用分布式事务 分布式事务协调器(MSDTC) COM+事务的工作 事务与有状态对象 使用共享属性管理器(SPMSharedProperyManager) 小结 第14章 了解MSMQ 何谓MSMQ MSMQ的好处 MSMQ组件 队列 消息 MSMQ对象模型 MSMQ设置 MSMQ基础 消息发送 消息接收 MSMQ事件 MSMQ事务 小结 第五部分 高级COM与COM+ 第15章 VC++与VB中的COM+服务 了解COM+激活 描述表包装器 激活顺序 使用即时(JIT)激活 使用对象构造 中性公寓简介 了解同步域 表示事务状态 取得对象信息 使用对象地 对象池的好处 对象地要求 对象地配置 使用排队组件 QC限制 QC配置 QC调用 QC播放控件 使用负荷平衡 负荷平衡要求 负荷平衡配置 小结 第16章 COM与COM+安全性 何谓安全性 WindowsNT安全简介 NT验证 NT扮演 NT访问控制 COM安全结构 验证 访问控制 启动权限 标_ 扮演与掩盖 安全总括 COM+安全 COM+说明性安全 COM+角色 编程COM与COM+安全 整个进程安全 接口级安全 激活安全 服务器方安全 调用描述表安全信息 SecuntyProperty信息 安全性与数据库访问 小结 第17章 Windows2000中的新COM特性 同步机制 COM同步API COM同步接口 异步COM 异步接口构造 异步接口调用 关于异步服务器与客户机 让服务器进行异步处理 调用序列化与自动完成 COM管道 COM管道接口 异步管道与提前读取 调用对象与调用取消 调用取消请求 调用取消处理 轻量级处理器 标准LWH 自定义LWH 小结 第六部分 调试与部署COM和COM+应用程序 第18章 调试与剖析COM和COM+应用程序 调试VB组件 调试MTS组件 调试COM+组件 使用条件编译 调试VC++组件 用VisualStUdioAnalyzer剖析 小结 第19章 部署COM与COM+应用程序 DCOM应用程序部署 配置DCOM服务器 配置DCOM客户机 在Internet上部署 Internet上部署与包装 签名CAB文件 许可ActiveX控件 自动化COM+配置 使用COMAdmin接口与集合 配置COM+应用程序 配置组件 配置角色 部署COM+应用程序 小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值