暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux内网环境下docker部署elasticsearch

Java技术藏金阁 2021-11-09
970

思路:在有网的环境中安装好docker和elasticsearch镜像。


一、离线安装docker

  1. 下载 Docker  

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

  2. 解压压缩文件

tar -zxvf docker-19.03.8.tgz
  1. 将解压好的 Docker 文件复制到 /usr/bin 目录下

cp docker/* /usr/bin/
  1. 在 /etc/systemd/system/ 目录下新增 docker.service 文件,将docker注册为服务,内容如下:

    [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

           此处的--insecure-registry=127.0.0.1(此处改成你私服ip)设置是针对有搭建了自己私服Harbor时允许docker进行不安全的访问,否则访问将会被拒绝。

  2. docker容器配置固定IP

[root@insure updev]# docker network create --subnet=172.18.0.0/16 mynetwork
cf556844631a91a2a530fc07146cf03de650214ee50469675e232cd2b9e243b5

[root@insure updev]# ifconfig
br-cf556844631a: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:90:0c:71:1e txqueuelen 0 (Ethernet)
RX packets 29759 bytes 1736558 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29759 bytes 1736558 (1.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

说明 172.18.0.1 会被系统占用
  1. 启动 docker

  • 为 docker.service 文件添加执行权限

chmod +x /etc/systemd/system/docker.service
  • 重新加载配置文件

systemctl daemon-reload
  • 启动

systemctl start docker
  • 设置开机启动

systemctl enable docker.service
  • 查看 docker 服务状态

systemctl status docker

二、安装elasticsearch (在线)

1.设置max_map_count

1. 查看max_map_count的值 默认是65530(cat  /proc/sys/vm/max_map_count )

2. 重新设置max_map_count的值(sysctl -w vm.max_map_count=262144)

2.下载镜像并运行

拉取镜像docker pull elasticsearch:7.6.0

启动镜像

docker run -d  --name elasticsearch -p 9000:9200 -e ES_JAVA_OPTS=

"-Xms512m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.6.0

[root@insure updev]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6665c elasticsearch:7.6.0 "elastic…" 6 seconds ago Up 5 seconds 0.0.0.0:9200->9200 /tcp elasticsearch


[root@insure updev]# docker inspect a6665cd3fd2e | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2",

3. 浏览器访问ip:9200
如果出现以下界面就是安装成功

{
 "name" : "825f7aa27c1a",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "TDuoMD0zRRS6D98XKa2SKA",
 "version" : {
   "number" : "7.6.0",
   "build_flavor" : "default",
   "build_type" : "docker",
   "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
   "build_date" : "2020-02-06T00:09:00.449973Z",
   "build_snapshot" : false,
   "lucene_version" : "8.4.0",
   "minimum_wire_compatibility_version" : "6.8.0",
   "minimum_index_compatibility_version" : "6.0.0-beta1"
},
 "tagline" : "You Know, for Search"
}

三、 将有网环境装好的elasticsearch镜像打包导出,然后再导入内网环境

  1. 使用 export 和 import

  2. 1)查看本机的容器

    这两个命令是通过容器来导入、导出镜像。首先我们使用 docker ps -a 命令查看本机所有的容器。

    

     2)导出镜像

    1.使用 docker export 命令根据容器 ID 将镜像导出成一个文件。

docker export 825f7aa27c1a > elasticsearch.tar

            2.上面命令执行后,可以看到文件已经保存到当前的 docker 终端目录

3)导入镜像

     1.使用 docker import 命令则可将这个镜像文件导入进来。

docker import - elasticsearch < elasticsearch.tar

      2.执行 docker images 命令可以看到镜像确实已经导入进来了。


2. 使用  save 和 load

  • 保存镜像

    1.下面使用 docker save 命令根据 ID 将镜像保存成一个文件。

docker save 825f7aa27c1a > elasticsearch.tar

    2.还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgresmongo 打包:

docker save -o images.tar postgres:9.6 mongo:3.4
  • 载入镜像

    使用 docker load 命令则可将这个镜像文件载入进来。

docker load < elasticsearch.tar

附:两种方案的差别

特别注意:两种方法不可混用。如果使用 import 导入 save 产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。

  1. 文件大小不同

      export 导出的镜像文件体积小于 save 保存的镜像

  1. 是否可以对镜像重命名* docker import 可以为镜像指定新名称* docker load 不能对载入的镜像重命名

  2. 是否可以同时将多个镜像打包到一个文件中

  • docker export 不支持

  • docker save 支持

  • 是否包含镜像历史

         * export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。

        * save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。

  • 应用场景不同  

        * docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。   

        * docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。




  • 文章转载自Java技术藏金阁,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论