Docker入门---基本使用与镜像构建

Docker入门

Ubuntu 16.04

Docker 19.03.0(安装可参考官网)

1. Docker是什么?

1.1 定义

[1]中对Docker的定义如下:

Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

通俗一点的话,可以对Docker理解为:

  • 是一种虚拟化技术,与常用的虚拟机区别在于——
    • 虚拟机是虚拟化出完整的操作系统,应用在这个操作系统上运行
    • Docker是在同一个操作系统上的虚拟化,用户间相互隔离
1.2 镜像、容器、仓库
1.2.1 镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

1.2.2 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

1.2.3 仓库

Docker仓库是一个集中的存储、分发镜像的服务,用户可以上传自己构建的镜像供其他人使用,也可以下载其他人构建好的镜像。

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

1. 基本使用

安装Docker的部分网上有很多教程,此处就省略啦。

1.1 拉取镜像 pull

Docker拉取镜像的指令是pull,如下:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

在这里插入图片描述

没有指定Registry,则默认从Docker Hub获取,仓库名为ubuntu,标签为18.04,使用docker image ls可以看到已经将ubuntu:18.04的镜像拉取到本地。

在这里插入图片描述

1.2 启动镜像 run

有了镜像之后,可以使用run指令启动镜像,即运行一个镜像实例(容器)。

docker run [选项] 仓库名[:标签] [命令]

运行后,会先在本地找有没有相应的镜像,若没有,则会到Docker Hub下载(pull)到本地,再运行。

在这里插入图片描述

运行一个可交互的bash,如下,i表示交互式操作,t表示终端,可以看到进入了容器的bash终端,用完可以通过exit指令退出。

在这里插入图片描述

1.3 删除镜像 rm

删除本地镜像的命令如下,这里的<镜像>可以是镜像ID、镜像名、镜像摘要等。

docker image rm [选项] <镜像1> [<镜像2> ...]

在这里插入图片描述

此处9b9是某个镜像的ID前三位,一般输几位使得可以区分出要删除的镜像即可。

此处删除提示已被某个容器引用,可以像上面一样强制删除,也可以按照下面的步骤:

1. docker stop container_id //中止容器
2. docker rm container_id   //删除容器
3. docker image rm <镜像>   //删除镜像

2. 镜像定制commit

以下过程参考教程[1],定制一个Web服务器。

  1. 使用nginx启动一个容器,命名为myserver,端口为80,可在本地访问

在这里插入图片描述

在这里插入图片描述

  1. 现在要修改提示的文字,可以通过exec进入容器,修改html文件
yczheng@yczheng-vm ~> docker exec -it myserver bash //进入容器myserver,启动bash
root@1949d5f6a58c:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@1949d5f6a58c:/# exit
  1. 查看网页,可以看到文字已修改

[外链图片转存失败(img-khMDukih-1564126427316)(/)]

  1. 现在容器已经在原来镜像的基础上,做了一部分修改,这些修改保存在容器存储层中,如果容器关闭,原来的镜像不会有任何修改。若我们想要保存这些修改,可以通过commit命令将原镜像和容器存储层合并为一个新的镜像,如下:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

[外链图片转存失败(img-Dc1JPJgR-1564126427316)(/)]

  1. 运行新的镜像,端口映射为81,访问结果如下,可以看到是修改后的内容

[外链图片转存失败(img-bUcvuMEy-1564126427317)(/)]

使用commit可以方便地定制自己的镜像,但这种方式也会导致大量无关的东西被添加进来导致镜像臃肿,且只有操作者知道到底修改了什么,不方便之后的维护。

因此一般不会采用这种方式来制作镜像,更好的方式是使用下面的Dockerfile方式

3. 镜像定制Dockerfile

Dockerfile记录了从基础镜像一层层叠加至最终镜像的操作,使得整个过程可重复、易维护。

仍然是上面的nginx,定制过程如下:

  1. 创建一个文件夹,在文件夹中创建Dockerfile,如下:
mkdir hello-nginx
cd hello-nginx
vim Dockerfile
  1. 写入数据如下,FROM指定基础镜像,每个RUN指令表示搭建一层(不需要每个指令都用RUN,而是可以用一个RUN执行多个指令,指令间用&&连接)
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  1. 使用build指令构建镜像,如下:

在这里插入图片描述

  1. 运行新的镜像,如下:

[外链图片转存失败(img-GVObT03w-1564126427318)(/)]

关于build指令后的路径.,指定的是Docker中的上下文路径。

  • docker build 命令上下文路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎
  • Docker引擎获取这些文件后,使用这些文件构建镜像,因此所有需要的文件都必须放在上下文路径中
  • 默认会从上下文路径中找到Dockerfile

Reference

  1. Docker —— 从入门到实践
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值