【Docker】Docker上篇

news2024/11/15 8:21:00

文章目录

  • 一、认识Docker
    • 1、Docker出现的背景
    • 2、Docker的历史
    • 3、虚拟机技术与容器技术
    • 4、容器比虚拟机快的原因
    • 5、对Devops层面的影响
  • 二、Docker的安装的原理
    • 1、核心名词
    • 2、安装Docker(for Linux)
    • 3、配置阿里云镜像加速
    • 4、Run的流程和Docker原理
  • 三、Docker指令
    • 1、镜像相关指令
    • 2、容器相关指令
    • 3、日志、元数据、进程相关指令
    • 4、进入容器和拷贝指令
  • 四、练习
    • 1、用Docker部署Nginx
    • 2、用Docker部署Tomcat
    • 3、用Docker部署elasticsearch+kibana
    • 4、Portainer可视化面板安装

一、认识Docker

1、Docker出现的背景

一款产品的上线,背后经过了开发环境、测试环境、生产环境。如果这些环境的配置不同,就会出现 “我的电脑上运行正常,但换台电脑就跑不起来” 的情况。

在这里插入图片描述
基于这个背景,Docker出现,它实现的效果就像我们去应用商店下载一个软件:

在这里插入图片描述

Docker的思想来源于集装箱,打包装箱,每个箱子之间是隔离的。

2、Docker的历史

简单了解下Docker的发展历史:

在这里插入图片描述
Docker是基于Go语言开发的开源项目,官网:https://www.docker.com

在这里插入图片描述

文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/

3、虚拟机技术与容器技术

Docker为什么十分轻巧,在容器技术出现之前,业界的主流是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。

在这里插入图片描述
虚拟机就是在实体机里装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。

在这里插入图片描述
每个虚拟机和实体机一样,内核、核心库、里面安装有各自的应用:

在这里插入图片描述

虚拟机属于虚拟化技术。Docker也是虚拟化技术,并且是属于轻量级的虚拟化。和虚拟机不同,Docker不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”),这个环境只需要一部分最核心的环境

在这里插入图片描述
容器运行在操作系之上,可以充分利用系统的资源。容器技术不是模拟一个完整的操作系统。 每个容器间是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响。

在这里插入图片描述

虚拟机和Docker容器的一些特性对比如下:

特性虚拟机容器
隔离级别操作系统级别进程级别
隔离策略HypervisorsCGroups
启动时间分钟级秒级
系统资源5~15%0~5%
镜像存储GB-TBKB-MB
集群规模上百上万
实现高可用的策略备份、容灾、迁移弹性、负载、动态

总结就是:

  • 传统虚拟机,是虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用是直接运行在宿主机(运行在谁上面谁就是宿主机)的内核上,容器是没有自己的内核的,也没有虚拟硬件,所以轻便了。

4、容器比虚拟机快的原因

  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势
  • docker利用的是宿主机的内核,而不需要Guest OS

在这里插入图片描述
因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。从而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟。

关于Host OS 和 Guest OS:


Host OS(主人操作系统)就是安装在你硬件设备上的系统,而Guest OS(客人操作系统)则是安装在虚拟机(VM)上面的系统。
在这里插入图片描述

5、对Devops层面的影响

到此,可以看到,传统的虚拟机有这几个缺点:

  • 资源占用十分多
  • 冗余步骤多
  • 启动很慢

而容器化技术的引入,在开发和运维层面带来的改变有:

  • 应用更快的交付和部署:传统交付要一堆帮助文档,安装程序。Docker则是直接打包镜像、发布测试、一键运行
  • 更快捷的升级和扩缩容:使用Docker后,部署应用就像搭积木,项目打包成一个镜像后直接扩展在服务器A、服务器B
  • 更简单的系统运维:开发、测试环境从此都是高度一致
  • 更高效的计算资源利用:在一个物理机上可以运行很多的容器实例,服务器性能被压榨到极致

二、Docker的安装的原理

1、核心名词

在这里插入图片描述
镜像(image):

docker镜像就好比是一个模板,通过这个模板来创建容器。tomcat镜像==>run==>tomcat容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。镜像和容器,就像Java中的类和对象。

