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

目前掌握的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核心概念与常用指令_第1张图片
基于这个背景,Docker出现,它实现的效果就像我们去应用商店下载一个软件:

在这里插入图片描述

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

2、Docker的历史

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

【Docker】docker核心概念与常用指令_第2张图片
Docker是基于Go语言开发的开源项目,官网:https://www.docker.com

【Docker】docker核心概念与常用指令_第3张图片

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

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

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

【Docker】docker核心概念与常用指令_第4张图片
虚拟机就是在实体机里装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。

【Docker】docker核心概念与常用指令_第5张图片
每个虚拟机和实体机一样,内核、核心库、里面安装有各自的应用:

【Docker】docker核心概念与常用指令_第6张图片

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

【Docker】docker核心概念与常用指令_第7张图片
容器运行在操作系之上,可以充分利用系统的资源。容器技术不是模拟一个完整的操作系统。 每个容器间是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响。

【Docker】docker核心概念与常用指令_第8张图片

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

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

总结就是:

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

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

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

【Docker】docker核心概念与常用指令_第9张图片
因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。从而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟。

关于Host OS 和 Guest OS:


Host OS(主人操作系统)就是安装在你硬件设备上的系统,而Guest OS(客人操作系统)则是安装在虚拟机(VM)上面的系统。
【Docker】docker核心概念与常用指令_第10张图片

5、对Devops层面的影响

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

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

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

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

二、Docker的安装的原理

1、核心名词

【Docker】docker核心概念与常用指令_第11张图片
镜像(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/,找到容器服务
    【Docker】docker核心概念与常用指令_第12张图片
  • 找到镜像加速器
    【Docker】docker核心概念与常用指令_第13张图片
  • 配置镜像加速器
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】docker核心概念与常用指令_第14张图片
流程图为:

【Docker】docker核心概念与常用指令_第15张图片
关于底层原理:

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

【Docker】docker核心概念与常用指令_第16张图片

外面大的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】docker核心概念与常用指令_第17张图片

查看容器中的进程:

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

小结:

【Docker】docker核心概念与常用指令_第18张图片

  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

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

【Docker】docker核心概念与常用指令_第19张图片
现在每次改动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),思考网络如何才能连接:

【Docker】docker核心概念与常用指令_第20张图片

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端口。

【Docker】docker核心概念与常用指令_第21张图片
【Docker】docker核心概念与常用指令_第22张图片

你可能感兴趣的:(Docker笔记,docker,容器,运维)