离线部署---docker

关键词:docker离线部署,images离线安装,docker compose,shell,minio

docker离线安装

docker install offline

下载相应的版本的deb包,我的系统是ubuntu20.04,因此选择focal文件夹,路径:

按照文档下载相应的包,挑选自己想要的版本。

从部署脚本中截取安装docker的部分:

#!/bin/bash

echo "Please run this script as root. Because it will install docker and docker-compose.
If you have installed docker and docker-compose, please ignore this message.
And i use docker-compose version is 3.8, so please make sure your docker engine version is 19.03.0+." echo # check user is root
whoami=$(whoami)
if [ "$whoami" != "root" ]; then
echo "Please run as root."
exit 1
fi # check docker is installed # verlt 24.0.5 19.03.0 && echo "yes" || echo "no" # no
# this function check $1 is less than $2
versionLessThan() {
if [ "$1" = "$2" ]; then
return 1
else
# sort -V: natural sort of (version) numbers within text
[ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
fi
} if ! which docker >/dev/null 2>&1; then echo "docker is not installed. Start install docker." # install docker use offline package
cd docker-install || exit sudo dpkg -i ./containerd.io_1.6.21-1_amd64.deb \
./docker-ce_24.0.2-1~ubuntu.20.04~focal_amd64.deb \
./docker-ce-cli_24.0.2-1~ubuntu.20.04~focal_amd64.deb \
./docker-buildx-plugin_0.10.5-1~ubuntu.20.04~focal_amd64.deb \
./docker-compose-plugin_2.18.1-1~ubuntu.20.04~focal_amd64.deb sudo service docker start cd ..
fi

如果当前机器已经安装docker了,那么我检查当前docker engine版本,我用的docker compose版本为3.8,因此我需要docker engine 大于等于 19.03.0

# check docekr engine version
docker_version=$(docker version --format '{{.Server.Version}}')
echo "docker engine version is $docker_version"
# if docker_version less than 19.03.0, exit
if versionLessThan "$docker_version" "19.03.0"; then
echo "docker engine version is less than 19.03.0, please upgrade docker engine."
exit 1
fi

离线安装镜像

将docker镜像备份:docker save -o yourImage.tar company/yourImage:v1.0

将备份的tar上传到离线的机器,加载镜像:docker load -i yourImage.tar

docker compose 启动容器

镜像加载好后,就可以用docker compose启动容器了

我的docker compose:

version: "3.8"
services:
cogent-admin:
container_name: cogent-admin
image: cogent/cogent-admin:v1.0
volumes:
- cogent-admin-data:/opt/cogent-admin/logs
- cogent-admin-data:/opt/cogent-admin/config
- cogent-admin-data:/opt/cogent-admin/uploadPath
- cogent-admin-data:/opt/device-upgrade-pack-repo
network_mode: "host"
depends_on:
- redis
- mysql
redis:
image: cogent/redis:v1.0
container_name: redis
command: redis-server /etc/redis/redis.conf --appendonly yes
volumes:
- redis-data:/data #数据文件挂载
- redis-data:/etc/redis
network_mode: "host"
mysql:
container_name: mysql
image: cogent/mysql:v1.0
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone='+08:00'
restart: always
environment:
MYSQL_DATABASE: 'cogent-admin'
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql-data:/var/lib/mysql #数据文件挂载
- mysql-conf-data:/etc/mysql #配置文件挂载 记得设置时区,东八区
- mysql-log-data:/var/log/mysql #日志文件挂载
network_mode: "host"
mediakit:
image: zlmediakit/zlmediakit:Debug.latest
container_name: mediakit
volumes:
- mediakit-data:/opt/media/bin/log
- mediakit-data:/opt/media/conf/config.ini
network_mode: "host"
minio:
image: quay.io/minio/minio
container_name: minio
command: server /data --console-address=":9090" --address=":9002" --ftp="address=:8021" --ftp="passive-port-range=30000-40000"
environment:
MINIO_ROOT_USER: ROOTNAME
MINIO_ROOT_PASSWORD: CHANGEME123
MINIO_NOTIFY_WEBHOOK_ENABLE_PRIMARY: "on"
MINIO_NOTIFY_WEBHOOK_ENDPOINT_PRIMARY: "http://127.0.0.1:8080/buckets/event"
volumes:
- minio-data:/data
network_mode: "host" volumes:
cogent-admin-data:
mediakit-data:
mysql-data:
mysql-conf-data:
mysql-log-data:
redis-data:
minio-data:

mysql的数据文件不能和日志文件等放到一起,否则启动时会报错,说数据目录已经有文件

对应用进行初始化

如果你有在初次部署时有对某些应用进行初始化的操作,比如我需要在初次部署时,将minio创建Access key,创建默认bucket,开启webhook。那么可以在minio容器启动后:

# check minio is running
if pgrep -x "minio" >/dev/null; then
echo "minio init..."
# minio deploy: create access key and secret key, create bucket, webhook event
docker exec -i minio bash < minioDeploy.sh
else
echo "minio is not running. This will influence file upload and download."
fi

这样会在容器中执行minioDeploy.sh脚本。

minioDeploy.sh脚本内容:

#!/bin/bash

# minio deploy: create access key and secret key, create bucket, webhook event
chmod +x /opt/bin/mc
cd /opt/bin || exit
mc alias set myminio http://127.0.0.1:9002 ROOTNAME CHANGEME123
mc admin user svcacct add --access-key "xFkEokGRAlwIs1234" --secret-key "jaz4FlvCDDKvbBuQYJ9NIohMUlRDsT132465789" myminio ROOTNAME
mc mb myminio/cogent
mc event add myminio/cogent arn:minio:sqs::PRIMARY:webhook --event put
mc event add myminio/cogent arn:minio:sqs::PRIMARY:webhook --event delete

完整的部署脚本:

#!/bin/bash

echo "Please run this script as root. Because it will install docker and docker-compose.
If you have installed docker and docker-compose, please ignore this message.
And i use docker-compose version is 3.8, so please make sure your docker engine version is 19.03.0+." echo # check user is root
whoami=$(whoami)
if [ "$whoami" != "root" ]; then
echo "Please run as root."
exit 1
fi # check docker is installed # verlt 24.0.5 19.03.0 && echo "yes" || echo "no" # no
# this function check $1 is less than $2
versionLessThan() {
if [ "$1" = "$2" ]; then
return 1
else
# sort -V: natural sort of (version) numbers within text
[ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
fi
} if ! which docker >/dev/null 2>&1; then echo "docker is not installed. Start install docker." # install docker use offline package
cd docker-install || exit sudo dpkg -i ./containerd.io_1.6.21-1_amd64.deb \
./docker-ce_24.0.2-1~ubuntu.20.04~focal_amd64.deb \
./docker-ce-cli_24.0.2-1~ubuntu.20.04~focal_amd64.deb \
./docker-buildx-plugin_0.10.5-1~ubuntu.20.04~focal_amd64.deb \
./docker-compose-plugin_2.18.1-1~ubuntu.20.04~focal_amd64.deb sudo service docker start cd ..
fi echo "docker is installed."
# check docekr engine version
docker_version=$(docker version --format '{{.Server.Version}}')
echo "docker engine version is $docker_version"
# if docker_version less than 19.03.0, exit
if versionLessThan "$docker_version" "19.03.0"; then
echo "docker engine version is less than 19.03.0, please upgrade docker engine."
exit 1
fi # laod images
docker load -i redis.tar
docker load -i mysql.tar
docker load -i mediakit.tar
docker load -i cogent-admin.tar
docker load -i minio.tar # start docker containers
docker compose up -d redis mysql minio
docker compose up -d cogent-admin mediakit # check minio is running
if pgrep -x "minio" >/dev/null; then
echo "minio init..."
# minio deploy: create access key and secret key, create bucket, webhook event
docker exec -i minio bash < minioDeploy.sh
else
echo "minio is not running. This will influence file upload and download."
fi

离线部署-docker的更多相关文章

  1. 记离线部署docker,以及docker下部署zabbix

    一.离线安装docker 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 上传软件并解压 [root@localhost op ...

  2. 微服务架构 - CentOS7离线部署docker

    1.环境准备 系统环境为: CentOS Linux release 7.5.1804 (Core) 安装docker版本为: 17.12.0-ce 2.准备部署文件 在http://mirrors. ...

  3. ubuntu 14.04 离线部署docker

    hett@hett-virtual-machine:~$ lsb_release -aNo LSB modules are available.Distributor ID:    UbuntuDes ...

  4. Centos7离线部署docker

    下载docker离线包 wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz 解压 tar -x ...

  5. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

  6. centos7.5离线安装Docker及容器运行报OCI runtime create failed 问题定位与解决

    前言 接上篇 <记一次centos挂载ceph存储的坑> 服务器重做了centos7.5版本的操作系统,剩下就是安装docker,考虑yum安装耗时较长,我一般都是直接安装二进制版本doc ...

  7. 离线手动部署docker镜像仓库——harbor仓库(HTTPS)

    实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...

  8. Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务

    如何在离线环境或纯内网环境的Linux机器上安装部署Docker服务或其他服务.本次我们以Docker服务和Ansible服务为例. 获取指定服务的所有rpm包 保证要获取rpm包的机器能够上网. 本 ...

  9. [转帖]在 Kubernetes 离线部署 KubeSphere

    在 Kubernetes 离线部署 KubeSphere https://kubesphere.io/docs/v2.0/zh-CN/installation/install-ks-offline/ ...

  10. 招商银行 KubeVela 离线部署实践

    招商银行云平台开发团队自 2021 年开始接触 KubeVela,并探索 KubeVela 在招商银行云平台的落地实践,借此提升云原生应用交付与管理能力.同时因为金融保险行业的特殊性,网络安全管控措施 ...

随机推荐

  1. 手撕Vuex-实现共享数据

    经过上一篇章介绍,完成了添加全局 $store,接下来就是实现共享数据的功能. 在 Vuex 中,共享数据是通过 state 来实现的,所以我们需要在 Nuex.js 文件中实现 state 的功能. ...

  2. docker镜像打包,上传

    docker镜像打包 前言 简单栗子 1.制作dockerfile 2.打包镜像 3.镜像打上tag 4.上传到仓库 docker镜像打包 前言 docker打包镜像 简单栗子 使用nginx打包一个 ...

  3. NLP文本匹配任务Text Matching 有监督训练:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践

    NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔).DSSM(双塔).Sentence BERT(双塔)项目实践 0 背景介绍以及相关概念 本项目对3种常用的文本 ...

  4. 4.1 C/C++ 使用结构与指针

    C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...

  5. C/C++ 文件与指针操作笔记

    创建临时文件 #include <stdio.h> int main(int argc, char *argv[]) { FILE *temp; char c; if ((temp = t ...

  6. 遥感图像处理笔记之【Multi-label Land Cover Classification with Deep Learning】

    遥感图像处理学习(3) 前言 遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月14日 2024年1月24日搬运至本人博客园平台 文章标题:Multi-label Land Cov ...

  7. Windows系统phpstudy+PbootCMS搭建网站记录

    环境 Windows 10 phpstudy v8.1           下载地址:https://www.xp.cn/download.html PbootCMS v3.2.4  下载地址:htt ...

  8. 【STL源码剖析】list::sort真的好用吗?Centos7-Linux环境g++Release下vector数组排序和list排序效率测试【超详细的注释和解释】

    说在前面的话 在使用C++的标准模板库的一些容器时,我们难免会遇到给序列排序的问题. 在学习list的时候,我们可能会了解到,algorithm::sort其实不是万能的. 当我们要给list排序的时 ...

  9. Linux-ln命令创建链接(软连接/硬链接)

    1.ln命令介绍 ln命令可以看作是 link 的缩写,其功能是创建文件间的链接,链接类型包括硬链接(hard link)和软链接(符号链接,symbolic link) 2.ln命令格式 ln 命令 ...

  10. Java 21 虚拟线程如何限流控制吞吐量

    虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性.但是,随着这些变化而来的是如何最好地管理此吞吐量的问题.本文,就 ...