仓库(repository):

仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库(很类似git)。Docker Hub是国外的。阿里云…都有容器服务器(配置镜像加速)。

https://zhuanlan.zhihu.com/p/53260098

2、安装Docker(for Linux)

  • 查看环境配置
[root@9527 ~] uname -r
3.10.0-514.26.2.el7.x86_64	# 要求3.0以上
[root@9527 ~] cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"  # CentOS7
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

  • (关于uname查看系统内核、架构等信息的补充)
uname  [选项]
常用参数如下:
-a			:显示系统所有相关信息
-s			:显示内核名称
-n			:显示主机名称
-r			:显示内核发行版本号
-v			:显示内核版本
-m		    :显示计算机硬件架构
-p			:显示主机处理器类型
-i			:显示硬件平台
-o			:显示操作系统名称

[root@Centos8 ~]# uname -a				#查看系统所有信息
Linux   Centos8  4.18.0-240.10.1.el8_3.x86_64 #1 SMP Mon Jan 18 17:05:51 UTC 2021 x86_64   x86_64    x86_64   GNU/Linux
|内核名称|主机名 |内核发行版本号                |   内核的建立时间                    | 硬件架构|处理器类型|硬件平台|操作系统名称|


[root@Centos8 ~]# uname -s				#显示内核名称
Linux
[root@Centos8 ~]# uname -n				#显示主机名称,主机名称改变,这里输出也会改变
Centos8
[root@Centos8 ~]# uname -r				#显示内核发行版本号
4.18.0-240.10.1.el8_3.x86_64
[root@Centos8 ~]# uname -v				#显示内核版本
#1 SMP Mon Jan 18 17:05:51 UTC 2021
[root@Centos8 ~]# uname -m				#计算机硬件架构
x86_64
[root@Centos8 ~]# uname -p				#显示主机处理器类型
x86_64
[root@Centos8 ~]# uname -i				#显示硬件平台
x86_64
[root@Centos8 ~]# uname -o				#显示操作系统名称
GNU/Linux

  • 查看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://download.docker.com/linux/centos/docker-ce.repo
#上述方法默认是从国外的,不推荐

#推荐使用国内的
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
#更新yum软件包索引
yum makecache fast

#4.安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io # 这里我们使用社区版即可
# 默认最新的版本,安装指定版本参考官方文档

#5.启动docker
systemctl start docker

#6. 使用docker version查看是否按照成功
docker version

#7. 测试
docker run hello-world

#8.查看刚才下载的镜像(从这里可以查看已有镜像的id)
[root@9527 ~] docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
hello-world           latest              bu996fb1ae65        4 months ago      13.3kB

  • 卸载Docker
#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#2. 删除资源
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默认工作路径!

3、配置阿里云镜像加速

  • 登录阿里云https://homenew.console.aliyun.com/,找到容器服务
    在这里插入图片描述
  • 找到镜像加速器
    在这里插入图片描述
  • 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx......."]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

配置完成后,以后拉镜像去阿里云的仓库,而不是Docker hub

4、Run的流程和Docker原理

以 docker run hello-world 为例:

在这里插入图片描述
流程图为:

在这里插入图片描述
关于底层原理:

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket给客户端访问。Docker-Server接收到Docker-Client的指令,就会执行这个命令!

在这里插入图片描述

外面大的Linux服务器和里面的每个容器(小的Linux虚拟机)是相互隔离的,想访问容器的这个端口,得在Linux服务器上和容器做一个联通。

三、Docker指令

docker version    #显示docker的版本信息。
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令

除了–help,也可直接去看官方文档 :https://docs.docker.com/engine/reference/commandline/build/

1、镜像相关指令

总览:

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

docker search #搜索镜像

docker pull #下载镜像 docker image pull

docker rmi #删除镜像 docker image rm

详细:

  • docker images查看所有本地的主机上的镜像
[root@9527 ~] docker images
REPOSITORY            TAG                 IMAGE ID            CREATED           SIZE
hello-world           latest              bf756fb1ae65        4 months ago     13.3kB
mysql                 5.7                 b84d68d0a7db        6 days ago       448MB

