目 录CONTENT

文章目录

Docker相关操作

筱晶哥哥
2023-02-06 / 0 评论 / 0 点赞 / 62 阅读 / 101845 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文记录Docker相关操作,备忘。

前言

保证Linux内核为3.0+,否则建议升级内核版本

# 查看linux内核
[root@docker ~]# uname -r
3.10.0-1127.el7.x86_64

以下操作请使用root用户操作

注意:以下部分脚本需要根据自身情况和容器镜像版本自行改动,比如挂载目录,相关环境参数等。

不同版本镜像的容器内目录也不一样,需要自己去查看,然后挂载启动。

内网安装Docker

下载二进制安装包

https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz

https://download.docker.com/linux/static/stable/x86_64/

我这边选择的是 docker-20.10.7.tgz 这个版本

下载完成后放到 /opt/docker/install-packages 目录下

[root@docker ~]# mkdir -p /opt/docker/install-packages
[root@docker ~]# /opt/docker/install-packages
[root@docker install-packages]# ls
docker-20.10.7.tgz

解压安装包

cd /opt/docker/install-packages
tar -zxvf docker-20.10.7.tgz

将docker文件移到系统可执行文件目录下

如果不移到可执行文件目录下则docker指令用不了

[root@docker docker]# ls
docker  docker-20.10.7.tgz
[root@docker docker]# mv docker/* /usr/bin

配置docker.service

vi /usr/lib/systemd/system/docker.service

内容如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target

启动docker服务

systemctl daemon-reload
systemctl start docker.service

开机自启动docker

systemctl enable docker

注意:内网安装docker没有办法从公网拉取任何东西,除非自己打包镜像到服务器运行

公网安装Docker

安装

# 1、卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2、需要的安装包
yum install -y yum-utils

# 3、设置镜像的仓库
# 推荐使用国内的,比如阿里云镜像,十分快
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
#更新yum软件包索引(centos7)
yum makecache fast
#更新yum软件包索引(centos8)
dnf makecache

# 4、安装docker相关的 docker-ce 社区版 而ee是企业版
# 查看yum源支持的docker版本
yum list docker-ce --showduplicates | sort -r
# 安装docker 这里我们使用社区版即可
yum install -y docker-ce docker-ce-cli containerd.io 
# 如果要安装指定版本,执行如下语句,后面跟的是版本号
# 使用 docker-compose-plugin 安装的docker-compose命令是 docker compose 
# 如果用后面那种方式安装的话,命令为 docker-compose
yum install -y docker-ce-20.10.7-3.el7 docker-ce-cli-20.10.7-3.el7 containerd.io docker-compose-plugin

# 5、启动docker
systemctl start docker

# 6、使用docker version查看是否安装成功
docker version

阿里云镜像加速

推荐安装 1.10.0 以上版本的 Docker 客户端

配置镜像加速器

您可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器

# 1.创建一个目录
sudo mkdir -p /etc/docker

# 2.编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://n2zg5mlq.mirror.aliyuncs.com"]
}
EOF

# 3.重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 设置开机自启
systemctl enable docker.service

# 关闭开机自启
systemctl disable docker.service

常用命令

帮助命令

# 查看docker的版本信息
docker version
# 显示docker的系统信息
docker info 
# 帮助命令,万能命令
docker 命令 --help

镜像命令

# 查看所有本地主机上的镜像 可以使用 docker image ls 代替
docker images

# 搜索镜像,例如搜索mysql镜像:docker search mysql
docker search 

# 下载镜像(docker image pull),例如下载mysql5.7:docker pull mysql:5.7
docker pull 

# 删除镜像(docker image rm),例如删除某个容器:docker rmi -f bf756fb1ae65,bf756fb1ae65为容器id
docker rmi 

容器命令

 # 新建容器并启动
docker run 镜像id
# 列出所有运行的容器(docker container list)
docker ps  
# 删除指定容器
docker rm 容器id
# 启动容器
docker start 容器id
# 重启容器
docker restart 容器id	
# 停止当前正在运行的容器
docker stop 容器id
# 强制停止当前容器
docker kill 容器id	
# 查看日志
docker logs 容器id

退出容器

# 容器直接退出
exit
# 容器不停止退出
ctrl + P + Q

删除容器

# 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm 容器id
# 删除所有的容器
docker rm -f $(docker ps -aq)  	 
# 删除所有的容器
docker ps -a -q|xargs docker rm 

查看容器中进程信息

docker top 容器id

查看镜像的元数据

docker inspect 容器id

保存对应镜像

保存对应的镜像,以便于在无网环境中使用

# 进入到保存镜像的目录,执行如下命令
docker save -o mysql_5.7.tar mysql:5.7

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i mysql_5.7.tar

Docker安装各个组件

MySQL

公网

# 拉取镜像
docker pull mysql:5.7

# 查看全部镜像
docker images

# 启动容器
docker run -d -p 3306:3306 --name mysql5.7 \
    -v /my-container/mysql5.7/conf:/etc/mysql \
    -v /my-container/mysql5.7/logs:/var/log/mysql \
    -v /my-container/mysql5.7/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=Hallo@123 \
    -e TZ=Asia/Shanghai \
    --restart=always mysql:5.7 \
    --lower_case_table_names=1 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_general_ci \
    --default-authentication-plugin=mysql_native_password

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o mysql_5.7.tar mysql:5.7

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i mysql_5.7.tar

Redis

公网

