【Docker】docker核心概念与常用指令

news2024/10/7 14:33:53

目前掌握的docker处理平时工作倒是可以,但docker网络这块有些模棱两可,干脆从头整理一遍Docker。


🌳🌳【Docer篇整理】🌳🌳

=========================
篇一:docker核心概念与常用指令
篇二:镜像与docker数据卷
篇三:dockerfile
篇四:docker网络

文章目录

  • 一、认识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/499372.html

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

相关文章

【C++】vector的介绍及使用

目录 一、vector的介绍二、vector的常用接口2.1 vector的定义2.2 vector iterator的使用2.3 vector 空间增长问题2.4 vector 增删查改2.4.1.尾插和尾删2.4.2.任意位置插入和删除以及查找2.4.3.vector 的交换与遍历 2.5 vector 迭代器失效问题 一、vector的介绍 vector是表示可…

《花雕学AI》讯飞星火认知大模型的特点和优势,与ChatGPT的对比分析

引言&#xff1a; 人工智能是当今科技领域的热门话题&#xff0c;自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言&#xff0c;实现人机交互和智能服务。近年来&#xff0c;随着深度学习的发展&#xff0c;自然语言处理领域出现了许多创…

人人开源代码

后台源代码&#xff1a; git clone gitgitee.com:renrenio/renren-fast.git 前端源代码&#xff1a; git clone gitgitee.com:renrenio/renren-fast-vue.git 自动生成源代码&#xff1a; git clone gitgitee.com:renrenio/renren-generator.git 关于 renren-fast-vue npm npm报…

RabbitMQ --- 惰性队列、MQ集群

一、惰性队列 1.1、消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度&#xff0c;就会导致队列中的消息堆积&#xff0c;直到队列存储消息达到上限。之后发送的消息就会成为死信&#xff0c;可能会被丢弃&#xff0c;这就是消息堆积问题。 解决消息堆积有三种…

cenos7安装wkhtmltopdf

参考&#xff1a;http://www.023dns.com/server_ECS/2190.html https://blog.csdn.net/nexttrial/article/details/125504683 在Centos7 安装wkhtmltopdf&#xff0c;把html页面转换成pdf文档。 1、安装 yum install wkhtmltopdf 2、安装之后&#xff0c;执行操作&#xff…

处理 json 和 HttpMessageConverter--文件下载-ResponseEntity --SpringMVC 文件上传

目录 处理 json 和 HttpMessageConverter 处理 JSON-ResponseBody 说明: 下面是要完成的效果 准备工作 创建json.jsp 创建Dog.java , 作为返回的数据 创建JsonHandler.java 完成测试(页面方式)和 (Postman 方式) ​编辑 处理 JSON-RequestBody 应用案例 修改 json…

