思路:在有网的环境中安装好docker和elasticsearch镜像。
一、离线安装docker
下载 Docker
https://download.docker.com/linux/static/stable/x86_64/
解压压缩文件
tar -zxvf docker-19.03.8.tgz
将解压好的 Docker 文件复制到 /usr/bin 目录下
cp docker/* /usr/bin/
在 /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进行不安全的访问,否则访问将会被拒绝。
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 会被系统占用
启动 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镜像打包导出,然后再导入内网环境
使用 export 和 import
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 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:
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"的错误。
文件大小不同
export 导出的镜像文件体积小于 save 保存的镜像
是否可以对镜像重命名* docker import 可以为镜像指定新名称* docker load 不能对载入的镜像重命名
是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持
是否包含镜像历史
* export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
* save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
应用场景不同
* docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
* docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。