• Docker(二)、linux环境Docker的部署以及构建镜像


    一、docker部署

    1、快速部署常用的命令:

    1、表示从远程仓库抽取镜像:docker pull 镜像名<:tags>   
    2、查看本地镜像:docker images 
    3、创建容器,启动应用 : docker run 镜像名<:tags>
    ps:如果镜像还没有被抽取,此时会先抽取镜像,然后安装到本地,启动镜像
    4、查看正在运行中的容器:docker ps
    5、删除容器, <-f>表示强制删除:docker rm <-f> 容器id
    6、删除指定版本的镜像, <-f>表示 (即便存在对应容器) 强制删除:docker rmi <-f> 镜像名<:tags>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    快速部署命令概览图:
    在这里插入图片描述

    1.1、demo-部署tomcat

    下载默认版本(当前下载使用最多的版本): docker pull tomcat
    查看有哪些本地镜像docker images

    下载指定版本[版本号从hub.docker.com 即docker中央仓库获取到的]:

    docker pull tomcat:8.5.46-jdk8-openjdk 
    
    • 1

    docker 镜像仓库访问不了,可以参看阿里镜像:https://developer.aliyun.com/packageSearch?word=tomcat

    创建对应容器,才能提供服务:docker run tomcat
    启动成功后,可以看到端口8080,若想访问,需要做宿主机和容器的端口映射,操作如下:

    docker run -p 8000:8080  -d tomcat
    
    • 1

    查看正在使用的容器:docker ps
    删除容器:

    docker stop 容器id
    docker rm 容器ID
    
    • 1
    • 2

    删除镜像:

    docker rmi 镜像<:tags>
    
    • 1

    宿主机里有docker容器tomcat,tomcat默认端口8080,docker做了一个宿主机和容器的端口映射。外侧浏览器通过宿主机ip和端口8000访问tomcat
    转发给内部8080端口。

    1.2、tomcat容器内部结构

    1.2.1、每个tomcat容器,都包含三个组件
    • 1、linux系统,提供最底层的linux命令,此操作系统只提供安装jdk最基本的安装环境,尺寸非常小【tomcat基本运行环境,绝大多数docker容器都内置了linux系统,进入到容器内部,直接进行linux操作就可以了】
    • 2、此基础上,docker 自动安装jdk1.8.0_222
    • 3、tomcat 【eg:Apache Tomcat/8.5.46 】
    1.2.2、在容器内部执行命令

    格式:docker exec [-it] 容器id

    exec 在对应容器中执行命令
    -it 采用交互方式执行命令

    如果你想进入一个容器,在容器内部进行后续的操作:docker exec -it 容器ID /bin/bash

    ps: /bin/bash :开启一个接收后续命令的终端

    demo:
    获取容器ID:docker ps
    进入容器内部:docker exec -it 45ce1a4ba159 /bin/bash
    可执行的linux命令有许多,eg:
    查看操作系统版本:cat /proc/version
    查看jdk版本:java -version
    退出容器,回到宿主机:exit

    在宿主机,查看linux 镜像和容器默认存放路径:/var/lib/镜像名
    cd /var/lib/docker
    可以看到,镜像存放在image路径下,容器存放在containers路径下

    1.3、容器生命周期

    想多了解一些的小伙伴可以看看这块,非运维小伙伴不做重点掌握:

    图中4个椭圆:stopped,running ,pause ,deleted 为容器的4个状态
    箭头上的文本均为命令,熟悉这些命令,可以有效协助运维小伙伴排查问题。
    在这里插入图片描述

    二、Dockerfile构建镜像

    1、docker是通过Dockerfile构建镜像的,Dockerfile用来做镜像描述,是一个包含用于 组合镜像命令 的可执行脚本,是一个无后缀的文件
    2、docker通过读取Dockerfile中的指令按步自动生成镜像
    3、构建镜像

    docker build -t 机构/镜像名<:tags> Dockerfile目录(
    可以是绝对路径也可以是相对路径)

    1、demo-Dockerfile自动部署Tomcat 应用

    构建一个自定义镜像,在原有tomcat安装完基础上自动将名为docker-web的应用发布到镜像中,任何拿到自定义镜像中之要执行run就可以访问docker-web应用

    STEP1 、Dockerfile内容:

    红色字体部分即为Dockerfile内容,

    tips:此文件无后缀哈

    • #设置基准镜像
      FROM tomcat:latest
    • #本镜像由哪个人/机构维护。没有执行功能,只是一个说明性信息
      MAINTAINER wq.com
    • #切换工作目录。 webapps不存在则创建,参看web容器内部文件环境看,默认 /usr/local/tomcat ,而所有web应用都放在webapps目录下WORKDIR
      /usr/local/tomcat/webapps
    • #ADD表示复制。将镜像文件复制到镜像指定目录下。docker-web:指dockerfile同级目录下的文件夹,./docker-web:指webapps目录下的文件,若此目录不存在则创建;
      ADD docker-web ./docker-web

    STEP2、新建一个web应用first-dockerfile(小白可),进行构建

    本地新建文件夹first-dockerfile,在里面创建文件夹docker-web,然后进入,创建index.html ,编辑内容:

    docker首页


    在文件夹下,创建Dockerfile,不带后缀,将上面Dockerfile内容拷贝到本文件

    在/usr下创建images 文件夹,用来存放镜像,上传first-dockerfile文件夹

    文件层级:
    在这里插入图片描述

    执行构建命令:
    切换到/usr/image/first-dockerfile/目录下,【点 表示当前目录,即/usr/image/first-dockerfile/】,执行命令:
    docker build -t wq.com/mywebapp:1.0.0 .

    执行docker images 可以看到刚才的应用

    STEP3、在命令行执行如下命令

    启动容器:docker run -p -d 8001:8080 wq.com/mywebapp:1.0.0
    在浏览器访问 宿主机IP:8001/docker-web/index.html

    可查看正在运行的容器:docker ps
    进入到容器内部:docker exec -it 容器ID /bin/bash
    直接进入到 /usr/local/tomcat/webapps 目录下,可以看到有docker-web目录文件夹

    2、部署redis镜像

    • 拉取redis镜像:docker pull redis

    • 查看镜像是否构建:
      docker images

    • 启动容器:
      docker run -p 6000:6379 -d redis

    • 查看运行的容器
      docker ps

    • 查看端口6000是否被监听,做了宿主机和容器内部的端口映netstat tulpn

    • 进入redis容器内部:
      docker exec -it 容器ID /bin/bash

    • 查看容器元数据:docker inspect 容器ID

    • 查看容器日志,后期构建自己的应用,如果报错可以通过此命令查看报错情况:docker logs

    监控容器内部进程状态
    docker topdocker stats 可以看到是每个docker容器进程的资源占用情况,根据输出的容器ID,查对应应用:docker ps

    • 可以在容器内部执行:
      redis-cli
      exit
  • 相关阅读:
    数据结构(11)图的遍历,DFS、BFS的JAVA实现
    华为智慧屏 招一招新玩法,手机操控智慧屏,视频搜索,播放控制,截图分享轻松搞定
    OpenGL、Open3D常用代码片段(C++, python)【更新中】
    AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes解决方法
    vue-cli + vue3 项目 ios 苹果手机白屏问题
    【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层
    聊聊vue的nextTick方法
    并查集讲解
    python安装第三方包的几种方式
    2013年第四届丘成桐大学生数学竞赛获奖名单
  • 原文地址:https://blog.csdn.net/qq_17033579/article/details/133249048