摘要

本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程。Docker命令不熟悉的同学可以先看下这篇开发者必备Docker命令

Docker Registry

Docker Registry 2.0搭建

docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
复制代码

如果遇到镜像下载不下来的情况,需要修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值,然后重启docker服务:

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
复制代码

Docker开启远程API

用vim编辑器修改docker.service文件

vi /usr/lib/systemd/system/docker.service
复制代码

需要修改的部分:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
复制代码

修改后的部分:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
复制代码

让Docker支持http上传镜像

echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json
复制代码

重新启动Docker服务

systemctl stop docker
systemctl start docker
复制代码

开启防火墙的Docker构建端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
复制代码

使用Maven构建Docker镜像

该代码是在mall-tiny-02的基础上修改的。

在应用的pom.xml文件中添加docker-maven-plugin的依赖

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.1.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://192.168.3.101:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
        </entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
复制代码

相关配置说明:

  • executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
  • imageName:用于指定镜像名称,mall-tiny是仓库名称,${project.artifactId}为镜像名称,${project.version}为仓库名称;
  • dockerHost:打包后上传到的docker服务器地址;
  • baseImage:该应用所依赖的基础镜像,此处为java;
  • entryPoint:docker容器启动时执行的命令;
  • resources.resource.targetPath:将打包后的资源文件复制到该目录;
  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
  • resources.resource.include:需要复制的文件,打包好的应用jar包。

修改application.yml,将localhost改为db

可以把docker中的容器看作独立的虚拟机,mall-tiny-docker访问localhost自然会访问不到mysql,docker容器之间可以通过指定好的服务名称db进行访问,至于db这个名称可以在运行mall-tiny-docker容器的时候指定。

spring:
  datasource:
    url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
复制代码

使用IDEA打包项目并构建镜像

注意:依赖的基础镜像需要先行下载,否则会出现构建镜像超时的情况,比如我本地并没有java8的镜像,就需要先把镜像pull下来,再用maven插件进行构建。

  • 执行maven的package命令:
    展示图片
  • 构建成功:
    展示图片
  • 镜像仓库已有该镜像:
    展示图片

运行mall-tiny-docker项目

启动mysql服务

  • 使用docker命令启动:
  docker run -p 3306:3306 --name mysql \
  -v /mydata/mysql/log:/var/log/mysql \
  -v /mydata/mysql/data:/var/lib/mysql \
  -v /mydata/mysql/conf:/etc/mysql \
  -e MYSQL_ROOT_PASSWORD=root  \
  -d mysql:5.7
复制代码
  • 进入运行mysql的docker容器:
docker exec -it mysql /bin/bash
复制代码
  • 使用mysql命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
复制代码

 

展示图片

 

  • 修改root帐号的权限,使得任何ip都能访问:
grant all privileges on *.* to 'root'@'%'
复制代码

 

展示图片

 

  • 创建mall数据库:
create database mall character set utf8
复制代码
  • mall.sql文件拷贝到mysql容器的/目录下:
docker cp /mydata/mall.sql mysql:/
复制代码
  • 将sql文件导入到数据库:
use mall;
source /mall.sql;
复制代码

 

展示图片

 

启动mall-tiny-docker应用服务

  • 使用docker命令启动(--link表示应用可以用db这个域名访问mysql服务):
  docker run -p 8080:8080 --name mall-tiny-docker \
  --link mysql:db \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/app/mall-tiny-docker/logs:/var/logs \
  -d mall-tiny/mall-tiny-docker:0.0.1-SNAPSHOT
复制代码

 

展示图片

 

  • 开启8080端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
复制代码

项目源码地址

github.com/macrozheng/…

 

...
浏览 : 2322 阅读全文

摘要

上次写过一篇使用Maven插件为SpringBoot应用构建Docker镜像 ,讲述了通过docker-maven-plugin来构建docker镜像的方式,此种方式需要依赖自建的Registry镜像仓库。本文将讲述另一种方式,使用Dockerfile来构建docker镜像,此种方式不需要依赖自建的镜像仓库,只需要应用的jar包和一个Dockerfile文件即可。

Dockerfile常用指令

ADD

用于复制文件,格式:

ADD <src> <dest>
复制代码

示例:

# 将当前目录下的mall-tiny-docker-file.jar包复制到docker容器的/目录下
ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar
复制代码

ENTRYPOINT

指定docker容器启动时执行的命令,格式:

ENTRYPOINT ["executable", "param1","param2"...]
复制代码

示例:

# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
复制代码

ENV

用于设置环境变量,格式:

ENV <key> <value>
复制代码

示例:

# mysql运行时设置root密码
ENV MYSQL_ROOT_PASSWORD root
复制代码

EXPOSE

声明需要暴露的端口(只声明不会打开端口),格式:

EXPOSE <port1> <port2> ...
复制代码

示例:

# 声明服务运行在8080端口
EXPOSE 8080
复制代码

FROM

指定所需依赖的基础镜像,格式:

FROM <image>:<tag>
复制代码

示例:

# 该镜像需要依赖的java8的镜像
FROM java:8
复制代码

MAINTAINER

指定维护者的名字,格式:

MAINTAINER <name>
复制代码

示例:

MAINTAINER macrozheng
复制代码

RUN

在容器构建过程中执行的命令,我们可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等,格式:

RUN <command>
RUN ["executable", "param1","param2"...]
复制代码

示例:

# 在容器构建过程中需要在/目录下创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
复制代码

使用Dockerfile构建SpringBoot应用镜像

编写Dockerfile文件

# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
# 指定维护者的名字
MAINTAINER macrozheng
复制代码

使用maven打包应用

在IDEA中双击package命令进行打包:

展示图片
打包成功后展示:

 

[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ mall-tiny-docker-file ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.749 s
[INFO] Finished at: 2019-06-16T14:11:07+08:00
[INFO] Final Memory: 43M/306M
[INFO] ------------------------------------------------------------------------
复制代码

将应用jar包及Dockerfile文件上传到linux服务器:

展示图片
展示图片

 

在Linux上构建docker镜像

在Dockerfile所在目录执行以下命令:

# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile
docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .
复制代码

输出如下信息:

Sending build context to Docker daemon  36.37MB
Step 1/5 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/5 : ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar
 ---> c920c9e9d045
Step 3/5 : RUN bash -c 'touch /mall-tiny-docker-file.jar'
 ---> Running in 55506f517f19
Removing intermediate container 55506f517f19
 ---> 0727eded66dc
Step 4/5 : EXPOSE 8080
 ---> Running in d67a5f50aa7d
Removing intermediate container d67a5f50aa7d
 ---> 1b8b4506eb2d
Step 5/5 : ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
 ---> Running in 0c5bf61a0032
Removing intermediate container 0c5bf61a0032
 ---> c3614dad21b7
Successfully built c3614dad21b7
Successfully tagged mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT
复制代码

查看docker镜像:

展示图片

 

运行mysql服务并设置

1.使用docker命令启动:

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
复制代码

2.进入运行mysql的docker容器:

docker exec -it mysql /bin/bash
复制代码

3.使用mysql命令打开客户端:

mysql -uroot -proot --default-character-set=utf8
复制代码

4.修改root帐号的权限,使得任何ip都能访问:

grant all privileges on *.* to 'root'@'%'
复制代码

5.创建mall数据库:

create database mall character set utf8
复制代码

6.将mall.sql文件拷贝到mysql容器的/目录下:

docker cp /mydata/mall.sql mysql:/
复制代码

7.将sql文件导入到数据库:

use mall;
source /mall.sql;
复制代码

运行mall-tiny-docker-file应用

docker run -p 8080:8080 --name mall-tiny-docker-file \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-docker-file/logs:/var/logs \
-d mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT
复制代码

访问接口文档地址http://192.168.3.101:8080/swagger-ui.html:

展示图片

 

...
浏览 : 1514 阅读全文

使用Docker Compose部署SpringBoot应用

Thu, 18 Jun 2020 05:21:11 GMT

摘要

Docker Compose是一个用于定义和运行多个docker容器应用的工具。使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了。

安装

下载Docker Compose:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
复制代码

修改该文件的权限为可执行:

chmod +x /usr/local/bin/docker-compose
复制代码

查看是否已经安装成功:

docker-compose --version
复制代码

 

展示图片

 

使用Docker Compose的步骤

  • 使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用;
  • 使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署;
  • 使用docker-compose up命令将所有应用服务一次性部署起来。

docker-compose.yml常用命令

image

指定运行的镜像名称

# 运行的是mysql5.7的镜像
image: mysql:5.7
复制代码

container_name

配置容器名称

# 容器名称为mysql
container_name: mysql
复制代码

ports

指定宿主机和容器的端口映射(HOST:CONTAINER)

# 将宿主机的3306端口映射到容器的3306端口
ports:
  - 3306:3306
复制代码

volumes

将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)

