Docker的初步学习

一、应用部署的发展

1、直接在操作系统之上部署应用

这是早期应用部署的方式,这种部署方法会造成很多问题,如部署比较慢,要准备物理服务器;成本非常高,需要买物理服务器;资源的浪费,CPU和内存无法充分使用;很难迁移和扩展;可能会被限定硬件厂商等等问题。

2、虚拟化

随着技术的发展,出现了虚拟化技术,虚拟化技术,即在物理服务器上,通过hypervisor做物理资源的虚拟化,如CPU资源,内存资源,硬盘资源。之后安装虚拟机,做物理资源调度,实现了物理资源利用率的提高。

虚拟化相较于直接部署有众多优点,如很容易扩展,很容易云化,如亚马逊AWS,阿里云ECS都使用了虚拟化的技术。

虚拟化也有着局限性,因为每一个虚拟机都是完整的操作系统,要给其分配资源,当虚拟机增多时,操作系统本身消耗的资源势必会增多。

虚拟化的核心为hypervisor,一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。

3、容器

相对于虚拟机是模拟运行的一整套操作系统的话,容器就是独立运行的一个应用以及他们必须的运行环境。容器可以很明显的节省空间,例如centos本身有着数千MB,在容器中只有200多MB。虚拟机是物理层面的隔离,容器是应用层面的隔离。容器和虚拟化技术通常结合使用。

二、docker简介

Docker是一个开源的容器引擎,可以很方便的对容器进行管理,它可以同一整个开发,测试和部署的环境和流程,极大地减少运维成本。

Docker最主要的功能就是简化配置,将源代码,运行环境,配置都打包到一个容器,运行在不同的系统上,提高开发效率。docker拥有几个重要的组成部分。

Docker客户端:docker是一个典型的C/S架构的应用程序,docker客户端一般通过docker command来发起请求。

Docker daemon:它接收客户端发来的请求,并实现请求所要求的功能,同时针对请求返回相应的结果。

Docker容器:docker容器可以安装任意的软件和库文件,做任意的运行环境配置。

Docker镜像:镜像相对于容器,是个运行环境的静态体现,是一个还没有运行起来的静态环境。

Registry:是一个存放镜像的仓库,他通常被部署在互联网服务器或者云端。

三、docker的基本操作

输入docker –-help ,即可查看对于docker的一系列基本操作。

 

其中常有的有run, rm, rmi, images,info, version等命令。

其中可以通过docker command –-help 来更加详细的查询每一个指令。

四、docker镜像

通过docker images可以查看本地的所有镜像。

 

其中repository代表仓库,/前为仓库,最后为镜像名。

Tag为标签,也为版本,最新则为latest。

Image ID 是标识符,不同的镜像中image ID 一定不同,而同一个镜像不同名称Image ID是相同的。

Created 是创建时间,并不指用户拉取到本地的时间,是该镜像被作者创作的时间。

Size为镜像大小。

镜像的基本操作

通过 docker tag可以赋给任意一个镜像自定义的版本号。

通过 docker inspect 可以查看指定镜像的详细信息。

更为详细的,如果只想看指定镜像中特定的信息,可以使用 docker inspect –f {{}} 镜像名 来进行查询。

通过docker search 来在docker hub官方仓库中进行镜像查找。例如docker search golang。

其中使用docker search --help 来查看search操作的帮助。 

通过docker rmi 镜像名:版本号 来删除镜像 。加入-f可以强制删除,不论是否有容器依赖他(并不推荐,通常来说应该先删除依赖该镜像的所有容器,再来删除镜像)。当一个镜像拥有多个标签的时候,rmi指令只会删除镜像多个标签中的指定标签,并不会影响镜像文件,但当只剩下一个标签的时候,rmi指令就会删除镜像文件。

Docker commit创建镜像

通过docker commit可以在原有容器基础上创建新的镜像,如下图通过对Ubuntu容器进行修改。

 这种创建方法比较方便,因为是基于的已有镜像容器来创建。

基于dockerfile 创建镜像

基于dockerfile创建镜像是最常见的方式,dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

阿里云给出了操作示例,步骤如下。

1.准备Dockerfile内容。

新建并编辑Dockerfile文件。

vim Dockerfile

i进入编辑模式,添加以下内容。

FROM apachephp:v1
MAINTAINER DTSTACK
RUN mkdir /dtstactENTRYPOINT ping www.aliyun.com

按下键盘Esc键,输入:wq并按下enter键,保存并退出Dockerfile文件。

2.构建镜像。

docker build -t webcentos8:v1 .   
docker images        

其中docker build -t webcentos8:v1 . 中的 . 是Dockerfile文件的路径,不能忽略.

Dockerfile还有着更多的指令,一般被分为两种,配置指令和操作指令。

配置指令如下表: 

ARG

定义创建过程中使用的变量

FROM

指定创建镜像的基础镜像

LABEL

添加元数据标签信息

EXPOSE

暴露端口

ENV

指定环境变量

ENTRYPOINT

指定镜像默认入口

VOLUME

创建一个数据卷挂载点

USER

指定用户名或UID

WORKDIR

配置工作目录

ONBUILD

创建子镜像时自动执行的命令

STOPSIGNAL

指定退出的信号值

HEALTHCHECK

配置如何进行健康检查

SHELL

指定默认shell类型

操作指令如下表:

RUN

运行指令命令

CMD

启动容器时指定默认执行的命令

ADD

添加内容到镜像

COPY

复制内容到镜像

存储镜像:可以通过docker save命令将镜像导出到本地文件,导出的文件一定是.tar

载入镜像:可以通过docker load 将导出的tar文件导入到本地镜像库。

五、docker容器

基本概念

容器是docker的又一个核心概念,容器是镜像的一个运行实例。相对于镜像来说,镜像是静态的只读文件,容器是带有运行时需要的可写文件层,同时容器中的应用进程处于运行状态。

基本操作

创建容器

新建容器docker create

启动容器 docker start

新建的同时启动容器docker run

是将docker create 和docker start结合为一体。

注意,在docker create和docker run操作中如果不加-it,会导致容器没有终端入口,无法进行交互操作。

停止容器

停止容器的操作也可以细分为暂停,停止,杀死。

通过docker container pause/unpause container_id/container_name 来暂停/恢复容器。

使用docker container stop container_name/container_id 停止容器

使用docker kill 杀掉容器进程(并不会删除容器)。

删除容器

通过 docker rm 容器ID 来删除处于停止状态的容器

加入-f可以强行删除一个容器无论是否处于停止状态。

特殊的,通过docker container prune 可以删除所有处于停止状态的容器。

导入和导出容器

与镜像的导入导出类似,容器的导入导出使用import和export命令。

通过docker import 将一个.tar文件导入变成镜像

通过docker export导出容器到一个.tar文件,不需要考虑容器是不是在运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值