# 解释
#REPOSITORY			# 镜像的仓库源
#TAG				# 镜像的标签(版本)		---lastest 表示最新版本
#IMAGE ID			# 镜像的id
#CREATED			# 镜像的创建时间
#SIZE				# 镜像的大小

# 可选项
Options:
  -a, --all         Show all images (default hides intermediate images) #列出所有镜像
  -q, --quiet       Only show numeric IDs # 只显示镜像的id
  
[root@9527 ~] docker images -a  #列出所有镜像详细信息
[root@9527 ~] docker images -aq #列出所有镜像的id
d5f28a0bb0d0
f19c56ce92a8
1b6b1fe7261e
1b6b1fe7261e

  • docker search 搜索镜像,相当于在docker hub的搜索框输入
[root@9527 ~] docker search mysql

# --filter=STARS=3000 
#过滤,搜索出来的镜像收藏STARS数量大于3000的
# -f, --filter 
      
[root@9527 ~] docker search mysql --filter=STARS=6000
NAME        DESCRIPTION         STARS            OFFICIAL        AUTOMATED
mysql       MySQL IS ...        9520             [OK]                
 
  • docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@9527 ~] docker pull tomcat:8
8: Pulling from library/tomcat #如果不写tag,默认就是latest
90fe46dd8199: Already exists   #分层下载: docker image 的核心 联合文件系统
35a4f1977689: Already exists 
bbc37f14aded: Already exists 
74e27dc593d4: Already exists 
93a01fbfad7f: Already exists 
1478df405869: Pull complete 
64f0dd11682b: Pull complete 
68ff4e050d11: Pull complete 
f576086003cf: Pull complete 
3b72593ce10e: Pull complete 
Digest: sha256:0c6234e7ec9d10ab32c06423ab829b32e3183ba5bf2620ee66de866df # 签名防伪
Status: Downloaded newer image for tomcat:8
docker.io/library/tomcat:8 #真实地址

#对应上面的真实地址,以下两个等价
docker pull tomcat:8
docker pull docker.io/library/tomcat:8

# 再docker pull tomcat的其他版本,重复的层共用,不再重复下载
  • docker rmi 删除镜像
docker rmi -f 镜像id1 镜像id2 #删除指定id的镜像
docker rmi -f 镜像仓库源:tag

[root@9527 ~] docker rmi -f f19c56ce92a8

docker rmi -f $(docker images -aq) #删除全部的镜像

[root@9527 ~] docker stop $(docker ps -a -q)


2、容器相关指令

总览:

docker run 镜像id #新建容器并启动

docker ps 列出所有运行的容器 # docker container list

docker rm 容器id #删除指定容器

docker start 容器id	#启动容器

docker restart 容器id	#重启容器

docker stop 容器id	#停止当前正在运行的容器

docker kill 容器id	#强制停止当前容器

先拉取一个CentOS的镜像,进行后面容器的操作:

#docker中下载centos
docker pull centos

详细:

  • docker run 新建容器
docker run [可选参数] image # docker container run [可选参数] image 
#参数
--name="Name"		#容器名字 tomcat01 tomcat02 用来区分容器
-d					#后台方式运行
-it 				#使用交互方式运行,进入容器查看内容
-p					#指定容器的端口 -p 8080(宿主机):8080(容器),用法格式可以:

		-p ip:主机端口:容器端口
		-p 主机端口:容器端口(常用)
		-p 容器端口
-P(大写) 				随机指定端口

