首页 > 其他分享 >Alpine GNU C 库(glibc) Docker 镜像

Alpine GNU C 库(glibc) Docker 镜像

时间:2023-10-08 16:03:06浏览次数:42  
标签:rambo musl libc glibc GNU docker Docker Alpine

目录

glibc和musl libc的区别

g++和gcc是GNU编译器集合中的两个组件,g++是GNU C++编译器,gcc是GNU C语言编译器。
这两个编译器都使用glibc作为标准C库,glibc是GNU操作系统的标准C库,为支持C程序提供了许多函数和服务。

简单说,glibc是C标准库的一个实现,它包括头文件、函数库和其他的应用程序。
而g++和gcc则是编译器,它们将源代码编译成可执行文件,通过调用glibc库中的函数来执行程序。

当您使用g++编译C++代码时,它会链接到glibc库,并使用该库中的函数以进行内存分配、字符串处理等操作。
当您使用gcc编译C代码时,它也会链接到glibc库并使用标准C库中的函数。

因此,glibc库是与g++和gcc紧密相关的一部分,它为这些编译器提供了基本的C和C++支持,并为应用程序提供了一组丰富的函数库。

musl libc 和 glibc 都是 C 语言的标准库。它们的功能类似,都包括了很多常用的函数,如字符串处理、文件操作、进程控制等等。它们的主要区别在于实现方式和设计哲学。



musl libc 是一个轻量级的 C 标准库,它的设计目标是尽可能小而快,同时提供最高的代码质量和安全性。
musl libc 的源代码通常较短,编译速度较快,没有额外的依赖,因此非常适用于嵌入式系统和轻量级应用程序。

glibc 是一个较重的 C 标准库,它的设计目标是提供更广泛的功能和更高的兼容性。
glibc 的源代码较长,编译速度较慢,有许多库文件和依赖项,因此通常用于桌面系统和服务器软件开发。



总的来说,musl libc 和 glibc 都是优秀的 C 标准库,但在不同的场景下选择合适的库对于开发者来说非常重要。

musl libc 和 glibc 是两个常见的 C 标准库实现,它们有一些差异。下面列出了其中一些主要的差异:
1、大小和速度:musl libc 要小得多,因为它没有像 glibc 那样提供大量的额外功能。相反,musl libc 专注于尽可能减少代码大小和函数调用开销,以提高性能。
2、兼容性:glibc 是 Linux 系统上最常见的 C 标准库,并且具有广泛的兼容性,支持许多架构和操作系统。相比之下,musl libc 对其他平台和操作系统的移植性较差。
3、实现方法:musl libc 是使用静态链接编译的,这使得它更易于构建和管理,并且不需要动态链接器。相反,glibc 使用动态链接器,这也使得它更灵活,因为它可以动态加载所需的库。
4、POSIX 标准:musl libc 更加严格地遵循 POSIX 标准,而glibc 则添加了一些扩展,以提供更多的功能和兼容性。
5、错误处理:musl libc 实现的错误处理更严格和更规范,而 glibc 则有更多的错误处理选项,并且支持不同的语言环境。
6、版权问题:由于采用了 BSD 许可证,musl libc 比 glibc 更容易以开源、商业和专有软件的形式使用。

综上所述,选择使用 musl libc 还是 glibc 取决于您的具体需求。
如果您需要一个小巧且速度较快的C标准库在Linux系统上使用,则可以考虑使用musl libc
如果您需要更广泛的兼容性和功能,则可以使用glibc

Alpine C库 Docker镜像docke hub说明

此映像基于Alpine Linux映像,该映像仅5MB,并且包含glibc以支持针对glibc编译的专有项目(例如 OracleJDK、Anaconda)在Alpine上工作。

此映像包含一些使 glibc 与 musl libc(在 Alpine Linux 中默认)并行工作的怪癖。
Alpine Linux 的glibc软件包由 Sasha Gerrand 编写,发布在 sgerrand/alpine-pkg-glibc github 存储库中。

如果您需要更新libc库缓存,请使用 /usr/glibc-compat/sbin/ldconfig 而不是通常的 /sbin/ldconfig。您也可以像在基于libc的标准发行版上一样使用这些LD_LIBRARY_PATH。


# 示例
vim Dockerfile
FROM frolvlad/alpine-glibc
COPY ./my_app   /usr/local/bin/my_app


$ docker build -t my_app .

Debian12上安装podman

后期工作

# 对podman设置别名
rambo@debian:~$ echo "alias docker='/usr/bin/podman'" >> .bashrc
rambo@debian:~$ source .bashrc

# 设置国内源
rambo@debian:~$ sudo vim /etc/containers/registries.conf       # 在最后追加以下内容
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "2jriwsnk.mirror.aliyuncs.com"


