【centos】【docker】安装使用

安装docker

在线安装

  1. 检查内核版本大于3.10,uname -r
  2. 如果有的话,卸载旧版本
    卸载旧版本docker-engine
    yum remove docker \
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engine
    
    卸载docker-ce版本的方法
    yum remove docker-ce
    
  3. 安装所需其他,yum install -y yum-utils device-mapper-persistent-data lvm2
  4. 添加docker源
    官方
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum makecache fast
    
    阿里
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum makecache fast
    
  5. 安装docker,yum install -y docker-ce,(已包含docker-ce-clicontainerd.io
  6. 查看,docker -v
  7. 启动,systemctl start docker
  8. 查看,docker version
  9. 设置开机自启动,systemctl enable docker
  10. 验证,docker run hello-world
	[root@zt ~]# docker run hello-world
	Unable to find image 'hello-world:latest' locally
	latest: Pulling from library/hello-world
	b8dfde127a29: Pull complete 
	Digest: sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
	Status: Downloaded newer image for hello-world:latest
	
	Hello from Docker!
	This message shows that your installation appears to be working correctly.
	
	To generate this message, Docker took the following steps:
	 1. The Docker client contacted the Docker daemon.
	 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
	    (amd64)
	 3. The Docker daemon created a new container from that image which runs the
	    executable that produces the output you are currently reading.
	 4. The Docker daemon streamed that output to the Docker client, which sent it
	    to your terminal.
	
	To try something more ambitious, you can run an Ubuntu container with:
	 $ docker run -it ubuntu bash
	
	Share images, automate workflows, and more with a free Docker ID:
	 https://hub.docker.com/
	
	For more examples and ideas, visit:
	 https://docs.docker.com/get-started/

离线安装

  1. 官网下载安装包,docker-25.0.4.tgz

  2. 解压并移动至指定目录

    tar -zxvf docker-25.0.4.tgz
    cp -p docker/* /usr/bin/
    
  3. 创建用户组并授权给用户,便于非root用户可使用docker命令

    groupadd docker
    usermod -aG docker 【用户】
    groups
    
  4. 配置文件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
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    Delegate=yes
    KillMode=process
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    
  5. 移动配置文件至指定目录

    cp docker.service /etc/systemd/system/
    
  6. 启动docker服务

    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker
    systemctl status docker
    docker version
    

镜像仓库及制作

官方镜像仓库

docker hub

官网注册账号, https://cloud.docker.com

镜像操作

# 登录
docker login
# 搜索镜像
docker search hello-world
# 拉取
docker pull hello-world
# 标签
docker tag hello-world lorogy/test-hello-world:1.0.0
# 发布,{用户名}/{镜像名}:{版本号}
docker push lorogy/test-hello-world:1.0.0
# 退出登录
docker logout

镜像搜索结果包含名字、描述、收藏数、是否官方创建、是否自动创建等信息。
根据是否是官方提供,可将镜像资源分为两类。

  • 一种是基础镜像或根镜像。这些基础镜像由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。
  • 还有一种类型,比如 webdevops/php-nginx 镜像,它是由 Docker 的用户创建并维护 的,往往带有用户名称前缀。

自建镜像仓库

# 登录
docker login [镜像仓库地址] -u [用户名] -p [密码]
# 制作,注意最后有符号`.`
docker build -t [镜像名]:[版本号] .
# 标签
docker tag [镜像名]:[版本号] [镜像仓库地址]/[镜像名]:[版本号]
# 发布
docker push [镜像仓库地址]/[镜像名]:[版本号]
# 拉取
docker pull [镜像仓库地址]/[镜像名]:[版本号]
# 运行
docker run -idt --name [容器名称] --restart=always -p [宿主机端口号]:[容器端口号] [镜像仓库地址]/[镜像名]:[版本号]

阿里云镜像仓库

创建自己的仓库

  1. 注册或登录阿里云账号,访问阿里云容器镜像服务
    在这里插入图片描述

  2. 创建镜个人实例,通过密码登录。
    在这里插入图片描述

  3. 也可以创建自己的命名空间。
    在这里插入图片描述

  4. 还可使用镜像加速器来解决docker hub拉取镜像慢的问题,具体操作如图所示。
    在这里插入图片描述

镜像操作

# 登录
docker login --username=[阿里云用户名] registry.cn-beijing.aliyuncs.com
# 制作,注意最后有符号`.`
docker build -t [镜像名]:[版本号] .
# 标签,registry.cn-beijing.aliyuncs.com/lorogy/是自己建的阿里云镜像仓库
docker tag [镜像名]:[版本号] registry.cn-beijing.aliyuncs.com/lorogy/[镜像名]:[版本号]
# 发布
docker push registry.cn-beijing.aliyuncs.com/lorogy/[镜像名]:[版本号]
# 拉取
docker pull registry.cn-beijing.aliyuncs.com/lorogy/[镜像名]:[版本号]
# 运行
docker run -idt --name [容器名称] --restart=always -p [宿主机端口号]:[容器端口号] registry.cn-beijing.aliyuncs.com/lorogy/[镜像名]:[版本号]

Dockerfile配置

基于nginx的前端镜像

创建Dockerfile文件与项目下的src目录同级

  • 前端打包文件复制到相应目录
  • nginx配置文件复制到相应目录
  • 暴露至80端口
FROM nginx:1.20.2-alpine

COPY dist /usr/share/nginx/html

COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

基于openresty的前端镜像

openresty是nginx和lua的结合体,内置headers-more-nginx-module等nginx的第三方模块。
可用于无缝替代nginx,否则通过dockerfile给nginx增加第三方模块比较复杂。

  1. Dockerfile配置
    /usr/local/openresty/nginx/openresty存放nginx相关的默认路径。
    FROM openresty/openresty:1.19.9.1-4-alpine
    
    EXPOSE 80
    
    COPY dist /usr/local/openresty/nginx/html 
    COPY nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
    
    ENV TZ=Asia/Shanghai
    
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    ENTRYPOINT ["nginx"]
    CMD ["-g","daemon off;"]
    
  2. nginx.conf调整
    • 1、注意路径问题,由于nginx安装的默认路径为/etc/nginx/,一定注意将该地址修改为/usr/local/openresty/nginx/
    • 2、需要删除include /etc/nginx/conf.d/*.conf;,应该是相关路径也变了。
    • 3、注意修改iinclude /usr/local/openresty/nginx/conf/mime.types;相关内容,导致部署后加载css、js报错MIME 类型 text/plain
    worker_processes  4;
    events {
      worker_connections  1024;
    }
    http {
    
      sendfile            on;
      tcp_nopush          on;
      tcp_nodelay         on;
      keepalive_timeout   300;
      # types_hash_max_size 2048;
      # client_max_body_size 50m;
    
      include       /usr/local/openresty/nginx/conf/mime.types;
      default_type  application/octet-stream;
    
      gzip on;
      gzip_buffers 32 4K;
      gzip_comp_level 6;
      gzip_min_length 100;
      gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
      gzip_vary on;
      # gzip_disable "MSIE [1-6]\.";
    
      server {
        listen       80;
        server_name  _;
    
        #安全策略
        more_clear_headers 'Server'; #headers-more-nginx-module
        add_header X-Content-Type-Options 'nosniff';
        add_header X-Frame-Options 'DENY';
        add_header X-Xss-Protection '1;mode=block';
    
        location / {
          root   /usr/local/openresty/nginx/html ;
          try_files $uri /index.html;
        }
    
        location /api{
            rewrite ^.+api/?(.*)$ /nacos-server/$1 break;
            proxy_pass http://gateway:18890; 
        }
    
        error_page 404 /404.html;
        location = /404.html {
        }
    
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
      }
    }
    
  3. 制作镜像

基于openjdk:8-alpine的后端镜像

Dockerfile配置

# 基础镜像
FROM openjdk:8-alpine
#VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
VOLUME /tmp
# 复制打包完成后的jar文件
ADD target/*.jar app.jar
RUN sh -c 'touch app.jar'
#映射端口
EXPOSE 18892
# 启动容器时执行
ENTRYPOINT [ "sh", "-c", "java -XX:+PrintFlagsFinal -XX:+PrintGCDetails $JAVA_OPTS -Duser.timezone=GMT+08 -Djava.security.egd=file:/dev/./urandom -jar app.jar"]

容器安装

jenkins

docker run -u root --name jenkins \
	--restart always \
	-d  \
	-p 8080:8080 \
	-p 50000:50000 \
	-v /data/jenkins:/var/jenkins_home \
	-v /var/run/docker.sock:/var/run/docker.sock \
	jenkinsci/blueocean:1.25.2-bcc31d32159f

portainer

docker run -d -p 9000:9000 --name portainer \
	--restart=always \
	-v /var/run/docker.sock:/var/run/docker.sock \
	-v /home/jevon/portainer:/data \
	portainer/portainer-ce:2.11.0-alpine

nacos

创建数据库

CREATE database if NOT EXISTS `nacos_config` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `nacos_config`;

/******************************************/
/*   数据库全名 = 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(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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,
  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(255) 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 CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' 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 CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' 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 CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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,
    UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(190) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

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

拉取镜像并启动nacos服务

docker pull nacos/nacos-server:1.3.1

mkdir -p /docker/data/nacos/data
mkdir -p /docker/data/nacos/logs

docker run -dit \
--name nacos \
-p 8848:8848 \
--privileged=true \
--restart=always \
-v /docker/data/nacos/logs:/home/nacos/logs \
-v /docker/data/nacos/data:/home/nacos/data \
-e MODE=standalone \
-e PREFER_HOST_MODE=ip \
-e TZ="Asia/Shanghai" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=[数据库ip地址] \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=[数据库账号]\
-e MYSQL_SERVICE_PASSWORD=[数据库密码] \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
nacos/nacos-server:1.3.1
  • nacos访问:http://ip:8848/nacos,默认账密都是nacos
  • 修改密码:数据库user表的password字段,密码需要加密,可借助在线生成密码工具

问题

启动后,无法访问

查看日志cat /docker/data/nacos/logs/start.out,可能的原因有

  • 数据库配置,地址、账密等
  • 防火墙端口是否开启
  • 阿里云安全策略端口是否开启
  • 访问地址是否输入正确,例如85输入成58之类的
访问地址控制台大部分静态资源(css、js)等报错404

日志正常,但就是无法访问。使用别的浏览器访问成功,清除掉现用浏览器的缓存即可。大概率是之前使用nacos的缓存影响,使得服务端docker重新安装的nacos无法正常在此浏览器访问。

日志报错mysql连接错误

原因是该版本nacos支持的是mysql57,不支持mysql80,可替换为最新版本nacos,并增加-e MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8

sentinel

拉取镜像并启动sentinel服务

docker pull bladex/sentinel-dashboard

docker run -dit \
--name sentinel-nacos \
-p 8858:8858 \
--restart=always \
-e NACOS_SERVER_ADDR=[ip]:8848 \
-e NACOS_USERNAME=nacos \
-e NACOS_PASSWORD=nacos \
-e NACOS_NAMESPACE=public \
-e NACOS_GROUP_ID=SENTINEL_GROUP \
bladex/sentinel-dashboard

规则持久化至nacos

springboot项目需增加的配置

  • pom.xml

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
    </dependency>
    
  • application配置

    # 这里datasource后的consumer是数据源名称,可以随便写,推荐使用服务名
    spring.cloud.sentinel.datasource.consumer.nacos.server-addr=localhost:8848
    spring.cloud.sentinel.datasource.consumer.nacos.dataId=${spring.application.name}-sentinel-rules
    spring.cloud.sentinel.datasource.consumer.nacos.groupId=SENTINEL_GROUP
    spring.cloud.sentinel.datasource.consumer.nacos.data-type=json
    # 规则类型,取值见:org.springframework.cloud.alibaba.sentinel.datasource.RuleType
    spring.cloud.sentinel.datasource.consumer.nacos.rule_type=flow
    
  • nacos中创建流控规则
    在这里插入图片描述

    [
        {
            "resource": "/hello",
            "limitApp": "default",
            "grade": 1,
            "count": 2,
            "strategy": 0,
            "controlBehavior": 0,
            "clusterMode": false
        }
    ]
    

    resource:资源名称
    limitApp:限流应用,就是用默认就可以
    grade:阈值类型,0表示线程数,1表示qps
    count:单机阈值
    strategy:流控模式,0-直接,1-关联, 2-链路
    controlBehavior:流控效果。0-快速失败,1-warm up 2-排队等待
    clusterMode:是否集群

问题

服务器端Sentinel无法监控本机服务

问题描述
控制台在外网服务器,客户端在本机调试,控制台有实例,但是没有监控信息
控制台日志报错

2021-06-02 17:04:56.487 ERROR 7 --- [pool-3-thread-1] c.a.c.s.dashboard.metric.MetricFetcher   : Failed to fetch metric from <http://192.168.43.34:8091/metric?startTime=1622624561000&endTime=1622624567000&refetch=false> (ConnectionException: Connection timed out)

原因分析
不仅需要客户端能访问控制台,同时sentinel-dashboard还需要能访问到sentinel客户端,所以在同一台机器上是能够正常访问的,但是由于本机ip不是公网ip,在未进行设置的情况下服务器端是无法访问到的,所以会报错。
解决方法
尽量在同一台服务器吧,或者客户端在本地开发时先不调试该功能了,部署后再调试

skywalking

详细介绍及普通安装方式可见【skywalking】【elasticsearch】下载安装配置

  • elasticsearch:用于存储
  • skywalking-oap-server:skywalking服务
  • skywalking-ui:skywalking的UI展示界面
  • agent:探针

elasticsearch安装

docker pull elasticsearch:7.5.1

docker run -idt --name=es7 \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
elasticsearch:7.5.1

验证是否成功:http://[ip]:9200

oap安装

docker pull apache/skywalking-oap-server:6.6.0-es7

docker run -idt --name skywalking-oap \
--restart=always \
-e TZ=Asia/Shanghai \
-p 12800:12800 \
-p 11800:11800 \docker
--link es7:es7 \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \
apache/skywalking-oap-server:6.6.0-es7

ui安装

docker pull apache/skywalking-ui:6.6.0

docker run -idt --name skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8080:8080 \
--link skywalking-oap:skywalking-oap \
-e SW_OAP_ADDRESS=skywalking-oap:12800 \
apache/skywalking-ui:6.6.0

访问:http://[ip]:8080

客户端(java项目)无入侵使用

  1. 下载源agent(探针)并解压:tar -zxvf apache-skywalking-apm-6.6.0.tar.gz
    https://archive.apache.org/dist/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz

  2. 制作程序镜像时,需修改Dockerfile的jar包运行指令

    java -javaagent:/docker/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=app -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar app.jar
    
    • -javaagent 指定agent包位置。apache-skywalking-apm-6.6.0.tar.gz解压至的目录了
    • -Dskywalking.agent.service_name 指定服务名
    • -Dskywalking.collector.backend_service 指定skywalking oap地址
    • -jar 指定jar包的路径
  3. docker run启动程序时,注意添加目录映射

    -v /docker/apache-skywalking-apm-bin/agent/:/docker/apache-skywalking-apm-bin/agent/ 
    

其他

修改docker默认存放目录

  1. 查看默认目录,一般为/var/lib/dockerdocker info|grep Dir
  2. 移动默认目录下所有文件至指定目录:cp -r /var/lib/docker/* /home/lj/mydocker
  3. 修改或新建/etc/docker/目录下的daemon.json文件,配置docker默认地址
    {
    	  "data-root":"/home/lj/mydocker",
    	  "registry-mirrors":["https://ooe7wn09.mirror.aliyuncs.com"]
    }
    
  4. 重启并验证
    	systemctl daemon-reload
    	systemctl restart docker
    	docker info|grep “Docker Root Dir”
    

提供外部访问接口

  1. vi /usr/lib/systemd/system/docker.service
  2. 增加 -H tcp://0.0.0.0:2375 使其中一行变为ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
  3. 重新加载systemctl daemon-reload
  4. 重启systemctl restart docker
  5. 注意确认防火墙firewall2375端口已开

内存监控

docker 指令

ctop工具

  1. 下载安装
    wget https://github.com/bcicen/ctop/releases/download/v0.4.1/ctop-0.4.1-linux-amd64 -O ctop
    mv ctop /usr/local/bin/
    chmod +x /usr/local/bin/ctop
    
  2. 使用指令ctop
    请添加图片描述

问题汇总

通过vmware安装时报错IPv4 forwarding is disabled. Networking will not work

原因:没有开启转发,网桥配置完后,需要开启转发,不然容器启动后,就会没有网络

  1. vi /etc/sysctl.conf
  2. 添加代码:net.ipv4.ip_forward=1
  3. 重启network服务:systemctl restart network && systemctl restart docker
  4. 查看是否修改成功:sysctl net.ipv4.ip_forward
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值