容器化技术介绍
介绍容器化之前,我们得先知道,为什么会出现容器化,容器化之前都经历了什么
物理机时代
- 部署非常慢
- 成功很高
- 浪费资源
- 难于扩展与迁移
- 受制于硬件
虚拟化时代
在同一个物理机上安装多个虚拟机,每个虚拟机安装操作系统和应用,虚拟机之间物理资源互相隔离
- 多部署
- 资源池
- 资源隔离
- 很容易扩展
- VM需要安装操作系统
容器化时代
在虚拟化的基础上**,容器做到应用层面的隔离**,共享底层的资源,容器内的操作系统最下小话,容器化技术比虚拟机更灵活,更小巧
容器化技术应用场景
- 标准化的迁移方式
- 统一的参数配置
- 自动化部署
- 应用集群监控
Docker是容器化平台
Docker是提供应用打包,部署,运行应用程序的容器化平台。
基本概念
镜像
镜像是文件,是只读的,提供了运行程序的完整的软硬件资源,是应用程序的“集装箱”
容器
是镜像的实例,由Docker负责创建,容器之间彼此隔离
Docker 常用命令
docker pull 镜像名 <:tags>
从远程仓库抽取镜像,tags指定版本,默认是latest,即最新的镜像
docker push 拥有者/镜像名:版本(latest)
可以使用镜像的 push 命令来发布
docker tag 镜像名:版本号 拥有者/镜像名
可以使用命令 tag 来修改镜像的标签为用户名/镜像名格式
docker images / docker image ls
查看本地镜像
docker image inspect 镜像id/ 镜像名
查看镜像的配置信息
docker create
只创建容器,不启动容器
docker run 镜像名<:tags>
创建容器启动应用
docker ps/ docker container ls
查看正在运行中的镜像
docker container kill 容器id
杀死正在运行中的容器
docker rm <-f> 容器id
删除指定容器id的容器,-f参数会强制删除正在运行中的容器
docker rmi <-f> 镜像名:<:tags>
删除指定镜像,-f参数会强制删除存在对应镜像的容器的镜像
容器内部结构
以tomcat容器为例,从上层到下层依次为 Apache Tomcat/8.5.46、Jdk(1.8.0_222)、Linux(Red Hat 4.8.5-28)
容器中的命令
docker exec [it] 容器id /bin/bash
exec :在对应容器中执行命令
-it :采用交互方式执行命令
-d:守护进程的方式执行
-p:为物理机和容器创建端口映射 ,像-p 8000:8080
/bin/bash:开启一个接受后续命令的终端
容器的生命周期
容器的生命周期可以看成由容器事件和容器状态构成的关系图
容器的事件:
create/start/restart/die/kill/pause/unpause/destroy/oom
注意:kill和stop都会使容器进入stopped状态,但是kill会杀死进程,stop只是停止。start/restart处于stopped状态的容器,通过kill命令杀死的进程,会重新创建新的进程,而stop的容器不会创建新的进程
容器的状态:
running/stopped/paused/deleted
关系
running:start/restart/unpause
paused:pause
stopped: create/kill/stop/restart
deleted:destroy
Dockerfile 构建镜像
- Dockerfile是一个包含用于组合镜像的命令的文本文档
- Docker通过读取Dockerfile中的指令按步自动生成镜像
- docker build -t 机构/镜像名<:tags> Dockerfile目录
Dockerfile构建镜像
1.创建Dockerfile文件
四个关键词
- FROM tomcat:latest
- MAINTAINER xxx.com
- WORKDIR /user/local/tomcat/webapps
- ADD 第一个文件目录 第二个文件目录
镜像分层
控制台根据Dockerfile打印出的step1, step2,step3…步骤,每一个步骤都会产生一个临时的镜像,如果修改了Dockerfile的step4步骤,那么会使用step3产生的临时镜像。最大的好处是可以共享资源
Dockerfile 基础命令
FROM 基于基准镜像
- FROM centos # 基于centos:latest制作基准镜像
- FROM scratch # 不依赖任何基准镜像base image
- FROM tomcat<:tags>
LABEL & MAINTAINER 说明信息
MAINTAINER ANDY # 机构或者个人
LABEL version = “1.0” # 方便约阅读
LABEL description = “ANDY的描述标签” # 方便约阅读
WORKDIR 设置工作目录
WORKDIR /usr/local # 进入 /usr/local 目录
WORKDIR /usr/local/newdir # /usr/local/newdir不存在的情况,会自动创建
ADD & COPY 复制文件(基本一致,ADD多了一个添加远程文件的功能)
ADD xxx / # 将xxx复制到根路径
ADD test.tar.gz / # 添加根目录并解压
ENV 设置环境常量
ENV JAVA_HOME /usr/local/openjdk8
RUN ${JAVA_HOME}/bin/java -jar test.jar
Dockerfile执行指令
不同的执行时机
RUN
在构建镜像的过程中,对镜像内部的资源进行调整
ENTRYPOINT
在镜像创建后,在容器创建的过程中执行命令
CMD
在镜像创建后,在容器创建的过程中执行命令
具体使用
RUN构建镜像时使用
RUN yum install -y vim # Shell命令格式,使用Shell执行时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell, 回到当前shell
RUN [“yum”, “install”,“-y”,“vim”] # Exec命令格式(推荐),使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变。执行完毕,直接退出,并不胡退回之前的进程环境。
ENTRYPOINT启动命令
ENTERPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTERPOINT会被执行(一定会被执行)
CMD默认命令
CMD 用于设置默认执行的命令, 解释下为什么叫默认命令,如果命令 docker run 容器名 ls, 这里的ls会代替cmd命令执行
如Dockerfile中出现多个CMD,则只有最后一个被执行文章来源:https://www.toymoban.com/news/detail-436860.html
如容器启动时附件指令,则CMD被忽略文章来源地址https://www.toymoban.com/news/detail-436860.html
到了这里,关于Docker由浅入深(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!