Masonry使用以及源码解析(未完待续

文章目录 Masonry使用约束约束优先级 以及 intrinsicContentSize相关问题 Masonry:iOS12Masonry源码解析下面是使用make.width点语法后的全部内部调用过程&#xff1a; Masonry使用 约束 在写Masonry之前&#xff0c;我想先来聊聊约束的基础知识&#xff0c;我们首先要了解一…

igraph的layout布局

做图论的社区检测&#xff0c;需要画图显示&#xff0c;用igraph可以进行可视化。 igraph有几个布局&#xff0c;分别如下&#xff1a; layout_with_dh &#xff1a; The Davidson-Harel layout algorithm Place vertices of a graph on the plane, according to the simulat…

电脑远程控制

这里介绍2种常用的电脑远程控制方式。第一种&#xff0c;向日葵。第二种&#xff0c;QQ。 向日葵 --- 推荐 支持 Mac、Windows、Linux、iOS、Android。 Mac 版向日葵如果想让别人控制你的电脑&#xff0c;安装完向日葵以后要在 Mac 的“安全与隐私”开启几个权限才能被对方正…

node笔记_写文件(异步写入,同步写入,追加写入,流式写入)

文章目录 ⭐前言⭐写文件&#x1f496;writeFile写入写一个txt文件 &#x1f496;writeFileSync同步写入写一个txt文件 &#x1f496;appendFile 追加写入追加写入一个txt &#x1f496;createWriteStream流式写入流式写入txt ⭐ 结束 ⭐前言 大家好&#xff0c;我是yma16&…

【计算机网络】 总结复习(2)

tcp tcp 工作在传输层可靠的数据传输服务&#xff0c;确保传输数据是无损坏&#xff0c;无间隔&#xff0c;非冗余按序 一些知识点 服务端最大并发 TCP 连接数远不能达到理论上限&#xff0c;会受以下因素影响&#xff1a; 文件描述符限制&#xff0c;每个 TCP 连接都是一个文…

HTML-CSS学习笔记

day1-01.CSS的元素显示模式 元素的显示模式就是元素&#xff08;标签&#xff09;以什么方式进行展示&#xff0c;比如<div>自己占一行&#xff0c;<span>一行可以放多个。 HTML元素一般分为块元素和行内元素两种类型。 块元素 如果在p标签中放了div标签&#xff…

操作系统——存储管理方式

目录 1.分区存储管理 1-1单一连续分配 1-1-1基本原理&#xff1a; 1-1-2单一连续分区存储管理的地址变换与地址保护 1-1-3管理特点 1-2固定分区分配 1-2-1基本原理 1-2-2分区划分 1-2-3主存空间的分配与回收 1-2-4地址转换与存储保护 1-2-5管理特点 1-3动态分区分配…

软考信管高级——风险管理

风险管理内容 风险管理计划 包含的内容&#xff1a; (1)方法论 (2)角色与职责 (3)预算 (4)时间安排 (5)风险类别 (6)风险概率和影响的定义 (7)概率和影响矩阵 (8)修订的干系人承受力 (9)报告格式 (10)跟踪 风险类型和应对措施 可能遇到的风险&#xff1a; (1)需求风险;(2)技术…

CSS布局基础(精灵图 字体图标 css 三角图标)

精灵图 & 字体图标 精灵图使用字体图标下载字体图标使用方式icomoon阿里 iconfontttf 字体 unicodecss 方式js 方式 更新字体图标icomoon阿里 iconfont css三角图标标准三角&#xff08;垂直的两边相等&#xff09;先来个普通盒子&#xff08;当然是五彩斑斓的边&#xff…

《编程思维与实践》1052.删除注释

《编程思维与实践》1052.删除注释 题目 思路 将所有可能的情况枚举出来: 1.在有效的块注释内: 有效是指块注释不在引号内,如char *s" \ * xxxxxxx *\ "就不是一个有效的块注释, 这种情况下跳过之后所有的内容,直到遇到*/后才重新判断情况; 2.在有效的行注释内: 同理…

ChatGPT :国内免费可用 ChatGPT +Midjourney绘图

前言 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言来…

Spring Security 06 Rember Me

目录 基本使用 原理分析 RememberMeServices TokenBasedRememberMeServices 总结 内存令牌 PersistentTokenBasedRememberMeServices 使用内存中令牌实现 持久化令牌 自定义记住我 自定义认证类 LoginFilter 自定义 RememberMeService 配置记住我 RememberMe …

使用多线程执行任务,并获取返回结果,附异步实现

1 获取又返回结果的 需要用到 callable接口 public class TestTask implements Callable<Student> {Overridepublic Student call() throws Exception {Thread.sleep(1500);Student student new Student();student.setAge(10);student.setName("里里");Syste…

Ceph对象存储使用

文章目录 对象存储简介RadosGW简介RadosGW配置RGW使用的存储池配置rgw使用的http端口配置rgw使用https配置rgw高可用 客户端s3cmd测试数据读写创建rgw用户安装s3cmd客户端配置s3cmd访问rgw测试数据读写bucket授权 对象存储简介 对象存储是无层次结构的数据存储方法&#xff0c…