# 测试、启动并进入容器
[root@9527 ~]# docker run -it centos /bin/bash
[root@241b5abce65e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 可以看到使用Centos镜像创建的容器,里面的目录和虚拟机的目录大部分一样
[root@241b5abce65e /]# exit #从容器退回主机
exit

  • docker ps 列出当前正在运行的容器
docker ps   	 #列出当前正在运行的容器
  -a, --all     	 #列出当前正在运行的容器 + 带出历史运行过的容器
  -n=?, --last int   #列出最近创建的?个容器 ?为1则只列出最近创建的一个容器,为2则列出2个
  -q, --quiet        #只列出容器的编号

docker ps -aq # 常用组合
  • 退出容器且容器不停止运行Ctrl +P +Q
exit 		#容器直接退出
ctrl +P +Q  #容器不停止退出 

  • 删除容器 docker -rm
docker rm 容器id   				#删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f

docker rm -f $(docker ps -aq)  	 #删除所有的容器

docker ps -a -q|xargs docker rm  #删除所有的容器
  • 启停容器
docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器

最后,-d 后台启动的一个常见问题

# 命令 docker run -d 镜像名
[root@9527 ~]# docker run -d centos
a8f922c255859622ac45ce3a535b7a0e8253329be4756ed6e32265d2dd2fac6c

[root@9527 ~]# docker ps    
CONTAINER ID      IMAGE       COMMAND    CREATED     STATUS   PORTS    NAMES
# 问题docker ps. 发现centos 停止了
# 常见的坑,docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

3、日志、元数据、进程相关指令

查看日志:

docker logs --help
Options:
      --details        Show extra details provided to logs 
*  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
*      --tail string    Number of lines to show from the end of the logs (default "all")
*  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)

#-c 写个脚本产生模拟日志
docker run -d centos /bin/sh -c "while true;do echo 9527;sleep 1;done"       

#显示日志
-tf		#显示日志信息(一直更新)
--tail number #需要显示日志条数
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志

查看元数据:

docker inspect 容器id

在这里插入图片描述

查看容器中的进程:

docker top 容器id

在这里插入图片描述

4、进入容器和拷贝指令

进入当前正在运行的容器

# 方式一:
docker exec -it 容器id bashshell
# 方式二
docker attach 容器id
#测试
docker attach 55321bcae33d 
正在执行当前的代码...

# 区别
#docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)
#docker attach # 进入容器正在执行的终端,如模拟日志的容器,进入后一直在输出脚本运行内容

将文件从容器内拷贝到主机上(注意方向)

docker cp 容器id:容器内路径  主机目的路径

#进入容器内部
[root@9527 ~] docker exec -it 56a5583b25b4 /bin/bash
[root@55321bcae33d /] touch hello.java
[root@55321bcae33d /] exit
exit

#在宿主机执行拷贝指令
[root@9527 /] docker cp 56a5583b25b4:/hello.java /home 
[root@9527 /] cd /home
[root@9527 home] ls #可以看见java.java存在
hello.java

小结:

在这里插入图片描述

  attach      Attach local standard input, output, and error streams to a running container
  #当前shell下 attach连接指定运行的镜像
  build       Build an image from a Dockerfile # 通过Dockerfile定制镜像
  commit      Create a new image from a container's changes #提交当前容器为新的镜像
  cp          Copy files/folders between a container and the local filesystem #拷贝文件
  create      Create a new container #创建一个新的容器
  diff        Inspect changes to files or directories on a container's filesystem #查看docker容器的变化
  events      Get real time events from the server # 从服务获取容器实时时间
  exec        Run a command in a running container # 在运行中的容器上运行命令
  export      Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import]
  history     Show the history of an image # 展示一个镜像形成历史
  images      List images #列出系统当前的镜像
  import      Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像
  info        Display system-wide information # 显示全系统信息
  inspect     Return low-level information on Docker objects #查看容器详细信息
  kill        Kill one or more running containers # kill指定docker容器
  load        Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save]
  login       Log in to a Docker registry #
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

四、练习

1、用Docker部署Nginx

#1. 搜索镜像 search 建议去dockerhub仓库网页搜索,可以看到帮助文档
[root@9527 ~] docker search nginx

#2. 拉取下载镜像 pull
[root@9527 ~] docker pull nginx

#3. 查看是否下载成功镜像
[root@9527 ~] docker images

#3. 运行测试
# -d 后台运行  --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@9527 ~] docker run -d --name nginx01 -p 3344:80 nginx
aa664b0c8ed98f532453ce1c599be823bcc1f3c9209e5078615af416ccb454c2
# 此时访问宿主机:3344端口即可访问nginx

#4. 查看正在启动的镜像
[root@9527 ~] docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
75943663c116        nginx               "nginx -g 'daemon of…"   41 seconds ago      Up 40 seconds       0.0.0.0:82->80/tcp   nginx00

