Docker由浅入深(一)

容器化技术介绍

介绍容器化之前,我们得先知道,为什么会出现容器化,容器化之前都经历了什么

物理机时代
  • 部署非常慢
  • 成功很高
  • 浪费资源
  • 难于扩展与迁移
  • 受制于硬件
虚拟化时代

在同一个物理机上安装多个虚拟机,每个虚拟机安装操作系统和应用,虚拟机之间物理资源互相隔离

  • 多部署
  • 资源池
  • 资源隔离
  • 很容易扩展
  • 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,则只有最后一个被执行

如容器启动时附件指令,则CMD被忽略

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值