# 将外部文件挂载到myql容器中
volumes:
  - /mydata/mysql/log:/var/log/mysql
  - /mydata/mysql/data:/var/lib/mysql
  - /mydata/mysql/conf:/etc/mysql
复制代码

environment

配置环境变量

# 设置mysqlroot帐号密码的环境变量
environment:
  - MYSQL_ROOT_PASSWORD=root
复制代码

links

连接其他容器的服务(SERVICE:ALIAS)

# 可以以database为域名访问服务名称为db的容器
links:
  - db:database
复制代码

Docker Compose常用命令

构建、创建、启动相关容器:

# -d表示在后台运行
docker-compose up -d
复制代码

停止所有相关容器:

docker-compose stop
复制代码

列出所有容器信息:

docker-compose ps
复制代码

使用Docker Compose 部署应用

编写docker-compose.yml文件

Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问,比如在mall-tiny-docker-compose服务中可以通过jdbc:mysql://db:3306这个地址来访问db这个mysql服务。

version: '3'
services:
  # 指定服务名称
  db:
    # 指定服务使用的镜像
    image: mysql:5.7
    # 指定容器名称
    container_name: mysql
    # 指定服务运行的端口
    ports:
      - 3306:3306
    # 指定容器中需要挂载的文件
    volumes:
      - /mydata/mysql/log:/var/log/mysql
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql
    # 指定容器的环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=root
  # 指定服务名称
  mall-tiny-docker-compose:
    # 指定服务使用的镜像
    image: mall-tiny/mall-tiny-docker-compose:0.0.1-SNAPSHOT
    # 指定容器名称
    container_name: mall-tiny-docker-compose
    # 指定服务运行的端口
    ports:
      - 8080:8080
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /mydata/app/mall-tiny-docker-compose/logs:/var/logs
复制代码

注意:如果遇到mall-tiny-docker-compose服务无法连接到mysql,需要在mysql中建立mall数据库,同时导入mall.sql脚本。具体参考使用Dockerfile为SpringBoot应用构建Docker镜像中的运行mysql服务并设置部分。

使用maven插件构建mall-tiny-docker-compose镜像

 

展示图片

 

注意:构建有问题的可以参考使用Maven插件为SpringBoot应用构建Docker镜像

运行Docker Compose命令启动所有服务

先将docker-compose.yml上传至Linux服务器,再在当前目录下运行如下命令:

docker-compose up -d
复制代码

 

展示图片

 

访问接口文档地址http://192.168.3.101:8080/swagger-ui.html:

 

展示图片

 

 

...
浏览 : 1588 阅读全文

10分钟搭建自己的Git仓库

Thu, 18 Jun 2020 05:17:52 GMT

简介

GitLab是一款使用MIT许可证的基于网络的Git仓库管理工具,我们可以使用它来搭建自己的Git仓库,本文将介绍如何使用Gitlab在Linux下快速搭建Git仓库。

Gitlab服务端搭建

在Linux(CenterOS7.6)下我们会以Docker的方式来安装Gitlab,对Docker不了解的朋友可以参考:开发者必备Docker命令

下载Gitlab的Docker镜像

docker pull gitlab/gitlab-ce
复制代码

运行如下命令来启动Gitlab

需要注意的是我们的Gitlab的http服务运行在宿主机的1080端口上,这里我们将Gitlab的配置,日志以及数据目录映射到了宿主机的指定文件夹下,防止我们在重新创建容器后丢失数据。

docker run --detach \
  --publish 10443:443 --publish 1080:80 --publish 1022:22 \
  --name gitlab \
  --restart always \
  --volume /mydata/gitlab/config:/etc/gitlab \
  --volume /mydata/gitlab/logs:/var/log/gitlab \
  --volume /mydata/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
