首页 > 系统相关 >docker原理、常用命令,以及部署nginx、tomcat、es+kibana练习(一)

docker原理、常用命令,以及部署nginx、tomcat、es+kibana练习(一)

时间:2024-11-19 12:14:47浏览次数:3  
标签:容器 tomcat -- kibana nginx 镜像 docker null root

基本结构

在这里插入图片描述

镜像(image):
docker镜像可以当作一个模板,通过这个模板可以创建多个容器。

例如一个tomcat镜像=>运行=>容器(提供服务)

容器(container):
docker利用容器技术,可以独立运行一个或一组应用(容器间相互隔离)

docker容器通过镜像来创建,即容器中的进程依赖于镜像中的文件。

docker容器类似于虚拟机,可以启动,停止,删除等。可以把docker当作一个简易的Linux系统。

仓库(repository):
存放镜像的地方。分为公有仓库和私有仓库。

默认是使用国外的仓库docker hub。

流程及原理

流程:
以第一层docker run hello-world为例

在本机寻找镜像–>判断是否有该镜像
如果有该镜像–>直接运行
如果没有这个镜像–>去所设置的源中寻找这个镜像–>下载–>运行

原理:
docker是一个CS结构系统,docker的守护进程在主机上。通过socket从客户端访问,docker-server接收到docker-client指令,就好执行该命令。

常用命令

帮助命令
docker version  #查看docker版本信息
docker info    #显示docker系统信息,比version更相信
docker 命令 --help   #docker --help直接查看帮助信息

docker官方文档:https://docs.docker.com/engine/reference/commandline

镜像命令

docker images 查看所有本地主机上的镜像

root@VM-4-17-ubuntu:/home/ubuntu# docker images
REPOSITORY    TAG                        IMAGE ID       CREATED         SIZE
tophant/arl   v2.6.1                     658157563173   10 months ago   1.19GB
hello-world   latest                     d2c94e258dcb   18 months ago   13.3kB

#解释
REPOSITORY  镜像的仓库源
TAG         镜像标签
IMAGE ID    镜像id
CREATED     镜像创建时间
SIZE        镜像大小

#可选项
docker images --help #查看可选项
-a, -all  #列出所有镜像
-q, -quiet #只显示镜像id
-f, --filter filter(过滤器)   filter可以是dangling=true(悬空镜像)
    --format string(格式化字符串)   string可以是json table等
也可以直接docker images 后面跟上镜像的名称 搜索指定镜像

docker search 搜索镜像(如果配置的是国内的镜像源会超时)

docker search images(写镜像名称即可)

docker pull 下载镜像

docker pull 镜像名称(默认是最新版本)
docker pull 镜像名称[:tag]  #指定版本

root@VM-4-17-ubuntu:/home/ubuntu# docker pull mysql
Using default tag: latest   #如果不写,默认就是latest
latest: Pulling from library/mysql
f1a9f94fc2db: Pull complete   #分层下载
f98254a2b688: Pull complete 
6ad83e89f981: Pull complete 
a42d733ea779: Pull complete 
6fd1af2601dd: Pull complete 
0233a63dc5cd: Pull complete 
5f31e56c9bea: Pull complete 
c0fb96d14e5b: Pull complete 
d57074c62694: Pull complete 
7030c241d9b8: Pull complete 
Digest: sha256:2be51594eba5983f47e67ff5cb87d666a223e309c6c64450f30b5c59a788ea40 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest   #真实地址

docker pull mysql 等价于 docker pull  docker.io/library/mysql:latest
docker pull mysql:5.7 #下载指定5.7版本的mysql

docker rmi -f 删除镜像

docker rmi -f 镜像名称或ID  
docker rmi -f $(docker images)  #批量删除所有镜像
容器命令

有镜像才能创建容器,下载一个centos镜像来测试

docker pull centos  #下载centos镜像

新建容器,并启动

docker run [可选项] image 使用的shell

#参数
--name='Name'  #容器名字
-d			   #后台方式运行
-it			   #使用交互方式运行,进入容器查看内容
-p			   #指定容器端口
	-p 主机端口:容器端口 (常用)
	-p ip:主机端口:容器端口
	-p 容器端口
-P 			   #随机指定端口

#启动并且进入容器,以/bin/bash启动交互
root@VM-4-17-ubuntu:/home/ubuntu# docker run -it centos /bin/bash
#此时已经进入centos
[root@edcaca222a0c /]# 
[root@edcaca222a0c /]# exit 
退出容器

docker ps 查看正则运行的容器

docker ps

#可选项
-a    #查看历史运行过的容器
-n=? #显示最近创建的容器
-q    #只显示编号

exit 退出容器

exit  #直接停止容器并退出
Ctrl+P+Q #容器不停止,但退出

docker rm 删除容器

docker rm 容器id  #删除所有容器(正在运行的容器不能删除)
docker rm -d 容器id #强制删除
docker rm -f $(docker ps -sq)  #删除全部容器

启动和停止容器

docker start 容器id   #启动容器
docker restart 容器id #重启容器
docker stop 容器id    #停止容器
docker kill 容器id    #强制停止容器
其他命令

