当前位置: 首页 > 知识库问答 >
问题:

如何包装成一个docker镜像?

叶景龙
2023-07-20

有一个应用是这样安装的,以root身份登陆vps(debian11):

#编译准备apt install git cvs zlib1g-dev make gcc -y#编译安装libowfatcvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfatcd libowfatmakemake install#编译安装opentrackergit clone git://erdgeist.org/opentrackercd  ../opentrackermakemake  install#将opentracker设置成一个service, 端口设置为6881mv opentracker /usr/bincd  ..cat <<EOF >/etc/systemd/system/opentracker.service[Unit]Description=opentracker server[Service]User=rootExecStart=/usr/bin/opentracker -p 6881 -P 681Restart=on-abortLimitCORE=infinityLimitNOFILE=infinityLimitNPROC=infinity[Install]WantedBy=multi-user.targetEOF#为端口6881打开防火墙apt install ufwufw  allow   6881#启动servicesystemctl enable /etc/systemd/system/opentracker.servicesystemctl start opentracker

我可否为这个应用制作一个docker镜像呢?用docker run来达到我上面那些代码的目的?

报错了

sudo docker build . -t opentracker:v1[+] Building 44.7s (3/3) FINISHED                                docker:default => [internal] load .dockerignore                                          3.0s => => transferring context: 2B                                            0.1s => [internal] load build definition from dockerfile                       3.5s => => transferring dockerfile: 445B                                       0.0s => ERROR [internal] load metadata for docker.io/library/debian:11        39.3s------ > [internal] load metadata for docker.io/library/debian:11:------dockerfile:8--------------------   6 |     RUN cd opentracker && make    7 |        8 | >>> FROM debian:11   9 |     COPY --from=builder /opentracker/opentracker /opt  10 |     EXPOSE 6881--------------------ERROR: failed to solve: debian:11: failed to do request: Head "https://docker.m.daocloud.io/v2/library/debian/manifests/11?ns=docker.io": socks connect tcp 127.0.0.1:8080->docker.m.daocloud.io:443: EOF

我的镜像源

cat  /etc/docker/daemon.json{    "registry-mirrors": [        "https://docker.m.daocloud.io",        "https://dockerproxy.com",        "https://docker.mirrors.ustc.edu.cn",        "https://docker.nju.edu.cn",        "http://hub-mirror.c.163.com"    ]}

我的本地代理可以使用

curl --socks5-hostname 127.0.0.1:10800 -s  -w "%{http_code}\n" -o /dev/null www.baidu.com200

在构建镜像时,使用代理

 sudo docker build . -t opentracker:v1  --build-arg https_proxy=socks5://127.0.0.1:10800[+] Building 51.4s (3/3) FINISHED                                                                                                                             docker:default => [internal] load .dockerignore                                                                                                                                       0.8s => => transferring context: 2B                                                                                                                                         0.0s => [internal] load build definition from dockerfile                                                                                                                    0.5s => => transferring dockerfile: 445B                                                                                                                                    0.0s => ERROR [internal] load metadata for docker.io/library/debian:11                                                                                                     49.0s------ > [internal] load metadata for docker.io/library/debian:11:------dockerfile:8--------------------   6 |     RUN cd opentracker && make    7 |        8 | >>> FROM debian:11   9 |     COPY --from=builder /opentracker/opentracker /opt  10 |     EXPOSE 6881--------------------ERROR: failed to solve: debian:11: failed to do request: Head "https://docker.m.daocloud.io/v2/library/debian/manifests/11?ns=docker.io": socks connect tcp 127.0.0.1:8080->docker.m.daocloud.io:443: EOF

还是报错

共有2个答案

琴献
2023-07-20

终于成功了。

{    "registry-mirrors": [        "https://docker.m.daocloud.io",        "https://dockerproxy.com",        "https://docker.mirrors.ustc.edu.cn",        "https://docker.nju.edu.cn",        "http://hub-mirror.c.163.com",        "http://mirrors.ustc.edu.cn/",        "http://mirror.azure.cn/",        "https://cr.console.aliyun.com"    ]}
须巴英
2023-07-20

可以,我按照你的脚本写了下面这个Dockerfile,如下:

# 这是一个多阶段构建的Dockerfile,这一部分是安装编译环境,和进行编译。FROM debian:11 as builderRUN apt update && apt install -y git cvs zlib1g-dev make gcc RUN cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfatRUN cd libowfat && make && make install RUN git clone git://erdgeist.org/opentracker RUN cd opentracker && make # 这个阶段是打包镜像,将上一个阶段编译出来的二进制文件拷贝到一个新的镜像中,目的是为了降低镜像的大小。FROM debian:11COPY --from=builder /opentracker/opentracker /optEXPOSE 6881ENTRYPOINT [ "/opt/opentracker" ]CMD [ "-p", "6881", "-P", "681" ]

复制上面的内容,重命名为Dockerfile,放到任意一个空目录,然后在这个目录下执行

docker build . -t opentracker:v1

完成之后会生成一个名为opentracker:v1的镜像

image.png

 类似资料:
  • 使用dockerfile打包太麻烦了!比如我想自己搭建一套php的开发环境,做成镜像,以后随时可用。并且我习惯使用堡塔作为面板工具。如果使用dockerfile的化,成本就太高了。 使用commit或者import/export的方式会导致镜像非常大! 是否有其他高效的打包方式可以,将容器打包成镜像?

  • 我阅读了Docker映像规范v1.2.0。上面说: 层由其序列化表示的加密哈希引用。这是用于传输层的tar存档上的SHA256摘要,表示为256位的十六进制编码,例如,SHA256:A9561EB1B190625C9ADB5A9513E72C4DEDAFC1CB2D5236C9A6957DFD5A9。层必须重复打包和解包,以避免更改层ID,例如使用tar split保存tar标头。请注意,用作层I

  • 本文向大家介绍详解Docker如何启动一个Centos镜像,包括了详解Docker如何启动一个Centos镜像的使用技巧和注意事项,需要的朋友参考一下 接着上文,我们下载完成一个Centos镜像之后,开始启动 #运行命令 这样就能启动一个一直停留在后台运行的Centos了。如果少了/bin/bash的话,Docker会生成一个Container但是马上就停止了,不会一致运行即使有了-d参数。 然后

  • 问题内容: 我收到以下错误: 这是我的组件: 我在这里做错了什么? 问题答案: 由于您已经使用过,因此该组件将无法作为道具使用。由于您已经使用过,作业操作将作为道具提供,您可以像这样使用它们 但是您可以进一步简化它,例如

  • 问题内容: 据我所知,泊坞窗映像在安装时即已安装。有没有办法更改此位置,例如更改为已安装的卷? 问题答案: 对于最新版本的Docker,您可以在中 (根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon- configuration- file )将参数的值设置为自定义路径。 对于较旧的版本,您可以在启动Doc

  • 目标:准备一个定制的 PHP 基础镜像。基础镜像,通常为含最小功能的系统镜像,之后的应用镜像都以此为基础。 本项目代码维护在 DaoCloud/php-apache-image 项目中。 制作基础镜像 选择 Ubuntu 官方的 14.04 版本为我们依赖的系统镜像。 FROM ubuntu:trusty 因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,DaoCloud 提供了一套境内