0


docker&docker-compose 离线部署

一 安装docker

这里提供在线(yum)安装docker的方式。
需要离线安装docker可参考:Centos7.6离线安装docker
离线安装docker,一定注意docker对依赖所需版本是否对应。
我碰到的问题就是由于版本不对应导致
这里提供离线安装docker18.09.8 及相关依赖包网盘地址
提取码:izxb

1.1 卸载(可选)

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

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 enabledocker# 查看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 报错
在这里插入图片描述
报错信息

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

解决方法

# 编辑镜像仓库文件sudovi /etc/docker/daemon.json
{"registry-mirrors":["https://registry.docker-cn.com","https://s3d6l2fh.mirror.aliyuncs.com"]}# 重启dockersudo systemctl restart docker

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

解决方法:
docker-compose修改Mysql密码

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/weixin_42293937/article/details/139495638
版权归原作者 一直游到海水变蓝丿 所有, 如有侵权,请联系我们删除。

“docker&docker-compose 离线部署”的评论:

还没有评论