#5. 进入容器
[root@9527 ~] docker exec -it nginx01 /bin/bash #进入
root@aa664b0c8ed9:/ whereis nginx	#找到nginx位置
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@aa664b0c8ed9:/ cd /etc/nginx/
root@aa664b0c8ed9:/etc/nginx ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf

#6. 退出容器
root@aa664b0c8ed9:/etc/nginx exit
exit

#7. 停止容器
[root@9527 ~] docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
aa664b0c8ed9        nginx               "nginx -g 'daemon of…"   10 minutes ago      Up 10 minutes       0.0.0.0:3344->80/tcp   nginx01
[root@9527 ~] docker stop aa664b0c8ed9

关于宿主机端口 和 容器内部端口 的映射以及端口暴露:

在这里插入图片描述
现在每次改动nginx配置文件,都需要进入容器内部,十分麻烦,要是可以在容器外部提供一个映射路径,达到在容器外部修改文件,容器内部就可以自动修改 ===> -v 数据卷

2、用Docker部署Tomcat

# 下载 tomcat9.0
# 之前的启动都是后台,停止了容器,容器还是可以查到 
# docker run -it --rm 镜像名 用完就删除,一般是用来测试
[root@9527 ~] docker run -it --rm tomcat:9.0     
# --rm 用完即删 Automatically remove the container when it exits 

-------
#正常部署最新版
[root@9527 ~] docker pull tomcat

#查看下载的镜像
[root@9527 ~] docker images

#以后台方式,暴露端口方式,启动运行
[root@9527 ~] docker run -d -p 8080:8080 --name tomcat01 tomcat

#测试访问返回页面有404
curl localhost:8080

#根据容器id进入tomcat容器
[root@9527 ~] docker exec -it 645596565d3f /bin/bash
root@645596565d3f:/usr/local/tomcat# 
#查看tomcat容器内部内容:
root@645596565d3f:/usr/local/tomcat# ls -l
total 152
...
#进入webapps目录
root@645596565d3f:/usr/local/tomcat: cd webapps
root@645596565d3f:/usr/local/tomcat/webapps: ls
root@645596565d3f:/usr/local/tomcat/webapps# 
----------
# 发现问题:1、linux命令少了。 2.webapps目录为空 
# 原因:阿里云镜像的原因,阿里云默认是最小的镜像,所以不必要的都剔除掉
# 保证最小可运行的环境!
# 解决方案:
# 将tomcat下的webapps.dist下的文件都拷贝到webapps下即可
root@645596565d3f:/usr/local/tomcat# ls 找到webapps.dist

root@645596565d3f:/usr/local/tomcat# cd webapps.dist/ # 进入webapps.dist 
root@645596565d3f:/usr/local/tomcat/webapps.dist# ls # 查看内容
ROOT  docs  examples  host-manager  manager

