前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将 Docker 镜像编译成独立可移植二进制文件

将 Docker 镜像编译成独立可移植二进制文件

作者头像
Tinywan
发布2024-05-11 17:01:55
1450
发布2024-05-11 17:01:55
举报
文章被收录于专栏:开源技术小栈开源技术小栈

介绍

Dockerc 它是一个容器镜像编译器,可以将Docker容器镜像编译成独立的可移植二进制文件。这意味着用户不再需要使用docker run命令来运行容器,也不需要使用pip installnpm i来安装软件包,而是可以直接运行编译后的可执行文件。

编译后的二进制文件可以像普通二进制文件一样被调用。此外,网络服务在容器内部运行时,用户可以直接访问,而无需指定-p参数来映射端口。

这个项目对于希望简化容器部署和管理的用户来说非常有用,尤其是那些希望避免复杂的Docker命令行操作的用户。

安装webman

代码语言:javascript
复制
composer create-project workerman/webman tinywan-docker-webman

下载PHP二进制

代码语言:javascript
复制
wget https://www.workerman.net/download/php/php-8.2.8-static-bin-x86_64.tar.gz

解压即可得到一个PHP可执行文件,可直接使用,无需安装PHP环境。目前只支持Linux系统。通常下载x86_64架构。下载地址 https://www.workerman.net/download

解压后会生成一个二进制PHP文件

代码语言:javascript
复制
tar -zxvf php-8.2.8-static-bin-x86_64.tar.gz

查看版本

代码语言:javascript
复制
./php -v
PHP 8.2.8 (cli) (built: Aug 10 2023 13:02:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies

构建Docker镜像

Dockerfile 文件
代码语言:javascript
复制
FROM alpine:latest

RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories

RUN apk update && \
    apk --no-cache upgrade && \
    rm -rf /var/cache/apk/* && \
    mkdir -p /app/opcache

WORKDIR /app

COPY ./ /app/
# 直接使用 PHP 静态二进制文件
RUN mv /app/php /usr/local/bin/php && chmod +x /usr/local/bin/php

EXPOSE 8787

CMD ["php", "-c", "php.ini", "start.php", "start"]
php.ini 配置文件
代码语言:javascript
复制
date.timezone="UTC"
构建镜像
代码语言:javascript
复制
docker build . -t tinywan/webman:8.2.8 --load

输出结果

代码语言:javascript
复制
[+] Building 3.7s (11/11) FINISHED                                                                                            docker:default
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 436B                                                                                                    0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                        0.2s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [1/6] FROM docker.io/library/alpine:latest@sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300                  0.0s
 => [internal] load build context                                                                                                       0.3s
 => => transferring context: 30.72MB                                                                                                    0.3s
 => CACHED [2/6] RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories                                       0.0s
 => CACHED [3/6] RUN apk update &&     apk --no-cache upgrade &&     rm -rf /var/cache/apk/* &&     mkdir -p /app/opcache               0.0s
 => CACHED [4/6] WORKDIR /app                                                                                                           0.0s
 => [5/6] COPY ./ /app/                                                                                                                 0.7s
 => [6/6] RUN mv /app/php /usr/local/bin/php && chmod +x /usr/local/bin/php                                                             2.1s
 => exporting to image                                                                                                                  0.3s
 => => exporting layers                                                                                                                 0.3s
 => => writing image sha256:45de23415b779b5660070e8035667dca0b5b389d2e229ad4a7092d9e650370c5                                            0.0s
 => => naming to docker.io/tinywan/webman:8.2.8  

查看镜像

代码语言:javascript
复制
# docker images

REPOSITORY                  TAG                IMAGE ID       CREATED              SIZE
tinywan/webman              8.2.8              45de23415b77   About a minute ago   71MB

下载 dockerc

代码语言:javascript
复制
wget https://github.com/NilsIrl/dockerc/releases/download/v0.2.1/dockerc
chmod u+x dockerc

使用 dockerc 将镜像导出为二进制文件

代码语言:javascript
复制
./dockerc --image docker-daemon:tinywan/webman:8.2.8 --output webman.bin

输出以下结果表示导出成功

代码语言:javascript
复制
Getting image source signatures
Copying blob a31c5b53afbf done   | 
Copying blob 8d3ac3489996 done   | 
Copying blob 3a1eb8879fac done   | 
Copying blob fca36167c75a done   | 
Copying blob 5f70bf18a086 done   | 
Copying blob b9b78906a59e done   | 
Copying config 2678f4ef97 done   | 
Writing manifest to image destination
Parallel mksquashfs: Using 2 processors
Creating 4.0 filesystem on webman.bin, block size 131072.
[============================================================================================================================|] 671/671 100%

Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
 compressed data, compressed metadata, compressed fragments,
 compressed xattrs, compressed ids
 duplicates are removed
Filesystem size 11344.11 Kbytes (11.08 Mbytes)
 31.87% of uncompressed filesystem size (35594.23 Kbytes)
Inode table size 6844 bytes (6.68 Kbytes)
 21.11% of uncompressed inode table size (32419 bytes)
Directory table size 9080 bytes (8.87 Kbytes)
 46.37% of uncompressed directory table size (19580 bytes)
Xattr table size 36 bytes (0.04 Kbytes)
 112.50% of uncompressed xattr table size (32 bytes)
Number of duplicate files found 10
Number of inodes 911
Number of files 414
Number of fragments 17
Number of symbolic links 331
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 166
Number of hard-links 0
Number of ids (unique uids + gids) 1
Number of uids 1
 root (0)
Number of gids 1
 root (0)

执行二进制文件

代码语言:javascript
复制
# ./webman.bin 

unknown argument ignored: lazytime
Workerman[start.php] start in DEBUG mode
------------------------------------------- WORKERMAN -------------------------------------------
Workerman version:4.1.15          PHP version:8.2.8           Event-Loop:\Workerman\Events\Event
-------------------------------------------- WORKERS --------------------------------------------
proto   user            worker          listen                 processes    status           
tcp     root            webman          http://0.0.0.0:8282    8             [OK]            
tcp     root            monitor         none                   1             [OK]            
-------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安装webman
  • 下载PHP二进制
  • 构建Docker镜像
    • Dockerfile 文件
      • php.ini 配置文件
        • 构建镜像
        • 下载 dockerc
        • 使用 dockerc 将镜像导出为二进制文件
        • 执行二进制文件
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档