后台启动容器

docker run -d centos #后台运行centos
但是会停止,因为容器使用后台时,需要有一个前台进程,docker发现没有应用,就会自动停止

查看日志

docker logs 

#可选项
--details    #详细显示    
-f    
	--follow         
    --since string   
-n
	--tail number #要显示的日志的条数   
-t    #显示时间戳
	--timestamps      
    --until
    
例:
docker logs -f -t --tail 10 bdc75926ba54  #查看容器id为bdc75926ba54的近十条日志
#自己写一段脚本
docker run -d centos /bin/bash -c "while true;do echo success;sleep 1;done"
docker ps

查看容器中的进程信息

docker top 容器ID   

查看进程源数据

docker inspect 容器ID   #很详细的信息
root@VM-4-17-ubuntu:/home/ubuntu# docker inspect bdc75926ba54
[
    {
        "Id": "bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07",
        "Created": "2024-11-18T12:42:53.59866176Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo success;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3288327,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-11-18T12:42:53.709853768Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07/hostname",
        "HostsPath": "/var/lib/docker/containers/bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07/hosts",
        "LogPath": "/var/lib/docker/containers/bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07/bdc75926ba5407e16b35c9bc7f3ae0458f42760de6cd4438b5241107ca45cd07-json.log",
        "Name": "/nervous_hamilton",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                23,
                168
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": [],
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware",
                "/sys/devices/virtual/powercap"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e1f14591fd92ea633340505f56178f100b15e4b3c3d5c99d4cd6fdce7b45f0fb-init/diff:/var/lib/docker/overlay2/d3b747475083e2e4f9f55fdbd0bfcb7014302c609b6e78e71285b3cbc167ada9/diff",
                "MergedDir": "/var/lib/docker/overlay2/e1f14591fd92ea633340505f56178f100b15e4b3c3d5c99d4cd6fdce7b45f0fb/merged",
                "UpperDir": "/var/lib/docker/overlay2/e1f14591fd92ea633340505f56178f100b15e4b3c3d5c99d4cd6fdce7b45f0fb/diff",
                "WorkDir": "/var/lib/docker/overlay2/e1f14591fd92ea633340505f56178f100b15e4b3c3d5c99d4cd6fdce7b45f0fb/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "bdc75926ba54",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash",
                "-c",
                "while true;do echo success;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "f917fe5b9d9b12a387c0839145d48519157f1cc1de48ff5946de78dadb34e7f2",
            "SandboxKey": "/var/run/docker/netns/f917fe5b9d9b",
            "Ports": {},
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "4c25273ed065481b657a6b4878f81d5edcd6d82054d34a5fb197908f75765a3c",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null,
                    "NetworkID": "1d4a3714574bf3de87a9553dfc005fad8166af95134e91e3b2bb80c9ac3a65b5",
                    "EndpointID": "4c25273ed065481b657a6b4878f81d5edcd6d82054d34a5fb197908f75765a3c",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": null
                }
            }
        }
    }
]

进入正在运行的容器
外面平时使用的容器通常都是后台方式运行的

方式一(进入容器后开启一个新的终端)
docker exec -it 容器ID 要使用的shell
例:
docker exec -it bdc75926ba54 /bin/bash

方式二(进入容器正在执行的终端,不会启动新的进程)
docker attach 容器ID
例:
docker exec bdc75926ba54

从容器拷贝文件到主机上

docker cp 容器ID:容器内文件路径 目的主机路径
例: #将容器内的test.txt文件拷贝到主机的/root目录下
docker cp 6b627de01b09:/home/test.txt /root

查看docker的cpu状态

docker stats

练习

部署nginx
1、搜索镜像   search  (最好去docker hub网站上搜索)
2、下载镜像   pull
3、运行测试   run
docker pull nginx #拉取镜像

docker run -d --name nginx01 -p 3456:80 nginx
#以后台方式运行该镜像,起名为nginx01,3333为主机端口,80为容器地址
curl localhost:3456
#本机自测一下,可以通过


root@VM-4-17-ubuntu:/home/ubuntu# docker exec -it nginx01 /bin/bash
root@b4b82f2c26a3:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@b4b82f2c26a3:/# cd /etc/nginx
root@b4b82f2c26a3:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
部署tomcat
#官方使用
docker run -it --rm tomcat:9.0 #用完即删,一般用于测试

#正常下载启动
docker pull tomcat #拉取镜像
docker run -d -p 3457:8080 --name tomcat01 tomcat
#和上面部署nginx一样,此时可以访问,但不是完整的(是一个阉割版)

