由于每次都使用别人的容器,总是觉得甜糖没有量,就想自己搭一个容器跑一下试试,试了用centos:7作为基础镜像无法运行,使用ubuntu可以正常运行甜糖

1、拉取基础镜像

可以使用常用的一些基础镜像为底层,比如debian、centos、ubuntu等等,如果基础镜像不适用你的应用程序,可以更换,这里以ubuntu为示例

docker pull ubuntu:latest

2、创建dockerfile

首先可以看一下官方部署甜糖脚本的gitee项目:https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy

安装脚本:https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy/blob/master/setup.sh

脚本内容如下:

cache="/mnt/data/ttnode"
case $1 in
    -c=*|--cache=*)
    cache="${1#*=}"
    ;;
    *)
    ;;
esac

apt-get update -y
apt-get install -y wget ca-certificates qrencode unzip tar
apt-get upgrade tar unzip

manager_x86="ttnode-manager-x86"
manager_arm32="ttnode-manager-arm32"
manager_arm64="ttnode-manager-arm64"
arm32_url="https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy/attach_files/1104920/download/ttnode-manager-arm32.tar.gz"
arm64_url="https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy/attach_files/1104919/download/ttnode-manager-arm64.tar.gz"
x86_url="https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy/attach_files/1104921/download/ttnode-manager-x86.tar.gz"
deploy_dir="/usr/node"
manager=manager_arm32

platform=$(uname -a)
case $platform in
    *x86*)
        url=$x86_url
        manager=$manager_x86
        ;;
    *amd64*)
        url=$x86_url
        manager=$manager_x86
        ;;
    *armv8*)
        url=$arm64_url
        manager=$manager_arm64
        ;;
    *arm64*)
        url=$arm64_url
        manager=$manager_arm64
        ;;
    *aarch64*)
        url=$arm64_url
        manager=$manager_arm64
        ;;
    *)
        url=$arm32_url
        manager=$manager_arm32
esac

echo $url
tar_manager="$manager.tar.gz"
mkdir -p /opt/app
mkdir -p $cache
rm -rf $deploy_dir
rm -rf /usr/$tar_manager

cd /usr

wget $url
tar -xvf $tar_manager

mv $manager node

cd /usr/node
echo $cache > config.txt
chmod +x ttnode_manager

# 开机启动设置
wget "https://gitee.com/shenzhen-sweet-sugar/ttnode-auto-deploy/raw/master/rc.local"
cp $deploy_dir/rc.local /etc/rc.local
chmod +x /etc/rc.local
systemctl daemon-reload

/etc/rc.local

可以看到步骤大概如下:

第一步根据系统类型下载不同的压缩包,我这里是x86_64的系统,所以下载ttnode-manager-x86.tar.gz

第二步将ttnode-manager-x86.tar.gz解压到/usr并重命名为node

第三步安装所需命令

apt-get update -y
apt-get install -y wget ca-certificates qrencode unzip tar
apt-get upgrade tar unzip

第四步创建所需文件夹

mkdir -p /opt/app

mkdir -p /mnt/data/ttnode

第五步将缓存目录写入配置文件

echo /mnt/data/ttnode > /usr/node/config.txt

赋权启动脚本

chmod 777 /usr/node/ttnode_manager

启动脚本

./ttnode_manager

根据如上步骤编写Dockerfile如下:

# 使用基础镜像CentOS 7
#FROM centos:7
FROM ubuntu:latest

# 第一步:更新系统并安装所需命令
RUN apt-get update -y && \
    apt-get install -y wget ca-certificates qrencode unzip tar

# 第二步:将ttnode-manager-x86.tar.gz自动解压到/usr并重命名为node
ADD ttnode-manager-x86.tar.gz /usr/
RUN mv /usr/ttnode-manager-x86 /usr/node

# 第三步:创建所需文件夹
RUN mkdir -p /opt/app && \
    mkdir -p /mnt/data/ttnode

# 第四步:将缓存目录写入配置文件
RUN echo "/mnt/data/ttnode" > /usr/node/config.txt

# 第五步:赋权启动脚本
RUN chmod 777 /usr/node/ttnode_manager
#指定脚本工作目录
WORKDIR /usr/node
# 启动脚本
ENTRYPOINT ["./ttnode_manager"]
#CMD ["sleep", "infinity"]

3、构建镜像

执行如下命令使用Dockerfile构建出自己的镜像

docker build -t mynode:1.0 .

mynode:构建镜像的名称

1.0:镜像版本 如果不给则为latest,即最新版本

4、创建docker-compose启动脚本

由于不想给太大的内存,所以可以在脚本中设置内存限制,这里设置为2g

version: '3'
services:
  ttnode:
    image: mynode
    container_name: ttnode
    network_mode: host
    restart: always
    deploy:
      resources:
        limits:
          memory: 2g
    volumes:
      - /nodetemp:/mnt/data/ttnode

5、使用兼容模式设置启动容器

由于使用了内存限制,所以需要使用兼容模式启动docker-compose,否则内存限制不生效

docker-compose --compatibility up -d

–compatibility:使用兼容性运行