docker 入门教程(一):基本用法

Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、更能高效地利用服务器。
本文基于docker的官方文档,对使用过程中的一些基本使用规则做一个记录。 并且将以一个简单的 C 程序为例,构建一个可运行镜像
一、基本模型
和其他教程一样,作为基本用法的篇章,我不会对其具体原理有过多的阐述。
下图是从docker官网找到的架构图
作为入门用户,需要理解的概念是 镜像 和 容器 。
- 镜像为正在运行的容器提供使用隔离的文件系统。这个独立的文件系统由映像提供,并且映像必须包含运行应用程序所需的所有内容——所有依赖项、配置、脚本、二进制文件等。映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。
- 容器是在主机上运行的沙盒进程,它与在该主机上运行的所有其他进程隔离。
其实可以将其大致理解为类和对象的关系,镜像相当于为当前的环境构建的一个类,而生成的容器相当于为类构建的对象。只不过这个类实际上是对系统环境的虚拟化。
二、通过 Dockerfile 构建镜像
首先有一个简单的项目结构如下:
1 | hello_docker/ |
其中main.c
如下
1 |
|
Makefile
如下:
1 | CC=gcc |
这是添加一个文件为Dockerfile
1 | FROM ubuntu:20.04 |
代表我们构建镜像的方式,是以ubuntu20.04 作为基础,将目录复制到镜像的文件中,同时在其中更新软件包下载gcc编译器,并执行程序。
这是在当前目录下输入:
1 | docker build -t hello-docker . |
docker服务会按照Dockerfile的描述执行构建镜像,其中 -t
代表为镜像打tag。
然后根据镜像构建容器
1 | docker run hello-docker |
我们将看到程序在docker中执行。