docker&docker-compose 离线部署

一直游到海水变蓝丿 2024-09-13 09:37:01 阅读 71

一 安装docker

这里提供在线(yum)安装docker的方式。

需要离线安装docker可参考:Centos7.6离线安装docker

离线安装docker,一定注意docker对依赖所需版本是否对应。

我碰到的问题就是由于版本不对应导致

这里提供离线安装docker18.09.8 及相关依赖包网盘地址

提取码:izxb

1.1 卸载(可选)

如果之前安装过docker,可以用下面的命令卸载docker

<code>yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-selinux \

docker-engine-selinux \

docker-engine \

docker-ce

1.2 安装docker

1.2.1 安装yum工具

yum install -y yum-utils \

device-mapper-persistent-data \

lvm2 --skip-broken

1.2.2 更新本地镜像源

# 设置docker镜像源

yum-config-manager \

--add-repo \

https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

1.2.3 安装docker社区版

yum install -y docker-ce

1.2.4 查看docker 版本

docker --version

1.3 docker 常用命令

# 启动docker

systemctl start docker

# 重启docker

systemctl restart docker

# 关闭docker

systemctl stop docker

# 开机启动docker

systemctl enable docker

# 查看docker状态

systemctl status docker

# 查看docker 版本

docker version

二 centos安装docker-compose

1.下载

2.把下载的安装包上传到服务器的/usr/local/bin/目录下

3.增加执行权限

chmod a+x docker-compose

4. 测试

docker-compose --version

三 离线安装包获取

1. 先在有网络的机器环境下安装并导出minio、redis、nginx、mysql镜像

1.1.1 minio 镜像

#拉取最新的minio(需要网络)

docker search minio

docker pull minio/minio

#查看已安装的minio镜像

docker images

#导出minio镜像的安装包

docker save minio/minio -o minio.tar

1.1.2.redis 镜像

#拉取最新的redis(需要网络)

docker search redis

docker pull redis

#查看已安装的redis镜像

docker images

#导出redis镜像的安装包

docker save redis -o redis.tar

1.1.3 nginx 镜像

#拉取最新的nginx(需要网络)

docker search nginx

docker pull nginx

#查看已安装的nginx镜像

docker images

#导出nginx镜像的安装包

docker save nginx -o nginx.tar

1.1.4 mysql 镜像

#拉取最新的mysql(需要网络)

docker search mysql

docker pull mysql

#查看已安装的mysql镜像

docker images

#导出mysql镜像的安装包

docker save mysql -o mysql.tar

1.1.5 apache/rocketmq 镜像

#拉取最新的apache/rocketmq(需要网络)

docker search apache/rocketmq

docker pull apache/rocketmq

docker images

#导出apache/rocketmq镜像的安装包

docker save apache/rocketmq -o rocketmq.tar

2.在无网络的机器上导入minio、redis、nginx、mysql镜像包

2.1.1 上传绝对路径:/root/minio.tar
2.1.2 上传绝对路径:/root/redis.tar
2.1.3 上传绝对路径:/root/nginx.tar
2.1.4 上传绝对路径:/root/mysql.tar
2.1.5 上传绝对路径:/root/rocketmq.tar

3.新建data文件夹

3.1.1 在/data/redis/conf目录下创建配置文件redis.conf

# 关闭保护模式,允许远程连接

protected-mode no

# 开启AOF持久化

appendonly yes

# 密码

requirepass 123456

3.1.2 在/data/nginx/conf目录下创建配置文件nginx.conf

user root;

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

gzip on;

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

listen 81;

server_name localhost;

location / {

root /usr/share/nginx/html;

index index.html index.htm;

}

}

}

3.1.3 在/usr/local/rocketmq/broker/conf目录下创建配置文件broker.conf

注意 brokerIP1 值为你宿主机的 IP

# 集群名称

brokerClusterName = DefaultCluster

# 节点名称

brokerName = broker-a

# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0

brokerId = 0

# Broker服务地址String内部使用填内网ip,如果是需要给外部使用填公网ip

# 修改为你宿主机的 IP

brokerIP1 = 192.182.2.217

# Broker角色

brokerRole = ASYNC_MASTER

# 刷盘方式

flushDiskType = ASYNC_FLUSH

# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04

deleteWhen = 04

# 以小时计算的文件保留时间 默认值72小时

fileReservedTime = 72

# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

3.1.4 在/root目录下创建配置文件docker-compose.yml

绝对路径:/root/docker-compose.yml

version: '3'

services:

minio:

image: minio/minio

container_name: minio

ports:

- 9000:9000

- 9011:9011

environment:

TZ: Asia/Shanghai

MINIO_ACCESS_KEY: minio

MINIO_SECRET_KEY: minio123

volumes:

# 宿主机目录 /data/minio 映射到容器内目录/data ,作为minio的数据文件目录

- /data/minio/data:/data

- /data/minio/config:/root/.minio/ #映射配置目录

command: server --console-address ':9011' /data

redis:

image: redis

container_name: redis

ports:

- 6379:6379

volumes:

- /data/redis/conf/redis.conf:/etc/redis/redis.conf

- /data/redis/data:/data

restart: always

privileged: true

command: ["redis-server","/etc/redis/redis.conf"]

nginx:

restart: always

image: nginx

ports:

- 81:81

- 444:444

volumes:

- /data/nginx/data/conf.d:/etc/nginx/conf.d

- /data/nginx/log:/var/log/nginx

- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

- /data/nginx/html:/usr/share/nginx/html

mysql:

image: mysql

container_name: mysql

environment:

- MYSQL_ROOT_PASSWORD=12345678

volumes:

- /data/mysql/data:/var/lib/mysql

ports:

- 3306:3306

restart: always

rmqnamesrv:

image: apache/rocketmq

container_name: rmqnamesrv

ports:

- 9876:9876

restart: always

privileged: true

volumes:

- /usr/local/rocketmq/nameserver/logs:/home/rocketmq/logs

- /usr/local/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh

environment:

- MAX_HEAP_SIZE=256M

- HEAP_NEWSIZE=128M

command: ["sh","mqnamesrv"]

broker:

image: apache/rocketmq

container_name: rmqbroker

ports:

- 10909:10909

- 10911:10911

restart: always

privileged: true

volumes:

- /usr/local/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf

depends_on:

- 'rmqnamesrv'

environment:

- NAMESRV_ADDR=rmqnamesrv:9876

- MAX_HEAP_SIZE=512M

- HEAP_NEWSIZE=256M

command: ["sh","mqbroker","-c","/home/rocketmq/broker.conf"]

rmqdashboard:

image: apacherocketmq/rocketmq-dashboard:latest

container_name: rocketmq-dashboard

ports:

- 8080:8080

restart: always

privileged: true

depends_on:

- 'rmqnamesrv'

environment:

- JAVA_OPTS= -Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false

3.1.4

加载minio、redis、nginx、mysql镜像

#在 镜像目录下执行命令 加载镜像

docker load -i minio.tar

docker load -i redis.tar

docker load -i nginx.tar

docker load -i mysql.tar

docker load -i rocketmq.tar

# 在docker-compose.yml的目录下执行命令 启动镜像

docker-compose up -d

四 参考

docker&docker-compose 离线部署各种组件

Centos安装Docker

五 遇到问题

1.通过下载离线安装包来安装docker,安装好docker-compose后,再通过docker-compose 离线部署MySQL时报错

报错内容如下:

[ERROR] [MY-010457] --initialize specified but the data directory has files in it. Aborting.

[ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.

[ERROR] [MY-010119] [Server] Aborting

在这里插入图片描述

网上针对此问题也有提出的解决方法:

(1)docker 安装 mysql

(2)docker Mysql 报错 The designated data directory /var/lib/mysql/ is unusable. You can remove all files

(3)使用 Docker Compose 安装 MySQL 以及所遇到的问题解决

上面的解决方法对我本地出现的问题不适用,所以换个思路。

我先是在线指定安装(yum安装)docker18.09.8版本,查看该docker版本所依赖的版本

yum指定安装docker18.09.8

docker18.09.8及对应依赖版本

然后下载对应版本(docker18.09.8)的依赖离线包

在这里插入图片描述

然后再rpm安装docker18.09.8及其对应依赖包,再用docker-compose部署MySQL成功启动没有问题!

所以我本地出现问题的原因是由于依赖版本不一致。

2.拉取镜像时报错

执行 docker-compose up -d 报错

在这里插入图片描述

报错信息

<code>error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/ea/eae6c5db5d119ed594f0bcfe73829e4a8df128bc3ca874d8f11b4ff2cde48769/data?verify=1718074820-WwX%2BvPxNQ9DVRKwrAh7NjgQKCdw%3D: dial tcp 108.160.165.62:443: i/o timeout

解决方法

# 编辑镜像仓库文件

sudo vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://registry.docker-cn.com","https://s3d6l2fh.mirror.aliyuncs.com"]

}

# 重启docker

sudo systemctl restart docker

3. 修改docker-compose.yml配置文件的MYSQL_ROOT_PASSWORD 后 没有生效

解决方法:

docker-compose修改Mysql密码



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。