复制代码

开启防火墙的指定端口

由于Gitlab运行在1080端口上,所以我们需要开放该端口,注意千万不要直接关闭防火墙,否则Gitlab会无法启动。

# 开启1080端口
firewall-cmd --zone=public --add-port=1080/tcp --permanent 
# 重启防火墙才能生效
systemctl restart firewalld
# 查看已经开放的端口
firewall-cmd --list-ports
复制代码

访问Gitlab

  • 访问地址:http://192.168.3.101:1080/
  • 由于Gitlab启动比较慢,需要耐心等待10分钟左右,如果Gitlab没有启动完成访问,会出现如下错误。

 

 

  • 可以通过docker命令动态查看容器启动日志来知道gitlab是否已经启动完成。
docker logs gitlab -f
复制代码

 

 

Gitlab的使用

Gitlab启动完成后第一次访问,会让你重置root帐号的密码

 

 

重置完成后输入帐号密码登录

 

 

选择创建项目、创建组织、创建帐号

 

 

创建组织

首先我们需要创建一个组织,然后在这个组织下分别创建用户和项目,这样同组织的用户就可以使用该组织下的项目了。

 

创建用户并修改密码

找到添加用户的按钮

 

 

输入用户名密码添加用户

 

 

在编辑界面中修改用户密码

 

 

 

 

创建项目并添加README文件

 

 

 

 

将用户分配到组织

 

 

Git客户端安装及使用

下载Git客户端并安装

 

 

clone项目

  • 找到项目clone的地址:

 

 

  • 打开Git命令行工具:

 

 

  • 执行以下命令clone项目到本地:
git clone http://192.168.3.101:1080/macrozheng/hello.git

复制代码

提交代码

进入项目目录,修改一下README.md并提交:

# 进入项目工程目录
cd hello/
# 将当前修改的文件添加到暂存区
git add .
# 提交代码
git commit -m "first commit"
复制代码

推送到远程仓库

git push
复制代码

 

 

拉取远程仓库代码

  • 在Gitlab上修改readme中的文件内容:

 

 

  • 拉取代码:
git pull
复制代码

本地创建并提交分支

# 切换并从当前分支创建一个dev分支
git checkout -b dev
# 将新创建的dev分支推送到远程仓库
git push origin dev
复制代码

 

 

其他常用命令

# 切换到dev分支
git checkout dev
# 查看本地仓库文件状况
git status
# 查看本地所有分支
git branch
# 查看提交记录
git log

作者:MacroZheng
链接:https://juejin.im/post/5d63d600e51d453c135c5af3
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

...
浏览 : 1752 阅读全文

摘要

为了提高Redis的存储容量和响应速度,有时候我们需要搭建Redis集群。本文主要讲述Redis集群环境的搭建步骤以及如何在SpringBoot中整合使用Redis集群。

Redis集群搭建

这里我们使用最方便的搭建方式,使用Docker Compose来搭建,对Docker Compose不了解的朋友可以参考下《使用Docker Compose部署SpringBoot应用》。我们将搭建一个6节点的Redis集群,包括3个主节点和3个从节点。

  • 在搭建Redis集群之前,我们需要修改下Redis的配置文件redis.conf,该文件的下载地址:github.com/antirez/red…

  • 需要修改的属性如下,主要是修改了一些集群配置和运行端口,端口号需要按需修改为6391~6396:

# 开启集群功能
cluster-enabled yes
# 设置运行端口
port 6391
# 设置节点超时时间,单位毫秒
cluster-node-timeout 15000
# 集群内部配置文件
cluster-config-file "nodes-6391.conf"
复制代码
  • 然后我们需要编写docker-compose.yml文件用于编排6个Redis容器,具体属性的作用可以参考下面的注释;