root@VM-4-17-ubuntu:/home/ubuntu# docker exec -it tomcat01 /bin/bash
root@cd322dbdf282:/usr/local/tomcat# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  native-jni-lib  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  webapps.dist  work
root@cd322dbdf282:/usr/local/tomcat# cd webapps   #应用一般放在这个webap ps文件夹中
root@cd322dbdf282:/usr/local/tomcat/webapps# ls   #但是webapps里面什么都没有
#里面没有完整的linux命令、没有webapps,因为他只提供最小可运行的环境
root@cd322dbdf282:/usr/local/tomcat# cd webapps.dist
root@cd322dbdf282:/usr/local/tomcat/webapps.dist# ls
docs  examples  host-manager  manager  ROOT
#可以看到webapps.dist文件夹下有内容,将这个里面内容拷贝到webapps目录下
root@cd322dbdf282:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@cd322dbdf282:/usr/local/tomcat# ls webapps
docs  examples  host-manager  manager  ROOT
#此时再次刷新网页,即可正常显示

在这里插入图片描述

部署ES+Kibana

es和kibana之间需要进行网络通信,首先要创建一个虚拟网络

docker network create es-net

部署es

#ES暴露的端口很多,ES很耗内存!!!,且ES的数据一般需要放置到安全目录挂载
#下载启动
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

#由于十分耗内存,内存小可能无法启动,这里使用-e参数修改环境配置
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
#docker stats 查看docker的cpu状态,可以发现内存很小了,
#curl localhost:9200 发现web页面也可以正常访问了

在这里插入图片描述

部署kibana(要于es的版本一致)

docker pull kibana:7.6.2 #用的国内的源,无法下载最新的
#启动(如果遇到Kibana server is not ready yet等一会就可以了)
docker run -d --name kibana02 -e ELASTICSEARCH_HOSTS=http://4554b397a6f3:9200 --net=es-net -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -p 5601:5601 kibana:7.6.2
#第一个-e是设置es的节点地址,如果用容器ID不好使就换成服务器ip
#将es的容器ID替换成服务器的ip也可以

成功进入
在这里插入图片描述

标签:容器,tomcat,--,kibana,nginx,镜像,docker,null,root
From: https://blog.csdn.net/2301_79469341/article/details/143880368

相关文章

  • 使用 Nginx Ingress 实现金丝雀发布/灰度发布
    使用NginxIngress实现金丝雀发布/灰度发布说明:使用NginxIngress实现金丝雀发布的集群,需部署NginxIngress作为IngressController,并且对外暴露统一的流量入口。详情请参见在TKE上部署NginxIngress。使用场景使用NginxIngress实现金丝雀发布适用场景主要取决......
  • centos7安装nginx
    1.安装EPEL仓库:sudoyuminstallepel-release2.添加yum源:sudorpm-ivhhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm3.安装Nginx:sudoyuminstallnginx4.启动Nginx服务并设置开机启动: sudosystemctlstart......
  • Kibana:使用 Devtools console 把请求变成 Python 或 Nodejs 的代码
    特别指出,这个最新的ElasticStack8.16发布版的功能。我很兴奋地来尝试这个功能。在今天的文章中,我们来使用一个例子来进行详细地描述。安装如果你还没有安装好自己的Elasticsearch及Kibana,请参考如下的文章来进行安装:如何在Linux,MacOS及Windows上进行安装Elast......
  • nginx宝塔面板如何配置跨域?
    在宝塔面板中配置Nginx以支持跨域请求(CORS,Cross-OriginResourceSharing),通常涉及到编辑网站的Nginx配置文件来添加适当的HTTP头部。以下是具体步骤:1.登录宝塔面板使用您的账户信息登录到宝塔面板。2.进入站点设置在左侧菜单中选择“网站”。找到您需要配置跨域的网站,......
  • Windows Nginx 安装 php
    1、windows上nginx运行正常后,从https://windows.php.net/download/下载NonThreadSafe版的zip包,解压到C:\php。2、安装vc++运行库https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170       vc++2015-2022Redistribut......
  • 云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测
    背景如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当时使用的是docker-compose在单......
  • golang: 在线上用nginx部署应用
    一,启动应用:1,编译程序$gobuild2,用nohup启动应用的二进制程序$nohup/data/goapp/industry/industry>>/data/logs/gologs/back.log2>&1&[1]48963,检查应用是否启动:$ss-lntp|grep3000LISTEN040960.0.0.0:30000.0.0.0:*users:(("......
  • Nginx
    什么是Nginx?简介Nginx(发音为"enginex")是一款高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它最初由俄罗斯的程序员IgorSysoev于2004年开发,并迅速成为全球最流行的Web服务器之一。Nginx以其轻量级、可扩展和高并发处理能力而闻名,广泛用于Web......
  • Tomcat 使用入门
    简介及目录结构ApacheTomcat是一个Servlet容器,是应用(Java)服务器,可在其中部署JavaWeb应用。ApacheTomcat的目录结构主要包括以下几个重要的文件夹和文件。下面是一个典型的Tomcat目录结构及其功能简要说明:apache-tomcat/├──bin/#启动和停止To......
  • Linux系统-redis集群、nacos、nginx、keepalived、mysql开机自启
    一、Redis集群开机自启:如三主三从交叉式redis集群,有两个方法,自行选择。方法一:第一步:分别在各节点添加以下redis.service文件命令:vim/lib/systemd/system/redis_6379.service添加:[Unit]Description=Redispersistentkey-valuedatabaseAfter=network.targetAfter=......