docker 入门教程(一):基本用法
凌晨九点 Lv2

Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、更能高效地利用服务器。

本文基于docker的官方文档,对使用过程中的一些基本使用规则做一个记录。 并且将以一个简单的 C 程序为例,构建一个可运行镜像

一、基本模型

和其他教程一样,作为基本用法的篇章,我不会对其具体原理有过多的阐述。

下图是从docker官网找到的架构图image

作为入门用户,需要理解的概念是 镜像容器

  • 镜像为正在运行的容器提供使用隔离的文件系统。这个独立的文件系统由映像提供,并且映像必须包含运行应用程序所需的所有内容——所有依赖项、配置、脚本、二进制文件等。映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。
  • 容器是在主机上运行的沙盒进程,它与在该主机上运行的所有其他进程隔离。

其实可以将其大致理解为类和对象的关系,镜像相当于为当前的环境构建的一个类,而生成的容器相当于为类构建的对象。只不过这个类实际上是对系统环境的虚拟化。

二、通过 Dockerfile 构建镜像

首先有一个简单的项目结构如下:

1
2
3
hello_docker/
├── main.c
└── Makefile

其中main.c如下

1
2
3
4
5
#include <stdio.h>

int main() {
printf("Hello Docker");
}

Makefile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
CC=gcc
CFLAGS=-Wall

all: main

main: main.o
$(CC) $(CFLAGS) -o main main.o

main.o: main.c
$(CC) $(CFLAGS) -c main.c

clean:
rm -f main main.o

这是添加一个文件为Dockerfile

1
2
3
4
5
FROM ubuntu:20.04
WORKDIR /app
COPY . .
RUN apt-get update && apt-get install -y gcc
CMD ["make&&./main"]

代表我们构建镜像的方式,是以ubuntu20.04 作为基础,将目录复制到镜像的文件中,同时在其中更新软件包下载gcc编译器,并执行程序。

这是在当前目录下输入:

1
docker build -t hello-docker .

docker服务会按照Dockerfile的描述执行构建镜像,其中 -t 代表为镜像打tag。

然后根据镜像构建容器

1
docker run hello-docker

我们将看到程序在docker中执行。