文章介绍:本篇博客初衷在于,第一:学习自己构建docker镜像,将自己喜欢的程序打包成docker镜像方便自己使用,第二:前段时间发布的[【Vyos-开源篇-6】- Vyos+GoBGP+SmartDNS 实现智能分流]有网友说,能不能省去云上的VPS,这样显的配置很繁琐,经过自己严格的思想斗争下,决定把步骤简化,只需要在vyos中配置几条命令就能基于BGP动态路由实现路由分流功能。
一、操作前准备 {#一-操作前准备}
1、一台安装好docker的linux(本篇以ubuntu为例)
2、要打包成docker镜像的程序(本篇用以博主的BGPServer为例)
3、docker hub 的账号(Docker Hub)
二、ubuntu安装docker {#二-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镜像 {#三-构建Docker镜像}
3.1、创建docker目录 {#3-1-创建docker目录}
mkdir docker
3.2、进入docker目录 {#3-2-进入docker目录}
cd docker
3.3、创建Dockerfile {#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、构建镜像 {#3-4-构建镜像}
bgpserver;cn 是可自定义参数(cn表示中国IP路由,这里是用于标识该镜像是拉取中国路由),这里的俩个参数根据你自己的想法自定义即可。
docker build -t bgpserver:cn .
3.5、查看镜像 {#3-5-查看镜像}
docker images
3.6、测试启动容器 {#3-6-测试启动容器}
3.6.1、创建docker网络 {#3-6-1-创建docker网络}
docker network create --subnet=100.66.66.0/30 bgpnetwork
3.6.2、启动容器 {#3-6-2-启动容器}
docker run -itd --name bgpserver --restart always --network bgpnetwork --ip 100.66.66.2 bgpserver:cn
3.6.3、查看容器状态 {#3-6-3-查看容器状态}
看见容器是up的表示启动完成
docker ps
3.6.7、进入容器 {#3-6-7-进入容器}
docker exec -it bgpserver bash
3.6.8、查看bgp端口是否启动 {#3-6-8-查看bgp端口是否启动}
netstat -atunlp | grep 179
四、上传镜像至Docker Hub {#四-上传镜像至Docker-Hub}
可以将做好的镜像上传到docker hub便于下次使用,就可以直接拉取镜像然后docker run
4.1、登录docker {#4-1-登录docker}
docker login
4.2、输入用户名 {#4-2-输入用户名}
输入用户名回车
4.3、输入密码 {#4-3-输入密码}
输入密码是看不见的,输完回车,可以看到登录成功
4.4、为镜像添加 Docker Hub 的仓库前缀 {#4-4-为镜像添加-Docker-Hub-的仓库前缀}
yangpin是你的docker账号名(也可自定义),后面的bgpserver:cn同上,运行完是没有任何回显的
docker tag bgpserver:cn yangpin/bgpserver:cn
4.5、上传镜像到 Docker Hub {#4-5-上传镜像到-Docker-Hub}
docker push yangpin/bgpserver:cn
4.6、打包镜像 {#4-6-打包镜像}
可以将镜像打包出来,解压后是二进制文件,可以直接运行
docker save -o bgpserver.tar bgpserver:cn