version: "3"
services:
  redis-master1:
    image: redis:5.0 # 基础镜像
    container_name: redis-master1 # 容器名称
    working_dir: /config # 切换工作目录
    environment: # 环境变量
      - PORT=6391 # 会使用config/nodes-${PORT}.conf这个配置文件
    ports: # 映射端口,对外提供服务
      - 6391:6391 # redis的服务端口
      - 16391:16391 # redis集群监控端口
    stdin_open: true # 标准输入打开
    tty: true # 后台运行不退出
    network_mode: host # 使用host模式
    privileged: true # 拥有容器内命令执行的权限
    volumes:
      - /mydata/redis-cluster/config:/config #配置文件目录映射到宿主机
    entrypoint: # 设置服务默认的启动程序
      - /bin/bash
      - redis.sh
  redis-master2:
    image: redis:5.0
    working_dir: /config
    container_name: redis-master2
    environment:
      - PORT=6392
    ports:
      - 6392:6392
      - 16392:16392
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-master3:
    image: redis:5.0
    container_name: redis-master3
    working_dir: /config
    environment:
      - PORT=6393
    ports:
      - 6393:6393
      - 16393:16393
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave1:
    image: redis:5.0
    container_name: redis-slave1
    working_dir: /config
    environment:
      - PORT=6394
    ports:
      - 6394:6394
      - 16394:16394
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave2:
    image: redis:5.0
    working_dir: /config
    container_name: redis-slave2
    environment:
      - PORT=6395
    ports:
      - 6395:6395
      - 16395:16395
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave3:
    image: redis:5.0
    container_name: redis-slave3
    working_dir: /config
    environment:
      - PORT=6396
    ports:
      - 6396:6396
      - 16396:16396
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
复制代码
  • 从docker-compose.yml文件中我们可以看到,我们的Redis容器分别运行在6391~6396这6个端口之上, 将容器中的/config配置目录映射到了宿主机的/mydata/redis-cluster/config目录,同时还以redis.sh脚本作为该容器的启动脚本;

  • redis.sh脚本的作用是根据environment环境变量中的PORT属性,以指定配置文件来启动Redis容器;

redis-server  /config/nodes-${PORT}.conf
复制代码
  • 接下来我们需要把Redis的配置文件和redis.sh上传到Linux服务器的/mydata/redis-cluster/config目录下;

 

 

  • 接下来上传我们的docker-compose.yml文件到Linux服务器,并使用docker-compose命令来启动所有容器;
docker-compose up -d
复制代码
  • 启动过程中会输出如下信息;

 

 

  • 此时进入其中一个Redis容器之中,初始化Redis集群;
# 进入Redis容器
docker exec -it redis-master1 /bin/bash
# 初始化Redis集群命令
redis-cli --cluster create \
192.168.6.139:6391 192.168.6.139:6392 192.168.6.139:6393 \
192.168.6.139:6394 192.168.6.139:6395 192.168.6.139:6396 \
--cluster-replicas 1
复制代码
  • 集群创建过程中会让你确认配置,输入yes确认即可;

 

 

  • Redis集群创建成功后会输出如下信息;

 

 

  • 创建成功后我们可以使用redis-cli命令连接到其中一个Redis服务;
# 单机模式启动
redis-cli -h 127.0.0.1 -p 6391
# 集群模式启动
redis-cli -c -h 127.0.0.1 -p 6391
复制代码
  • 之后通过cluster nodes命令可以查看节点信息,发现符合原来3主3从的预期。

 

 

SpringBoot中使用Redis集群

我们在《Spring Data Redis 最佳实践!》中讲到了在SpringBoot中如何使用Redis,用的是单节点的Redis服务,这次我们讲下如何使用Redis集群服务。

  • 我们在原来代码的基础上进行改造,修改application.yml配置文件,添加Redis集群配置;
spring:
  redis:
#    host: 192.168.6.139 # Redis服务器地址
#    database: 0 # Redis数据库索引(默认为0)
#    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
    timeout: 3000ms # 连接超时时间
    lettuce:
      pool:
        max-active: 8 # 连接池最大连接数
        max-idle: 8 # 连接池最大空闲连接数
        min-idle: 0 # 连接池最小空闲连接数
        max-wait: -1ms # 连接池最大阻塞等待时间,负值表示没有限制
    cluster:
      nodes:
        - 192.168.6.139:6391
        - 192.168.6.139:6392
        - 192.168.6.139:6393
        - 192.168.6.139:6394
        - 192.168.6.139:6395
        - 192.168.6.139:6396