root@645596565d3f:/usr/local/tomcat/webapps.dist# cd ..
root@645596565d3f:/usr/local/tomcat: cp -r webapps.dist/* webapps # 拷贝webapps.dist 内容给webapps

root@645596565d3f:/usr/local/tomcat/webapps# ls #查看拷贝结果
ROOT  docs  examples  host-manager  manager

再curl localhost:8080,可以看到tomcat的首页

注意上面的-rm参数用完即删最小可运行环境的概念。最后,这里也有和Nginx同样的问题,需要等待后面的数据卷来优化。

3、用Docker部署elasticsearch+kibana

# es 暴露的端口很多!
# es 十分耗内存
# es 的数据一般需要放置到安全目录!即挂载
# --net somenetwork  后面的网络配置

# 启动elasticsearch
[root@9527 ~] docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 测试一下es是否成功启动curl localhost:9200
{
  "name" : "d73ad2f22dd3",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "atFKgANxS8CzgIyCB8PGxA",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "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,内存占用太多
[root@9527 ~] docker stop d834ce2bd306

# 查看docker容器使用内存、CPU情况,后加容器id即只看这一个容器
[root@9527 ~] docker stats  

添加内存的限制,修改配置文件 -e 环境配置修改,这里指定最小64M,最大512M

docker rm -f d73ad2f22dd3            # stop命令也行                               

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 
			-e "discovery.type=single-node" 
			-e ES_JAVA_OPTS="-Xms64m -Xmx512m" 
			elasticsearch:7.6.2

此时docker stats可以看到内存占用已经降低:

在这里插入图片描述

curl localhost:9200 # 测试返回正常

使用kibana连接es (elasticSearch),思考网络如何才能连接:

在这里插入图片描述

4、Portainer可视化面板安装

Docker图形化界面管理工具,提供一个后台面板供我们操作。等以后K8s和CI/CD后用Rancher替代。

docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

容器启动成功后,访问映射到宿主机的8080端口。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

phoenix使用(一)之全局索引的使用

索引使用 1.1. 全局索引&#xff08;Global Indexing&#xff09; 名词解释&#xff1a; 全局索引&#xff0c;适用于读多写少的业务场景。使用Global indexing在写数据的时候开销很大&#xff0c;因为所有对数据表的更新操作&#xff08;DELETE, UPSERT VALUES and UPSERT SEL…

chatgpt软件 - chatbox

文章目录 打开github 进入chatgpt官方要记得登录&#xff01;&#xff01;点击头像将key命名&#xff1a;安装chatbox下面就可以开始使用啦&#xff01;&#xff01; 打开github https://github.com/Bin-Huang/chatbox 特性&#xff1a; 更自由、更强大的 Prompt 能力数据存储…

看了这13个案例,我总算又get到了企业级无代码

企业级无代码为何面向软件公司的研发团队&#xff1f; 哪些人能在企业级无代码旅程中获益&#xff1f; 如何找到实践的切入点&#xff1f; 如何开展规模化的交付实践&#xff1f; 如何快速组建企业级无代码开发团队&#xff1f; ...... 近期smardaten从组织创新、技术创新…

OCC的拓扑基础数据结构

在OpenCASCADE中,提供了一系列的拓扑基础数据结构,用于表示几何实体的拓扑结构,其中最基本的是TopoDS_Shape。下面是一些其他常用的拓扑数据结构: TopoDS_TCompound:代表了复合实体,即由多个几何实体组合而成的实体,可以包含任意数量和类型的其他几何实体。 TopoDS_TCom…

【消费战略方法论】认识消费者的恒常原理(三):消费者刺激反馈原理

人类是一种高度智能的生物&#xff0c;而所谓智能的核心在于其理解世界的能力&#xff0c;而理解世界的过程中必然伴随着感知和反应。人的刺激反馈机制就是在这个过程中发挥着重要的作用。 刺激反馈机制是一种生物学的反应现象&#xff0c;它指的是人体对外界刺激的感知与反应…

vue使用富文本和打印 egg使用ctx.getFileStream进行文件上传

vue2使用富文本 安装 npm install vue-quill-editor --save全局引入(main) import VueQuillEditor from vue-quill-editor//调用编辑器 // 样式 import quill/dist/quill.core.css import quill/dist/quill.snow.css import quill/dist/quill.bubble.css Vue.use(VueQuillE…

【汽车电子】浅谈LIN总线

目录 1.为何使用LIN总线 2.什么是LIN总线&#xff1f; 3.LIN总线的主从关系 4.LIN的特点 5.LIN报文帧结构 6.LIN总线波形 7.帧类型 8.进度表 9.状态机的实现 10.总结 11.声明 1.为何使用LIN总线 在这里你可能要问“不都有CAN总线了吗&#xff1f;这个LIN总线又是从哪…

【JS笔记】JS操作字符串、对象、数组、时间对象、数值操作、定时器

这篇文章&#xff0c;主要介绍JS操作字符串、对象、数组、时间对象、数值操作、定时器。 目录 一、字符串 1.1、定义字符串 1.2、字符串方法 1.3、模板字符串 1.4、JSON字符串 二、对象操作 2.1、定义对象 2.2、对象方法 三、数组操作 3.1、定义数组 3.2、数组方法 …

【Docker_windows】安装Docker桌面版

现在如果问什么行业最火&#xff0c;很多人第一反应肯定就是IT。的确&#xff0c;这些年随着互联网的不断发展&#xff0c;IT热门众所周知。那么就一起来说说&#xff0c;IT行业里&#xff0c;哪些技术更热门。 What&#xff1f; Docker Desktop&#xff1f; Docker Desktop是…

SpringBoot快速回顾(分别使用注解和xml方式去声明Bean,获取Bean)

SpringBoot快速回顾&#xff08;configuration注解&#xff09; 1. 使用xml声明Bean1.1 创建测试实体类1.2 创建xml文件&#xff08;目的&#xff1a;将实体类声明成Bean&#xff09;1.3 测试 2. 使用注解configuration声明Bean2.1 已经声明过实体类Student2.2 定义配置类2.3 测…

Lim测试平台变量使用规则介绍

一、Lim测试平台简介 Lim测试平台是一款轻量级的接口测试平台&#xff0c;也是为数不多使用python作为后端接口建设的语言。 正如它的名字我们希望在开展接口测试时能够“四两拨千斤”&#xff01;让用户操作更少但开展建设的效率更高。因此我们做了许多交互细节上的优化和创新…

Elasticsearch:人类语言到 ElasticSearch 查询 DSL

Elasticsearch 为开发者提供了强大的搜索功能。Elasticsearch 使用 DSL 来进行查询。对于很多从关系数据库过来的人&#xff0c;这个很显然不很适应。虽然我们可以使用 SQL 来进行查询&#xff0c;但是我们必须通过一些命令来进行转换。我们可以通过阅读文章&#xff1a; Elast…

SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)

统⼀⽤户登录权限验证 1、最初的用户登录效验:在每个方法里面获取session和 session 中的用户信息&#xff0c;如果存在用户&#xff0c;那么就认为登录成功了&#xff0c;否则就登录失败了。 2、第二版用户登录效验:提供了统一的方法&#xff0c;在每个需要验证的方法中调用…

神经网络模型压缩技术—剪枝

目录 1.模型压缩定义 2.模型压缩必要性及可行性 3.模型压缩分类 3.1 主流分类 3.2 前端和后端 4.剪枝 4.1 剪枝定义 4.2 剪枝分类 4.2.1 基于粒度 4.2.2 基于是否结构化 4.2.3 基于目标 5. 结构化剪枝和非结构化剪枝 5.1 非结构化剪枝&#xff08;移除单个权重或神…

【Python习题集1】Python 语言基础知识

python习题 一、实验内容二、实验总结 一、实验内容 1、运用输入输出函数编写程序&#xff0c;将华氏温度转换成摄氏温度。换算公式&#xff1a;C(F-32)*5/9,其中C为摄氏温度&#xff0c;F为华氏温度。 &#xff08;1&#xff09;源代码&#xff1a; ffloat(input(输入华氏温…

swift 技术 监听电话中断

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

做好FP独立站有6大要点,注意!

跨境电商做FP独立站已经见怪不怪了&#xff0c;但要注意哪些要点才能做好一个成功的FP独立站呢&#xff0c;今天就跟大家聊一聊。 做好FP独立站有6个要点 1.选品 独立站运营选择产品的方向往往是抓住非主流、新奇等特征。不推荐在成熟平台上销售受欢迎的普通商品&#xff0c;…

Elasticsearch详解

文章目录 概览使用与ES交互索引创建索引查询索引删除文档创建修改文档局部修改文档查询文档删除全查询 整合SpringBootpom依赖application.ymlElasticsearchAutoConfigurationElasticsearchPropertiesElasticsearchConstantPersonSearchPageHelperPersonServiceBaseElasticsear…

zabbix 使用自定义命令做监控项

环境&#xff1a;Linux zabbix6 问题&#xff1a;某个监控项的值为linux终端的shell命令输出&#xff0c;需要做一个zabbix自定义监控项 解决办法&#xff1a;参考官方文档使用userparameters方法 背景&#xff1a;我需要监控Linux某个文件夹的文件数量&#xff0c;并设置阈值…

详解c++---stack和dequeue的介绍

目录标题 stack介绍stack的定义stack的数据插入stack中数据的个数stack数据删除stack中数据的查看判断stack对象是否为空stack对象的数据交换queue的介绍queue的定义queue的数据插入frontbackqueue的元素个数queue中元素的删除emptyqueue的数据交换 stack介绍 首先stack是一个…