使用Docker离线部署
本文阅读预计需要: 3 minutes
环境需求
- 一台离线的服务器A, 需要部署可道云网盘
- 一台能联网的服务器B, 要求有docker环境, 用于下载安装包和在线拉取镜像
离线安装Docker
先从Docker官网下载页面下载Docker
的软件包, 这里以CentOS7
为例
分别下载最新的:
- containerd.io
- docker-ce
- docker-ce-cli
- docker-compose-plugin
- docker-ce-rootless-extras
- docker-scan-plugin
把以上文件都上传到服务器A, 假设目录位于docker
, 执行安装命令
[root@kod ~]# rpm -ivh docker/*.rpm
准备中... ################################# [100%]
正在升级/安装...
1:docker-scan-plugin-0:0.23.0-3.el7################################# [ 17%]
2:docker-ce-cli-1:20.10.19-3.el7 ################################# [ 33%]
3:containerd.io-1.6.13-3.1.el7 ################################# [ 50%]
4:docker-ce-rootless-extras-0:20.10################################# [ 67%]
5:docker-ce-3:20.10.19-3.el7 ################################# [ 83%]
6:docker-compose-plugin-0:2.14.1-3.################################# [100%]
[root@kod ~]# docker -v
Docker version 20.10.19, build d85ef84
导入镜像
在一台能联网、有Docker环境的服务器B上拉取镜像, 并导出tar包
$ docker pull kodcloud/kodbox
$ docker pull redis:alpine
$ docker pull mariadb:10.6
$ docker save -o kodbox.tar kodcloud/kodbox
$ docker save -o redis.tar redis:alpine
$ docker save -o mariadb.tar mariadb
将tar包上传到离线服务器A上, 然后执行导入命令
$ docker load -i kodbox.tar
$ docker load -i redis.tar
$ docker load -i mariadb.tar
导入完成后, docker images
看到3个镜像, kodbox、redis 和mariadb
http方式快速启动
注意
在离线服务器A上创建一个目录作为项目目录,后面所有命令都在这个目录下执行
-
创建文件.env来设置环境变量(必须修改等号右边的值,形式如
MYSQL_USER=kodbox
,值不要包含&符号),这些在docker启动时会自动传入容器$ mkdir /kodbox && cd /kodbox $ vim .env
-
创建文件来设置数据库环境变量
vim db.env
MYSQL_PASSWORD=
MYSQL_DATABASE=kodbox
MYSQL_USER=kodbox
-
创建docker-compose.yml 文件,在其中配置映射端口、持久化目录
$ vim docker-compose.yml
version: '3.5' services: db: image: mariadb:10.6 restart: always command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes: - "./db:/var/lib/mysql" #./db是数据库持久化目录,可以修改 # - "./etc/mysql/conf.d:/etc/mysql/conf.d" #增加自定义mysql配置 environment: - MYSQL_ROOT_PASSWORD= - MARIADB_AUTO_UPGRADE=1 - MARIADB_DISABLE_UPGRADE_BACKUP=1 env_file: - db.env app: image: kodcloud/kodbox restart: always ports: - 80:80 #左边80是使用端口,可以修改 volumes: - "./site:/var/www/html" #./site是站点目录位置,可以修改 environment: - MYSQL_HOST=db - REDIS_HOST=redis env_file: - db.env depends_on: - db - redis redis: image: redis:alpine restart: always
进入项目目录,执行docker compose up -d
启动命令,会自动拉取容器并运行
$ docker compose up -d
Creating network "kodbox_default" with the default driver
Creating kodbox_redis_1 ... done
Creating kodbox_db_1 ... done
Creating kodbox_app_1 ... done
列出docker容器,可以看到3个容器正在运行
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f596f5b00305 kodcloud/kodbox "/entrypoint.sh /usr…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 9000/tcp kodbox_app_1
5f94f6d1aabb mariadb "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp kodbox_db_1
e6296b23fb0a redis:alpine "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp kodbox_redis_1
如果需要停止服务
$ docker compose down
Stopping kodbox_app_1 ... done
Stopping kodbox_db_1 ... done
Stopping kodbox_redis_1 ... done
Removing kodbox_app_1 ... done
Removing kodbox_db_1 ... done
Removing kodbox_redis_1 ... done
Removing network kodbox_default
由于数据库和kodbox已经挂载了持久化目录,需要时可以重新启动,不用担心数据丢失
$ docker compose up -d
然后访问KodBox安装向导,完成系统初始化