复制代码
  • 此时我们再次调用获取品牌详情的接口,就会把品牌信息缓存到Redis集群中去了;

  • 由于Redis容器redis-master1redis-slave2互为主从,所以里面都缓存了相同的品牌详情信息。

 


作者:MacroZheng
链接:https://juejin.im/post/5e81fd1ff265da47e84e5e2c
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

...
浏览 : 1768 阅读全文

开发者必备Docker命令

Sat, 20 Jun 2020 07:17:12 GMT

摘要

本文主要讲解Docker环境的安装以及Docker常用命令的使用,掌握这些对Docker环境下应用的部署具有很大帮助。

Docker 简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows机器上。使用Docker可以更方便低打包、测试以及部署应用程序。

Docker 环境安装

  • 安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
  • 为yum源添加docker仓库位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制代码
  • 安装docker:
yum install docker-ce
复制代码
  • 启动docker:
systemctl start docker
复制代码

Docker 镜像常用命令

搜索镜像

docker search java
复制代码

 

展示图片

 

下载镜像

docker pull java:8
复制代码

如何查找镜像支持的版本

由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过docker hub来搜索支持的版本。

  • 进入docker hub的官网,地址:hub.docker.com

  • 然后搜索需要的镜像:

    展示图片

     

  • 查看镜像支持的版本:

    展示图片

     

  • 进行镜像的下载操作:

docker pull nginx:1.17.0
复制代码

列出镜像

docker images
复制代码

 

展示图片

 

删除镜像

  • 指定名称删除镜像
docker rmi java:8
复制代码
  • 指定名称删除镜像(强制)
docker rmi -f java:8
复制代码
  • 强制删除所有镜像
docker rmi -f $(docker images)
复制代码

Docker 容器常用命令

新建并启动容器

docker run -p 80:80 --name nginx -d nginx:1.17.0
复制代码
  • -d选项:表示后台运行
  • --name选项:指定运行后容器的名字为nginx,之后可以通过名字来操作容器
  • -p选项:指定端口映射,格式为:hostPort:containerPort

列出容器

  • 列出运行中的容器:
docker ps
复制代码

 

展示图片

 

  • 列出所有容器
docker ps -a
复制代码

 

展示图片

 

停止容器

# $ContainerName$ContainerId可以用docker ps命令查询出来
docker stop $ContainerName(或者$ContainerId)
复制代码

比如:

docker stop nginx
#或者
docker stop c5f5d5125587
复制代码

强制停止容器

docker kill $ContainerName(或者$ContainerId)
复制代码

启动已停止的容器

docker start $ContainerName(或者$ContainerId)
复制代码

进入容器

  • 先查询出容器的pid:
docker inspect --format "{{.State.Pid}}" $ContainerName(或者$ContainerId)
复制代码
  • 根据容器的pid进入容器:
nsenter --target "$pid" --mount --uts --ipc --net --pid
复制代码

 

展示图片

 

删除容器

  • 删除指定容器:
docker rm $ContainerName(或者$ContainerId)
复制代码
  • 强制删除所有容器;
docker rm -f $(docker ps -a -q)
复制代码

查看容器的日志

docker logs $ContainerName(或者$ContainerId)
复制代码

 

展示图片

 

查看容器的IP地址

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName(或者$ContainerId)
复制代码

 

展示图片

 

同步宿主机时间到容器

docker cp /etc/localtime $ContainerName(或者$ContainerId):/etc/
复制代码

在宿主机查看docker使用cpu、内存、网络、io情况

  • 查看指定容器情况:
docker stats $ContainerName(或者$ContainerId)
复制代码

 

展示图片

 

  • 查看所有容器情况:
docker stats -a
复制代码

 

展示图片

 

进入Docker容器内部的bash

docker exec -it $ContainerName /bin/bash
复制代码

 

展示图片

 

修改Docker镜像的存放位置

  • 查看Docker镜像的存放位置:
docker info | grep "Docker Root Dir"
复制代码

 

展示图片

 

  • 关闭Docker服务:
systemctl stop docker
复制代码
  • 移动目录到目标路径:
mv /var/lib/docker /mydata/docker
复制代码
  • 建立软连接:
ln -s /mydata/docker /var/lib/docker
复制代码

 

展示图片

 

 

展示图片

 

...
浏览 : 1668 阅读全文