• docker安装Nginx、tomacat、Elasticsearch


    分别明白:1.暴露端口的重要性;
    2.官方测试以及如何进入容器的重要性;
    3.如何看当前容器的存活状态如何进行修改

    通过三个实操来深度理解如何使用docker

    Docker 安装Nginx

    安装镜像

    #搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
    [root@localhost ~]# docker search nginx
    
    #拉取下载镜像 pull
    [root@localhost ~]# docker pull nginx
    
    #查看是否下载成功镜像
    [root@localhost ~]# docker images
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看是否成功并启动

    #运行测试
    # -d 后台运行   --name 给容器命名   -p 宿主机端口:容器内部端口
    [root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
    fghfg5f1d56g1rg1cf21g5f1hy9rt16123196f1er61t8489dfq19ert189er11a
    
    #查看正在启动的镜像
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    asd4789d41ad        nginx               "nginx -g 'daemon of…"   80 seconds ago      Up 43 seconds       0.0.0.0:82->80/tcp   nginx00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    进入容器操作

    #进入容器
    [root@localhost ~]# docker exec -it nginx01 /bin/bash #进入
    root@fv48591vcvas8:/# whereis nginx	#找到nginx位置
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    root@fv48591vcvas8:/# cd /etc/nginx/
    root@fv48591vcvas8:/etc/nginx# ls
    conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf
    
    #退出容器
    root@fv48591vcvas8:/etc/nginx# exit
    exit
    
    #停止容器
    [root@localhost~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    asd4789d41ad        nginx               "nginx -g 'daemon of…"   30 minutes ago      Up 10 minutes       0.0.0.0:3344->80/tcp   nginx01
    [root@localhost~]# docker stop aa664b0c8ed9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    宿主机端口容器内部端口 以及端口暴露:

    img
    问题: 我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,我要是可以在容器外部提供一个映射路径,达到在容器外部修改文件名,容器内部就可以自动修改?-v 数据卷技术!

    可以通过 -v命令进行挂载。可以看下面的容器卷挂载

    docker装tomcat

    安装镜像

    # 下载 tomcat9.0
    # 之前的启动都是后台,停止了容器,容器还是可以查到, docker run -it --rm 镜像名 一般是用来测试,用完就删除
    [root@localhost ~]# docker run -it --rm tomcat:9.0
    
    --rm       Automatically remove the container when it exits 用完即删
    
    #下载 最新版
    [root@localhost ~]# docker pull tomcat
    
    #查看下载的镜像
    [root@localhost ~]# docker images
    
    #以后台方式,暴露端口方式,启动运行,将容器外部的(第一个)8080端口给内部的8080端口进行映射
    [root@localhost ~]# docker run -d -p 8080:8080 --name tomcat01 tomcat
    
    #测试访问有没有问题
    curl localhost:8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    进入容器并部署

    #根据容器id进入tomcat容器
    [root@localhost ~]# docker exec -it 549815dsfasr /bin/bash
    root@549815dsfasr:/usr/local/tomcat# 
    #查看tomcat容器内部内容:
    root@549815dsfasr:/usr/local/tomcat# ls -l
    total 152
    -rw-r--r-- 1 root root 18982 June  5 20:40 BUILDING.txt
    -rw-r--r-- 1 root root  5409 June  5 20:40 CONTRIBUTING.md
    -rw-r--r-- 1 root root 57092 June  5 20:40 LICENSE
    -rw-r--r-- 1 root root  2333 June  5 20:40 NOTICE
    -rw-r--r-- 1 root root  3255 June  5 20:40 README.md
    -rw-r--r-- 1 root root  6898 June  5 20:40 RELEASE-NOTES
    -rw-r--r-- 1 root root 16262 June  5 20:40 RUNNING.txt
    drwxr-xr-x 2 root root  4096 June  16 12:05 bin
    drwxr-xr-x 1 root root  4096 June  21 11:04 conf
    drwxr-xr-x 2 root root  4096 June  16 12:05 lib
    drwxrwxrwx 1 root root  4096 June  21 11:04 logs
    drwxr-xr-x 2 root root  4096 June  16 12:05 native-jni-lib
    drwxrwxrwx 2 root root  4096 June  16 12:05 temp
    drwxr-xr-x 2 root root  4096 June  16 12:05 webapps
    drwxr-xr-x 7 root root  4096 June  5 20:37 webapps.dist
    drwxrwxrwx 2 root root  4096 June  5 20:36 work
    root@549815dsfasr:/usr/local/tomcat# 
    #进入webapps目录
    root@549815dsfasr:/usr/local/tomcat# cd webapps
    root@549815dsfasr:/usr/local/tomcat/webapps# ls
    root@549815dsfasr:/usr/local/tomcat/webapps# 
    # 如果出现问题采用以下的解决方案,原因见下面
    root@549815dsfasr:/usr/local/tomcat# ls 找到webapps.dist
    BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs  temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin   lib   native-jni-lib  webapps  work
    
    root@549815dsfasr:/usr/local/tomcat# cd webapps.dist/ # 进入webapps.dist 
    root@549815dsfasr:/usr/local/tomcat/webapps.dist# ls # 查看内容
    ROOT  docs  examples  host-manager  manager
    
    root@549815dsfasr:/usr/local/tomcat/webapps.dist# cd ..
    root@549815dsfasr:/usr/local/tomcat# cp -r webapps.dist/* webapps # 拷贝webapps.dist 内容给webapps
    root@549815dsfasr:/usr/local/tomcat# cd webapps #进入webapps
    root@549815dsfasr:/usr/local/tomcat/webapps# ls #查看拷贝结果
    ROOT  docs  examples  host-manager  manager
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    这样docker部署tomcat就可以访问了
    在这里插入图片描述

    上述操作中出现的问题:1.linux命令少了。 2.webapps目录为空
    原因:阿里云镜像的原因,阿里云默认是最小的镜像,所以不必要的都剔除掉。保证最小可运行的环境!解决方案:将webapps.dist下的文件都拷贝到webapps下即可。

    问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?要是可以在容器外部提供一个映射路径,比如webapps,我们在外部放置项目,就自动同步内部就好了!

    部署Elasticsearch+kibana

    问题:
    es 暴露的端口很多!
    es 十分耗内存
    es 的数据一般需要放置到安全目录!挂载
    –net somenetwork ? 网络配置

    # 启动elasticsearch
    [root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
    
    #e非常耗内存,启动过程容易卡死,可以看下面,有修改内存配置的启动
    
    # 测试一下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,防止耗内存
    #动不了就可能需要停止docker
    [root@localhost ~]# docker stop d834ce2bd306
    d1f56ads4f15
    
    # 查看docker容器使用内存情况 CPU状态
    [root@localhost ~]# docker stats  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    #测试成功就关掉elasticSearch,可以添加内存的限制,修改配置文件 -e 环境配置修改
    ➜  ~ docker rm -f d1f56ads4f15            # 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
    
    #此时用上面的方式启动就必会很卡了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    ➜  ~ curl localhost:9200
    {
      "name" : "b72c9847ec48",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "yNAK0EORSvq3Wtaqe2QqAg",
      "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"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    容器内部相互隔离,不能直接通过localhost:地址调用

  • 相关阅读:
    MySQL 事物四种隔离级别分析
    离线安装harbor容器镜像仓库(harbor-v2.3.5)
    共读《redis设计与实现》-单机(一)
    深度神经网络训练
    vue项目前端优化处理方案整理
    laravel Log 日志
    Android开发超详细介绍
    Oracle的约束
    ISCSLP 2022 | AccentSpeech—从众包数据中学习口音来构建目标说话人的口音语音合成系统
    JAVA基础(二十七)——文件相关操作
  • 原文地址:https://blog.csdn.net/qq_43585922/article/details/125908894