# 拉取镜像
docker pull redis:6.0.8
# 查看镜像
docker images
# 启动容器
docker run  -p 6379:6379 --name  redis6.0.8 \
    -v /my-container/redis6.0.8/data:/data \
    -d redis:6.0.8 redis-server --appendonly yes --requirepass "123456"

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o redis_6.0.8.tar redis:6.0.8

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i redis_6.0.8.tar

Nginx

搭建临时容器

为的是将初始配置拿出来,防止挂载是找不到文件报错。

# 拉取镜像
docker pull nginx:1.21.1
# 查看镜像
docker images
# 启动临时容器
docker run \
-p 80:80 \
--name nginx-temp \
-d nginx:1.21.1   

# 创建conf文件夹
mkdir -p /my-container/nginx/conf
# 复制conf
docker cp nginx-temp:/etc/nginx/ /my-container/nginx/conf
cd /my-container/nginx/conf
mv nginx/* .

# 删除临时容器
docker rm -f nginx-temp

公网

docker run -p 80:80 --name nginx1.21.1 \
-e TZ=Asia/Shanghai -e LANG=en_US.UTF-8 \
-v /my-container/nginx/html:/usr/share/nginx/html \
-v /my-container/nginx/logs/:/var/log/nginx \
-v /my-container/nginx/conf:/etc/nginx \
-d nginx:1.21.1

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o nginx_1.21.1.tar nginx:1.21.1

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i nginx_1.21.1.tar

MinIO

公网

# 拉取镜像
docker pull minio/minio
# 查看镜像
docker images
# 启动容器
docker run \
-p 9000:9000 \
-p 9001:9001 \
-d --name minio \
-v /my-container/minio/data:/data \
-v /my-container/minio/conf:/root/.minio \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=Hallo@123" \
minio/minio server /data --console-address ":9000" --address ":9001"

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o minio.tar minio/minio

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i minio.tar

登录控制台

访问 9000 端口,然后使用上面指定的用户和密码登录系统

Nacos

搭建临时容器

# 拉取镜像
docker pull nacos/nacos-server:v2.1.2
# 启动临时容器
docker run \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos-temp \
-d nacos/nacos-server:v2.1.2

# 创建conf和logs文件夹
mkdir -p /my-container/nacos/conf
mkdir -p /my-container/nacos/logs
# 复制conf和logs文件夹
docker cp nacos-temp:/home/nacos/logs/ /my-container/nacos/
docker cp nacos-temp:/home/nacos/conf/ /my-container/nacos/

# 删除临时容器
docker rm -f nacos-temp

导入Nacos数据表

由于Nacos配置要持久到外部数据源中,这里使用MySQL作为持久化数据库,下面是SQL,创建nacos_config数据库,然后执行以下SQL

注意:此处的Nacos数据表需要根据自己安装的Nacos版本来,不同版本的数据表可能有差别,自己去官网获取即可。

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE users (
	username varchar(50) NOT NULL PRIMARY KEY,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

-- 初始密码
-- INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

-- Hallo@123
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$C.oBUcKsqwLoFpbIfhH7rewh9fpEB2fFniImQ6dloKwzVLhe.QXe2', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

公网

# 启动容器
docker run -d \
--name nacos \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
-v /my-container/nacos/logs:/home/nacos/logs/ \
-v /my-container/nacos/conf:/home/nacos/conf/ \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.56.104 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=Hallo@123 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
nacos/nacos-server:v2.1.2

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o nacos_v2.1.2.tar nacos/nacos-server:v2.1.2

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i nacos_v2.1.2.tar

ES和Kibana

公网

elasticsearch
# 拉取镜像
docker pull elasticsearch:7.14.1 

# 查看全部镜像
docker images

# 创建挂载目录
mkdir -p /my-container/elasticsearch/config
mkdir -p /my-container/elasticsearch/data
mkdir -p /my-container/elasticsearch/logs
mkdir -p /my-container/elasticsearch/plugins

# 赋予权限,保证可读可写可执行
chmod -R 777 /my-container/elasticsearch/

# 可以被远程任何机器访问
# echo "http.host: 0.0.0.0" >> /my-container/elasticsearch/config/elasticsearch.yml
vi /my-container/elasticsearch/config/elasticsearch.yml
# 输入以下内容
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

# 启动es容器
# 9200 是发送 http 请求的端口
# 9300 是在分布式集群状态下节点之间的通信端口
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e TZ="Asia/Shanghai" \
-e LANG="en_US.UTF-8" \
-e ES_JAVA_OPTS="-Xmx512m -Xms512m" \
-e ELASTIC_PASSWORD="Hallo@123" \
-v /my-container/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /my-container/elasticsearch/data/:/usr/share/data \
-v /my-container/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /my-container/elasticsearch/logs:/usr/share/elasticsearch/logs \
-d elasticsearch:7.14.1 
kibana
# 可视化工具kibana
# 拉取镜像
docker pull kibana:7.14.1

# 查看全部镜像
docker images

编写kibana配置

mkdir -p /my-container/elasticsearch/kibana/config
vi /my-container/elasticsearch/kibana/config/kibana.yml

chmod 777 /my-container/elasticsearch/kibana

输入以下内容

server.name: kibana
server.host: "0.0.0.0"
server.publicBaseUrl: "http://kibana:5601"  # 这里地址改为你访问kibana的地址,不能以 / 结尾
elasticsearch.hosts: [ "http://192.168.56.104:9200" ] # TODO 修改为自己的ip
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"  # es账号
elasticsearch.password: "Hallo@123"   # es密码
i18n.locale: zh-CN # 中文
# 启动kibana容器
docker run --name kibana \
-v /my-container/elasticsearch/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-p 5601:5601 -d kibana:7.14.1
  1. ES访问地址:[ip地址:9200]
    账号密码:elastic/Hallo@123
  2. kibana访问地址:[ip地址:5601/app/dev_tools#/console]
    账号密码:elastic/Hallo@123

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o es_7.14.1.tar elasticsearch:7.14.1 
docker save -o kibana_7.14.1.tar kibana:7.14.1 

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i es_7.14.1.tar
docker load -i kibana_7.14.1.tar

RocketMQ

用 docker-compose 方式创建,比较方便

公网

# 拉取镜像
docker pull foxiswho/rocketmq:server
docker pull foxiswho/rocketmq:broker
docker pull styletang/rocketmq-console-ng

# 查看全部镜像
docker images

内网

公网环境保存对应镜像,上传到对应服务器,启动容器即可。

# 进入到保存镜像的目录,执行如下命令
docker save -o rocketmq-server.tar foxiswho/rocketmq:server
docker save -o rocketmq-broker.tar foxiswho/rocketmq:broker
docker save -o rocketmq-console-ng.tar styletang/rocketmq-console-ng

将安装包保存起来,上传到对应服务器

# 将安装包加载到镜像中
docker load -i rocketmq-server.tar
docker load -i rocketmq-broker.tar
docker load -i rocketmq-console-ng.tar

Ftp

docker run -d -v /home/ftp:/home/vsftpd \
-p 20:20 -p 21:21 -p  21100-21110:21100-21110 \
-e FTP_USER=test -e FTP_PASS=test \
-e PASV_ADDRESS=10.10.11.240 \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd

PASV_ADDRESS的地址被动模式需要使用,需要设置为宿主机的IP,否则文件无权限查看。

镜像导入导出脚本

导出脚本

#!/bin/bash
# 获取到 "image:tag" 格式的镜像名
IMG_NAME=`docker images | grep -v TAG | awk '{print $1":"$2}'`
 
# 定义镜像存放目录
DIR="/data/docker/image_tar"
if [ ! -d "$DIR" ]; then
  echo -e "\033[34m${DIR}\033[0m 不存在"
  mkdir -p "$DIR"
  echo -e "\033[34m${DIR}\033[0m 已创建"
else
  echo -e "\033[34m${DIR}\033[0m 已存在"
fi
echo ""
for IMAGE in $IMG_NAME
do
  echo -e "正在保存 \033[33m${IMAGE}\033[0m"
  SAVE_NAME=`echo $IMAGE | awk -F: '{print $1"_"$2}' | sed 's/\//_/g'`
  docker save $IMAGE -o ${DIR}/${SAVE_NAME}.tar
  echo -e "已保存到 \033[34m${DIR}/\033[31m${SAVE_NAME}.tar\033[0m"
  echo ""
done

导入脚本

#!/bin/bash
DIR="/opt/docker/docker-images"
for i in `ls $DIR/*`;do docker load <$i;done

Docker-compose安装各个组件

注意以下内网环境的镜像均为从公网环境导出的

安装Docker-compose

公网

# 下载docker-compose二进制文件
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m`  > /usr/local/bin/docker-compose

# 授权
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose version

内网

从公网下载对应的docker-compose二进制文件,然后上传到服务器的 /usr/local/bin 目录,命名为 docker-compose

# 从公网下载,输出的路径即为公网下载路径
echo  https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m`

# 授权
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose version

MySQL

mkdir -p /my-docker-compose/mysql
cd /my-docker-compose/mysql
vi docker-compose-mysql5.7.yml

编写yml文件

version: '3'
services:
  mysql:
    # 需要使用的镜像
    image: mysql:5.7
    # 容器名称
    container_name: mysql5.7
    # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped
    # 数据卷挂载路径设置,将本机目录映射到容器目录
    volumes:
      - ./mysql5.7/conf:/etc/mysql
      - ./mysql5.7/logs:/var/log/mysql
      - ./mysql5.7/data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
      # 可执行初始化sql脚本的目录 
      # -- tips:`/var/lib/mysql`目录下无数据的时候才会执行(即第一次启动的时候才会执行)
      - ./mysql5.7/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --lower_case_table_names=1
    entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
    # 设置环境变量,相当于 docker run 命令中的 -e
    environment:                       
      - MYSQL_ROOT_PASSWORD=Hallo@123
      - MYSQL_ROOT_HOST=%
      # 初始化的数据库名称,这里设置为Nacos的持久化数据库
      - MYSQL_DATABASE=nacos_config
      - TZ=Asia/Shanghai
    # 宿主机和容器的端口映射关系,左边宿主机端口:右边容器端口
    ports:                         
      - "3306:3306"

构建

docker-compose -f docker-compose-mysql5.7.yml -p mysql5.7 up -d

Redis

mkdir -p /my-docker-compose/redis
cd /my-docker-compose/redis
vi docker-compose-redis.yml

编写yml文件

version: '3'
services:
  redis:
    image: redis:6.0.8
    container_name: redis6.0.8
    restart: unless-stopped
    # 启动redis服务并添加密码为:123456,并开启redis持久化配置
    command: redis-server --requirepass 123456 --appendonly yes 
    environment:                        
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    volumes:                            
      - "./redis/data:/data"
      - "./redis/conf/redis.conf:/etc/redis/redis.conf"
    ports:                            
      - "6379:6379"

构建

docker-compose -f docker-compose-redis.yml -p redis up -d

Nginx

mkdir -p /my-docker-compose/nginx
cd /my-docker-compose/nginx
vi docker-compose-nginx.yml

编写yml文件

version: '3'
services:
  nginx:
    image: nginx:1.21.1                 # 镜像`nginx:1.21.1`
    container_name: nginx1.21.1         # 容器名为'nginx'
    restart: unless-stopped
    volumes:                            # 数据卷挂载路径设置,将本机目录映射到容器目录
      - "./nginx/conf:/etc/nginx"
      - "./nginx/html:/usr/share/nginx/html"
      - "./nginx/log:/var/log/nginx"
    environment:                        # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    ports:                              # 映射端口
      - "80:80"

构建

构建前记得复制对应的挂载文件,否则会报找不到文件错误

[root@docker nginx]# pwd
/my-docker-compose/nginx
# 拉取镜像
docker pull nginx:1.21.1
# 查看镜像
docker images
# 启动临时容器
docker run \
-p 80:80 \
--name nginx-temp \
-d nginx:1.21.1   

# 创建conf文件夹
mkdir -p ./nginx/conf
# 复制conf
docker cp nginx-temp:/etc/nginx/ ./nginx/conf
cd ./nginx/conf
mv nginx/* .

# 删除临时容器
docker rm -f nginx-temp
docker-compose -f docker-compose-nginx.yml -p nginx up -d

Nacos

mkdir -p /my-docker-compose/nacos
cd /my-docker-compose/nacos
vi docker-compose-nacos.yml

编写yml文件

# Nacos文档:https://nacos.io/zh-cn/index.html
version: '3'

services:
  nacos:
    image: nacos/nacos-server:v2.1.2
    container_name: nacos-server
    restart: unless-stopped
    volumes:                                                     
      - ./nacos/conf:/home/nacos/conf
      - ./nacos/logs:/home/nacos/logs
    environment:                        # 设置环境变量,相当于docker run命令中的-e
      - PREFER_HOST_MODE=hostname
      - MODE=standalone                           # 单机模式启动
      - SPRING_DATASOURCE_PLATFORM=mysql          # 数据源平台,仅支持mysql或不保存empty
      # TODO 修改mysql连接信息
      - MYSQL_SERVICE_HOST=192.168.56.104         # 注:这里不能为`127.0.0.1`或`localhost`方式!!!
      - MYSQL_SERVICE_DB_NAME=nacos_config        # 所需sql脚本位于 `nacos/nacos-mysql.sql`
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=Hallo@123
      # TODO 修改JVM调优参数
      - JVM_XMS=128m   #-Xms default :2g
      - JVM_XMX=128m   #-Xmx default :2g
      - JVM_XMN=64m    #-Xmn default :1g
      - JVM_MS=32m     #-XX:MetaspaceSize default :128m
      - JVM_MMS=32m    #-XX:MaxMetaspaceSize default :320m
    ports:
      - "8848:8848"

构建

构建前记得复制对应的挂载文件,否则会报找不到文件错误

[root@docker nacos]# pwd
/my-docker-compose/nacos
# 拉取镜像
docker pull nacos/nacos-server:v2.1.2
# 启动临时容器
docker run \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos-temp \
-d nacos/nacos-server:v2.1.2

# 创建conf和logs文件夹
mkdir -p ./nacos/conf
mkdir -p ./nacos/logs
# 复制conf和logs文件夹
docker cp nacos-temp:/home/nacos/logs/ ./nacos/
docker cp nacos-temp:/home/nacos/conf/ ./nacos/

# 删除临时容器
docker rm -f nacos-temp
# tips: 构建前请先保证对应数据源可用,并创建了nacos相关数据库表
docker-compose -f docker-compose-nacos.yml -p nacos up -d

MinIO

mkdir -p /my-docker-compose/minio
cd /my-docker-compose/minio
vi docker-compose-minio.yml

编写yml文件

version: '3'
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    restart: unless-stopped
    volumes:
      - "./minio/data:/data"
      - "./minio/minio:/minio"
      - "./minio/conf:/root/.minio"
    environment:                                      # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MINIO_PROMETHEUS_AUTH_TYPE: "public"
      MINIO_ACCESS_KEY: "minio"                        # 登录账号
      MINIO_SECRET_KEY: "Hallo@123"                    # 登录密码
    command: server /data  --console-address ":9000" --address ":9001"
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
    ports:                              # 映射端口
      - "9000:9000"
      - "9001:9001"
      - "42330:42330"

构建

docker-compose -f docker-compose-minio.yml -p minio up -d

ES和Kibana

前置挂载

编写配置文件便于挂载

# ES配置
mkdir -p /my-docker-compose/elasticsearch/elasticsearch/config
mkdir -p /my-docker-compose/elasticsearch/elasticsearch/logs
mkdir -p /my-docker-compose/elasticsearch/elasticsearch/data
vi /my-docker-compose/elasticsearch/elasticsearch/config/elasticsearch.yml

# 输入以下内容
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true



# Kibana配置
mkdir -p /my-docker-compose/elasticsearch/elasticsearch/kibana/config
vi /my-docker-compose/elasticsearch/elasticsearch/kibana/config/kibana.yml

# 输入以下内容
server.name: kibana
server.host: "0.0.0.0"
server.publicBaseUrl: "http://kibana:5601"  # 这里地址改为你访问kibana的地址,不能以 / 结尾
elasticsearch.hosts: [ "http://192.168.56.104:9200" ] # TODO 修改为自己的ip
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"  # es账号
elasticsearch.password: "Hallo@123"   # es密码
i18n.locale: zh-CN # 中文

编写yml文件

mkdir -p /my-docker-compose/elasticsearch
cd /my-docker-compose/elasticsearch
vi docker-compose-elasticsearch.yml
version: '3'

services:
  elasticsearch:
    image: elasticsearch:7.14.1      # 原镜像`elasticsearch:7.14.1`
    container_name: elasticsearch    # 容器名为'elasticsearch'
    restart: unless-stopped
    volumes:  # 数据卷挂载路径设置,将本机目录映射到容器目录
      - "./elasticsearch/data:/usr/share/elasticsearch/data"
      - "./elasticsearch/logs:/usr/share/elasticsearch/logs"
      - "./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml"
    environment:      # 设置环境变量,相当于 docker run 命令中的 -e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xmx512m -Xms512m"
      ELASTIC_PASSWORD: "Hallo@123" # elastic账号密码
    ports:
      - "9200:9200"
      - "9300:9300"

  kibana:
    image: kibana:7.14.1
    container_name: kibana
    restart: unless-stopped
    volumes:
      - ./elasticsearch/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    links:
      - elasticsearch

构建

# 当前目录下所有文件赋予权限(读、写、执行)
cd /my-docker-compose
chmod -R 777 ./elasticsearch
# 运行
cd /my-docker-compose/elasticsearch
docker-compose -f docker-compose-elasticsearch.yml -p elasticsearch up -d
# 运行后,再次给新创建的文件赋予权限
chmod -R 777 ./elasticsearch
  1. ES访问地址:[ip地址:9200]
    账号密码:elastic/Hallo@123
  2. kibana访问地址:[ip地址:5601/app/dev_tools#/console]
    账号密码:elastic/Hallo@123

RocketMQ

前置挂载

mkdir -p /my-docker-compose/rocketmq/rocketmq/rocketmq_broker/conf
vi /my-docker-compose/rocketmq/rocketmq/rocketmq_broker/conf/broker.conf

输入以下内容

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.


# 所属集群名字
brokerClusterName=DefaultCluster

# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a

# 0 表示 Master,> 0 表示 Slave
brokerId=0

# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.56.104:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);
# 解决方式2 brokerIP1 设置宿主机IP,不要使用 docker 内部IP
brokerIP1=192.168.56.104

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true

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

# Broker 对外服务的监听端口
listenPort=10911

# 删除文件时间点,默认凌晨4点
deleteWhen=04

# 文件保留时间,默认48小时
fileReservedTime=120

# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536

# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

编写yml文件

mkdir -p /my-docker-compose/rocketmq
cd /my-docker-compose/rocketmq
vi docker-compose-rocketmq.yml
version: '3'
services:
  # mq服务
  rocketmq_server:
    image: foxiswho/rocketmq:server
    container_name: rocketmq_server
    ports:
      - 9876:9876
    volumes:
      - ./rocketmq/rocketmq_server/logs:/opt/logs
      - ./rocketmq/rocketmq_server/store:/opt/store

  # mq中间件
  rocketmq_broker:
    image: foxiswho/rocketmq:broker
    container_name: rocketmq_broker
    ports:
      - 10909:10909
      - 10911:10911
    volumes:
      - ./rocketmq/rocketmq_broker/logs:/opt/logs
      - ./rocketmq/rocketmq_broker/store:/opt/store
      - ./rocketmq/rocketmq_broker/conf/broker.conf:/etc/rocketmq/broker.conf
    environment:
      NAMESRV_ADDR: "rocketmq_server:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
    command: mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - rocketmq_server

  # mq可视化控制台
  rocketmq_console_ng:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq_console_ng
    ports:
      - 9002:8080
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=rocketmq_server:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
    depends_on:
      - rocketmq_server

构建

注:修改 /my-docker-compose/rocketmq/rocketmq/rocketmq_broker/conf/broker.conf中配置brokerIP1宿主机IP

docker-compose -f docker-compose-rocketmq.yml -p rocketmq up -d

访问地址 http://ip地址:9002

前置挂载脚本

由于有不少组件需要提前将部分配置文件准备好,以便于和容器相关目录以及文件挂载,这里写个脚本统一创建以上组件需要的目录和配置文件及其内容

这里比如说我将上面各个组件都挂载在 /app/docker-compose

#!/bin/bash
# 挂载目录
MOUNT_DIR=/app/docker-compose
SERVER_IP=10.10.11.248

############挂载目录相关####################
mkdir -p $MOUNT_DIR/mysql/mysql5.7/conf
mkdir -p $MOUNT_DIR/redis/redis
mkdir -p $MOUNT_DIR/nginx/nginx
mkdir -p $MOUNT_DIR/minio/minio
mkdir -p $MOUNT_DIR/nacos/nacos
mkdir -p $MOUNT_DIR/elasticsearch/elasticsearch
mkdir -p $MOUNT_DIR/rocketmq/rocketmq
############挂载目录相关####################

############MySQL相关####################
cat > $MOUNT_DIR/mysql/mysql5.7/conf/my.conf << EOF
[mysqld]
user=root                     # MySQL启动用户
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8mb4      # 设置mysql服务端默认字符集
pid-file=/var/run/mysqld/mysqld.pid  # pid文件所在目录
socket=/var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir=/var/lib/mysql              # 数据文件存放的目录
#log-error=/var/log/mysql/error.log
#bind-address=127.0.0.1                   # MySQL绑定IP
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!

# 允许最大连接数
max_connections=200

# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================

# 同一局域网内注意要唯一
server-id=3306
# 开启二进制日志功能 & 日志位置存放位置/var/lib/mysql
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
# binlog格式
# 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
# 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
# 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
binlog_format=ROW
# FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
binlog_row_image=FULL
# 日志文件大小
# max_binlog_size=1G
max_binlog_size=100M
# 定义清除过期日志的时间(这里设置为7天)
expire_logs_days=7

# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4  # 设置mysql客户端默认字符集
EOF
############MySQL相关####################

############Redis相关####################
cat > $MOUNT_DIR/redis/redis/conf/redis.conf << EOF
# 开启保护模式后,需要 bind ip 或 设置密码
protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 16

always-show-logo yes

# 900秒内,如果超过1个key被修改,则发起快照保存
save 900 1
# 300秒内,如果超过10个key被修改,则发起快照保存
save 300 10
# 60秒内,如果1万个key被修改,则发起快照保存
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

rdb-del-sync-files no

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-diskless-load disabled

repl-disable-tcp-nodelay no

replica-priority 100

acllog-max-len 128

oom-score-adj no

oom-score-adj-values 0 200 800

appendonly yes

appendfilename "appendonly.aof"

# 每次操作都会立即写入aof文件中
# appendfsync always
# 每秒持久化一次(默认配置)
appendfsync everysec
# 不主动进行同步操作,默认30s一次
# appendfsync no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

EOF

echo -e "\e[31mRedis前置配置已完成 \e[0m"
############Redis相关####################

############Nginx相关####################
# 拉取镜像
docker pull nginx:1.21.1
# 启动临时容器
docker run \
-p 80:80 \
--name nginx-temp \
-d nginx:1.21.1   

# 创建conf文件夹
mkdir -p $MOUNT_DIR/nginx/nginx/conf
# 复制conf
docker cp nginx-temp:/etc/nginx/ $MOUNT_DIR/nginx/nginx/conf
cd $MOUNT_DIR/nginx/nginx/conf
mv nginx/* .

# 删除临时容器
docker rm -f nginx-temp
echo -e "\e[31m #Nginx前置配置已完成 \e[0m"
############Nginx相关####################

############Nacos相关####################
# 拉取镜像
docker pull nacos/nacos-server:v2.1.2
# 启动临时容器
docker run \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos-temp \
-d nacos/nacos-server:v2.1.2

# 创建conf和logs文件夹
mkdir -p $MOUNT_DIR/nacos/nacos/conf
mkdir -p $MOUNT_DIR/nacos/nacos/logs
# 复制conf和logs文件夹
docker cp nacos-temp:/home/nacos/logs/ $MOUNT_DIR/nacos/nacos/
docker cp nacos-temp:/home/nacos/conf/ $MOUNT_DIR/nacos/nacos/

# 删除临时容器
docker rm -f nacos-temp

echo -e "\e[31m #Nacos前置配置已完成 \e[0m"
############Nacos相关####################


############ES和Kibana相关####################
# ES配置
mkdir -p $MOUNT_DIR/elasticsearch/elasticsearch/config
mkdir -p $MOUNT_DIR/elasticsearch/elasticsearch/logs
mkdir -p $MOUNT_DIR/elasticsearch/elasticsearch/data

cat >${MOUNT_DIR}/elasticsearch/elasticsearch/config/elasticsearch.yml<<EOF
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true'
EOF

mkdir -p $MOUNT_DIR/elasticsearch/elasticsearch/kibana/config
cat >${MOUNT_DIR}/elasticsearch/elasticsearch/kibana/config/kibana.yml<<EOF
server.name: kibana
server.host: "0.0.0.0"
server.publicBaseUrl: "http://kibana:5601"  # 这里地址改为你访问kibana的地址,不能以 / 结尾
elasticsearch.hosts: [ "http://$SERVER_IP:9200" ] # TODO 修改为自己的ip
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"  # es账号
elasticsearch.password: "Hallo@123"   # es密码
i18n.locale: zh-CN # 中文
EOF
echo -e "\e[31m #ES和Kibana前置配置已完成 \e[0m"
############ES和Kibana相关####################

############Rocket相关###################
mkdir -p $MOUNT_DIR/rocketmq/rocketmq/rocketmq_broker/conf
cat >${MOUNT_DIR}/rocketmq/rocketmq/rocketmq_broker/conf/broker.conf<<EOF
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.


# 所属集群名字
brokerClusterName=DefaultCluster

# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a

# 0 表示 Master,> 0 表示 Slave
brokerId=0

# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.56.104:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);
# 解决方式2 brokerIP1 设置宿主机IP,不要使用 docker 内部IP
brokerIP1=$SERVER_IP

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true

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

# Broker 对外服务的监听端口
listenPort=10911

# 删除文件时间点,默认凌晨4点
deleteWhen=04

# 文件保留时间,默认48小时
fileReservedTime=120

# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536

# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128
EOF
echo -e "\e[31m #Rocket前置配置已完成 \e[0m"
############Rocket相关###################

Docker-compose批量编排

编写环境变量文件

  1. 在docker-compose.yml同级目录下面创建 .env 文件value不要加引号,引用会自动添加

  2. 在docker-compose.yml中使用key引用

  3. 如果环境变量文件不和docker-compose.yml在同一级目录下,则需要在docker-compose.yml文件中指定环境变量文件所在位置,比如

    version: '3'
    services:
      mysql:
        env_file:
          - file.env   # 相对于docker-compose.yml文件的位置
    

这里我就直接放在 docker-compose.yml 的同级目录下面了

.env

# 挂载目录
MOUNT_DIR=/app/docker-compose
# 设置网络模式
NETWORKS_DRIVER=bridge
# 服务器IP
SERVER_IP=10.10.11.248

编写容器编排文件

docker-compose.yml

version: '3'
# 网络配置
networks:
  backend:
    driver: ${NETWORKS_DRIVER}
services:
  mysql:
    # 需要使用的镜像
    image: mysql:5.7
    # 容器名称
    container_name: mysql5.7
    # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped
    # 数据卷挂载路径设置,将本机目录映射到容器目录
    volumes:
      - $MOUNT_DIR/mysql/mysql5.7/conf:/etc/mysql
      - $MOUNT_DIR/mysql/mysql5.7/logs:/var/log/mysql
      - $MOUNT_DIR/mysql/mysql5.7/data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
      # 可执行初始化sql脚本的目录 
      # -- tips:`/var/lib/mysql`目录下无数据的时候才会执行(即第一次启动的时候才会执行)
      - $MOUNT_DIR/mysql/mysql5.7/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --lower_case_table_names=1
    entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
    # 设置环境变量,相当于 docker run 命令中的 -e
    environment:                       
      - MYSQL_ROOT_PASSWORD=Hallo@123
      - MYSQL_ROOT_HOST=%
      # 初始化的数据库名称
      - MYSQL_DATABASE=nacos_config
      - TZ=Asia/Shanghai
    # 宿主机和容器的端口映射关系,左边宿主机端口:右边容器端口
    ports:                         
      - "3306:3306"
    networks:
     - backend
     
  redis:
    image: redis:6.0.8
    container_name: redis6.0.8
    restart: unless-stopped
    # 启动redis服务并添加密码为:123456,并开启redis持久化配置
    command: redis-server --requirepass Hallo@123 --appendonly yes 
    environment:                        
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    volumes:                            
      - $MOUNT_DIR/redis/redis/data:/data
      - $MOUNT_DIR/redis/redis/conf/redis.conf:/etc/redis/redis.conf
    ports:                            
      - "6379:6379"
    networks:
     - backend
     
  nginx:
    image: nginx:1.21.1                 # 镜像`nginx:1.21.1`
    container_name: nginx1.21.1         # 容器名为'nginx'
    restart: unless-stopped
    volumes:                            # 数据卷挂载路径设置,将本机目录映射到容器目录
      - $MOUNT_DIR/nginx/nginx/conf:/etc/nginx
      - $MOUNT_DIR/nginx/nginx/html:/usr/share/nginx/html
      - $MOUNT_DIR/nginx/nginx/log:/var/log/nginx
    environment:                        # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    ports:                              # 映射端口
      - "80:80"
     
  minio:
    image: minio/minio:latest
    container_name: minio
    restart: unless-stopped
    volumes:
      - $MOUNT_DIR/minio/minio/data:/data
      - $MOUNT_DIR/minio/minio:/minio
      - $MOUNT_DIR/minio/minio/conf:/root/.minio
    environment:                                      # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MINIO_PROMETHEUS_AUTH_TYPE: "public"
      MINIO_ACCESS_KEY: "minio"                        # 登录账号
      MINIO_SECRET_KEY: "Hallo@123"                    # 登录密码
    command: server /data  --console-address ":9000" --address ":9001"
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
    ports:                              # 映射端口
      - "9000:9000"
      - "9001:9001"
      - "42330:42330"
    networks:
     - backend
     
  nacos:
    image: nacos/nacos-server:v2.1.2
    container_name: nacos-server
    restart: unless-stopped
    volumes:                                                     
      - $MOUNT_DIR/nacos/nacos/conf:/home/nacos/conf
      - $MOUNT_DIR/nacos/nacos/logs:/home/nacos/logs
    environment:                        # 设置环境变量,相当于docker run命令中的-e
      - PREFER_HOST_MODE=hostname
      - MODE=standalone                           # 单机模式启动
      - SPRING_DATASOURCE_PLATFORM=mysql          # 数据源平台,仅支持mysql或不保存empty
      # TODO 修改mysql连接信息
      - MYSQL_SERVICE_HOST=$SERVER_IP                       # 注:这里不能为`127.0.0.1`或`localhost`方式!!!
      - MYSQL_SERVICE_DB_NAME=nacos_config        # 所需sql脚本位于 `nacos/nacos-mysql.sql`
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=Hallo@123
      # TODO 修改JVM调优参数
      - JVM_XMS=128m   #-Xms default :2g
      - JVM_XMX=128m   #-Xmx default :2g
      - JVM_XMN=64m    #-Xmn default :1g
      - JVM_MS=32m     #-XX:MetaspaceSize default :128m
      - JVM_MMS=32m    #-XX:MaxMetaspaceSize default :320m
    ports:
      - "8848:8848"
    networks:
     - backend
    depends_on:
      - mysql

构建

如果记不住命令,这个命令也可以单独写作脚本运行

docker-compose -f docker-compose.yml up -d

Harbor

因为工作需要,有时候是需要完全断网环境,此时需要在内网环境中离线安装[Harbor]私有仓库。

系统环境描述

主机:X86_64架构,8G内存 (期待啥时候等有机会找一台国产化机器安装一个其他架构的版本)

操作系统:CentOS 7.9

作为私有仓库,建议硬盘尽量大一些,我使用的200GB,可以推荐使用1TB以上。

准备工作

找一台能上网的机器(需要能运行docker),下载下面三类文件

可以根据之前的教程进行 docker 和 docker-compose 的安装

Docker-ce的离线安装包

Docker离线安装包 地址查找符合自己主机系统和架构的docker-ce安装包版本,下载对应版本的docker安装文件。

Docker-compose的离线安装包

Docker-compose离线安装包 地址查找最新的docker-compose版本

下载最新版的 docker-compose 文件,下载后将 docker-compose-linux-x86_64 重命名为 docker-compose(后续上传到 linux 机器后还得赋予执行权限),具体参照上文

harbor的离线安装包

Harbor离线安装包 地址查找最新的harbor离线包版本

本文写作时版本为 2.6.3

将下载后的安装包上传到服务器的对应目录,比如 /opt/docker/install-packages

harbor需要的prepare镜像包

# 公网环境拉取对应的镜像
docker pull goharbor/prepare:v2.6.3

# 将此镜像打包
cd /opt/docker/docker-images
docker save -o goharbor_prepare_v2.6.3.tar goharbor/prepare:v2.6.3

harbor安装

以下操作在准备安装harbor的linux服务器上进行

使用Xshell连接到harbor主机上(本人比较懒,直接使用的root账户,这样很多操作比较方便,不必每次都输密码,如果是使用非root账户,或者ubuntu服务这种,需要在命令前加sudo)

cd /opt/docker/install-packages
tar -zxvf harbor-offline-installer-v2.6.3.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml # 编辑harbor配置文件进行安装

修改 harbor.yml,harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可! 所以 把https相关的已经注释掉(实话是,配置https实在有点麻烦)

在公司内部使用,如果用了公司的dns,哪就可以采用域名作为hostname,如果是其他ip,请自行更换,注意以下红框标注部分,并注意配置文件的用户名密码配置,默认用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改,这里我密码修改了。

# 此处更换成自己的ip
hostname: 10.10.11.248

# 这里配置访问的端口
http:
   port: 8888

# https related config
# 这里的 https 配置我注释了,内网一般都是信任的,https 配置起来比较麻烦
#https:
  # https port for harbor, default is 443
 # port: 443
  # The path of cert and key files for nginx
 # certificate: /your/certificate/path
 # private_key: /your/private/key/path

harbor_admin_password: Hallo@123

# 修改数据卷
data_volume: /app/docker-compose/harbor/harbor2.6.3/data


# 日志映射目录
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /app/docker-compose/harbor/harbor2.6.3/logs

将 goharbor_prepare_v2.6.3.tar 执行装载

cd /opt/docker/docker-images
docker load -i goharbor_prepare_v2.6.3.tar

执行安装命令,先执行预处理命令,会创建一些文件夹,初始化一些文件

./prepare

然后开始真正的安装过程,注意容器信息可能会冲突

比如你之前启动的容器和Harbor的容器重名,这是你需要将之前创建的容器改名

./install.sh

因为镜像已经在相关目录中,所以不需要下载。等待一会后,看到如下信息表示安装成功。

[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registryctl   ... done
Creating harbor-portal ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating registry      ... done
Creating harbor-core   ... done
Creating nginx             ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----

编译一个harbor启动服务文件,可将harbor作为服务启动,便于今后使用

vi /lib/systemd/system/harbor.service

文件内容如下:

这里docker-compose命令的地址和harbor编排文件的地址,自己根据实际情况指定

[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
 
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f  /opt/docker/install-packages/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /opt/docker/install-packages/harbor/docker-compose.yml down
 
[Install]
WantedBy=multi-user.target

启动harbor.service文件使之生效

systemctl enable harbor
systemctl start harbor
systemctl stop harbor

如果在安装后修改了harbor的配置文件,则需要重启才能生效

cd /opt/docker/install-packages/harbor
./prepare
docker-compose down -v
docekr-compose up -d

docker客户端访问

vi /etc/docker/daemon.json

输入以下内容,这里的ip和端口根据实际情况来

{
  "registry-mirrors": [
     "http://10.10.11.248:8888"
  ],
  "insecure-registries":[
      "127.0.0.1:8888",
      "10.10.11.248:8888"
  ],
  "graph":"/var/docker/lib"
}

修改了daemon.json文件后需要重载配置并重启docker服务和harbor服务,并登陆私有仓库

注意:如果重启了docker服务,最好同时再重新启动一下harbor服务,不然可能出现问题。

systemctl daemon-reload
systemctl restart docker
docker login 10.10.11.248:8888  # 私有仓库的ip或域名+端口

# 帐号密码是私有仓库的用户名和密码,管理员使用的是安装阶段在harbor.yml中设定的密码

# 登录成功后,则显示 Login Succeeded

xxl-job

编写编排文件:docker-compose-xxl-job.yml

# 参考文档: https://www.xuxueli.com/xxl-job
version: "3"
services:
  xxl-job-admin:
    image: xuxueli/xxl-job-admin:2.3.0
    container_name: xxl-job-admin
    environment:
      # TODO 根据自己的配置修改,配置项参考源码文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
      PARAMS: "--spring.datasource.url=jdbc:mysql://10.10.11.133:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
               --spring.datasource.username=root
               --spring.datasource.password=root
               --server.servlet.context-path=/xxl-job-admin
               --spring.mail.host=smtp.qq.com
               --spring.mail.port=25
               --spring.mail.username=xxx@qq.com
               --spring.mail.from=xxx@qq.com
               --spring.mail.password=xxx
               --xxl.job.accessToken="
    ports:
      - "9003:8080"

注意:其中的mail相关的信息,根据实际情况配置即可。

启动:

docker-compose -f docker-compose-xxl-job.yml -p xxl-job up -d

访问地址:http://ip地址:9003/xxl-job-admin

默认登录账号密码:admin/123456

启动成功以后在自己的项目中配置使用即可。

查看下载镜像的Dockerfile文件

docker history --format{{.CreatedBy}} --no-trunc=true 镜像id |sed "s/\/bin\/sh\ -c\ \#(nop)\ //g"|sed "s/\/bin\/sh\ -c/RUN/g"| tac
0

评论区