如何包装成一个docker镜像?

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

#编译准备
apt install git cvs zlib1g-dev make gcc -y
#编译安装libowfat
cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
cd libowfat
make
make install
#编译安装opentracker
git clone git://erdgeist.org/opentracker
cd  ../opentracker
make
make  install
#将opentracker设置成一个service, 端口设置为6881
mv opentracker /usr/bin
cd  ..
cat <<EOF >/etc/systemd/system/opentracker.service
[Unit]
Description=opentracker server

[Service]
User=root
ExecStart=/usr/bin/opentracker -p 6881 -P 681
Restart=on-abort
LimitCORE=infinity
LimitNOFILE=infinity
LimitNPROC=infinity

[Install]
WantedBy=multi-user.target
EOF
#为端口6881打开防火墙
apt install ufw
ufw  allow   6881
#启动service
systemctl enable /etc/systemd/system/opentracker.service
systemctl 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.com
200

在构建镜像时,使用代理

 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.3k
2 个回答

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

# 这是一个多阶段构建的Dockerfile,这一部分是安装编译环境,和进行编译。
FROM debian:11 as builder
RUN apt update && apt install -y git cvs zlib1g-dev make gcc 
RUN cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
RUN cd libowfat && make && make install 
RUN git clone git://erdgeist.org/opentracker 
RUN cd opentracker && make 

# 这个阶段是打包镜像,将上一个阶段编译出来的二进制文件拷贝到一个新的镜像中,目的是为了降低镜像的大小。
FROM debian:11
COPY --from=builder /opentracker/opentracker /opt
EXPOSE 6881
ENTRYPOINT [ "/opt/opentracker" ]
CMD [ "-p", "6881", "-P", "681" ]

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

docker build . -t opentracker:v1

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

image.png

终于成功了。

{
    "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"
    ]
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进