文章介绍:本篇博客初衷在于,第一:学习自己构建docker镜像,将自己喜欢的程序打包成docker镜像方便自己使用,第二:前段时间发布的[【Vyos-开源篇-6】- Vyos+GoBGP+SmartDNS 实现智能分流]有网友说,能不能省去云上的VPS,这样显的配置很繁琐,经过自己严格的思想斗争下,决定把步骤简化,只需要在vyos中配置几条命令就能基于BGP动态路由实现路由分流功能。

一、操作前准备

1、一台安装好docker的linux(本篇以ubuntu为例)

2、要打包成docker镜像的程序(本篇用以博主的BGPServer为例)

3、docker hub 的账号(Docker Hub

二、ubuntu安装docker

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && docker -v

三、构建Docker镜像

3.1、创建docker目录

mkdir docker

3.2、进入docker目录

cd docker

3.3、创建Dockerfile

nano Dockerfile

把下面的内容贴入Dockerfile中
以下信息是获取中国路由信息(CN)

FROM ubuntu:22.04

RUN apt update -y && \
    apt -y install sudo wget screen nano net-tools lsof && \
    wget -O bgp "https://github.com/yangpin97/BGPServer/releases/download/0.5/bgp" && \
    wget -O ChinaBGPZip.gob "https://github.com/yangpin97/BGPServer/releases/download/0.5/ChinaBGPZip.gob" && \
    wget -O config.ini "https://github.com/yangpin97/BGPServer/releases/download/0.5/config.ini" && \
    wget -O map.json.gz "https://github.com/yangpin97/BGPServer/releases/download/0.5/map.json.gz" && \
    chmod +x bgp

CMD ["bash", "-c", "screen -S bgp -d -m ./bgp -c ./config.ini -l CN; tail -f /dev/null"]

3.4、构建镜像

bgpserver;cn 是可自定义参数(cn表示中国IP路由,这里是用于标识该镜像是拉取中国路由),这里的俩个参数根据你自己的想法自定义即可。

docker build -t bgpserver:cn .

3.5、查看镜像

docker images

3.6、测试启动容器

3.6.1、创建docker网络

docker network create --subnet=100.66.66.0/30 bgpnetwork

3.6.2、启动容器

docker run -itd --name bgpserver --restart always --network bgpnetwork --ip 100.66.66.2 bgpserver:cn

3.6.3、查看容器状态

看见容器是up的表示启动完成

docker ps

yydy_2024-05-29_17-15-08

3.6.7、进入容器

docker exec -it bgpserver bash

3.6.8、查看bgp端口是否启动

netstat -atunlp | grep 179

yydy_2024-05-29_17-18-14

四、上传镜像至Docker Hub

可以将做好的镜像上传到docker hub便于下次使用,就可以直接拉取镜像然后docker run

4.1、登录docker

docker login

4.2、输入用户名

输入用户名回车

yydy_2024-05-29_17-21-02

4.3、输入密码

输入密码是看不见的,输完回车,可以看到登录成功

yydy_2024-05-29_17-22-29

4.4、为镜像添加 Docker Hub 的仓库前缀

yangpin是你的docker账号名(也可自定义),后面的bgpserver:cn同上,运行完是没有任何回显的

docker tag bgpserver:cn yangpin/bgpserver:cn

4.5、上传镜像到 Docker Hub

docker push yangpin/bgpserver:cn

yydy_2024-05-29_17-32-48

4.6、打包镜像

可以将镜像打包出来,解压后是二进制文件,可以直接运行

docker save -o bgpserver.tar bgpserver:cn

五、查看Docker Hub

yydy_2024-05-29_17-35-33

yydy_2024-05-29_17-36-14

yydy_2024-05-29_17-37-11

yydy_2024-05-29_17-36-51