# pull镜像
rambo@debian:~$ docker pull frolvlad/alpine-glibc
rambo@debian:~$ docker images
REPOSITORY                       TAG         IMAGE ID      CREATED        SIZE
docker.io/frolvlad/alpine-glibc  latest      fdba097f8ca0  22 months ago  18.3 MB

# 启一个容器
rambo@debian:~$ docker run -itd --name test1 --rm fdba0 /bin/sh
rambo@debian:~$ docker ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS             PORTS       NAMES
16e05a0274ac  docker.io/frolvlad/alpine-glibc:latest  /bin/sh     11 seconds ago  Up 11 seconds ago              test1

# 进入容器
rambo@debian:~$ docker exec -it test1  /bin/sh


# 查看glibc版本
/ # ldd --version
musl libc (x86_64)
Version 1.2.2
Dynamic Program Loader
Usage: /lib/ld-musl-x86_64.so.1 [options] [--] pathname


.
.
已经有几个image使用此image,因此您可以将它们作为使用示例引用:
alpine-oraclejdk8
alpine-mono
deno
.
.

防走丢

QQ群1:905201396
QQ群2:756805267
QQ群3:912567610

标签:rambo,musl,libc,glibc,GNU,docker,Docker,Alpine
From: https://www.cnblogs.com/smlile-you-me/p/17749319.html

相关文章

  • bip.docker
    #systemctlstopdockerbip放前面可生效。{"bip":"192.168.168.1/24"}{  "runtimes":{    "nvidia":{      "path":"nvidia-container-runtime",      "runtimeArgs":[]  ......
  • DockerFile部署wordpress并制作成镜像实践
    目录DockerFile部署wordpress实践部署wordpress准备Dockerfile所需文件开始制作成镜像访问网页将wordpress打包成镜像DockerFile部署wordpress实践部署wordpress#创建dockerfile目录[root@docker02~]#mkdir/Dockerfile#进入dockerfile目录[root@docker02......
  • Docker网络
    目录Docker网络docker网络类型Briage修改网桥IPHostContainer(K8s使用的模式)None自定义网络模式Docker网络docker网络类型Bridge桥接类似VMwareNATHost容器与宿主机之间网卡共享不支持端口映射,但性能好Container(K8s使用的模式)容器与容器之间......
  • Docker 自动化构建镜像
    目录Docker自动化构建镜像Dockerfile介绍Dockerfile语法查看docker容器日志自动构建wordpressDockerfile优化使用docker运行MySQL容器通信容器的单向通信使用docker启动zabbix5.0使用docker启动zabbix6.4使用docker启动wordpress使用docker启动gitlab使用d......
  • Docker基础入门
    目录Docker基础入门容器化衍生虚拟化时代KVMOpenStack(编排KVM的工具)一张图理解IAAS、PAAS、SAASDocker介绍编排工具容器化和虚拟化对比VM虚拟化和Docker特性对比什么是容器Docker基本实现原理NameSpace和Cgroup介绍(不是docker的也不是k8s的是内核的)namespace:......
  • Docker 容器使用与打包镜像
    目录Docker容器使用与打包镜像docker创建容器的流程:docker远程连接方式(不安全)docker为何会启动就退出容器容器名词解析docker常用命令docker使用相关命令-容器容器端口映射使用docker运行nginx做小游戏数据卷映射手动制作镜像手动卡前台方法Docker容器使用与打包镜......
  • 使用docker搭建moon节点
    使用docker搭建moon节点​#内网穿透zerotier#​Startacontainerdockerrun--namezerotier-moon-d--restartalways-p9993:9993/udp-v~/somewhere:/var/lib/zerotier-oneseedgou/zerotier-moon-41.2.3.4Replace1.2.3.4​withyourmoon'sIPv4addressandrep......
  • Docker安装报错处理
    一、安装Docker报错公钥尚未安装              【解决办法】:     1、查看系统版本信息cat/etc/redhat-release                  2、从开源镜像站mirrors.163.com找到系统对应秘钥       ......
  • WSL docker环境中运行StableDiffusion
    教程来源RunningStableDiffusionWebUIUsingDocker|SygilWebUI(sygil-dev.github.io)1.安装运行的依赖环境1.1安装docker (https://docs.docker.com/engine/install/#supported-platforms)1.2 https://docs.nvidia.com/datacenter/cloud-native/container-toolk......
  • Docker镜像操作应用指南
    Docker镜像是Docker生态系统的最重要的概念。本文将介绍它们的基本概念、操作和使用方法,希望可以帮助小伙伴们更好地理解和应用Docker技术。在此之前我们先了解一下Docker架构,可以帮助我们更好的理解Docker镜像操作1.Docker架构我们昨天已经安装了Docker,因此今天才可以操作Do......