走近docker——ubuntu server 18.04上初体验

一、安装

在ubuntu 18.04上安装docker非常简单,运行sudo snap install docker即可。

二、核心组件

1. docker engine: 运行在runtime(runc)之上,包括daemon和cli。

daemon用systemctl来管理(如: systemctl start docker.service),平时在终端输入的docker指令属于cli。

 由于是用snap安装的,所以需要通过systemctl status snap.docker.dockerd.service来查看daemon的状态。

cli指令:

docker pull: 从registry下载镜像(image)。

docker run: 通过镜像启动容器(container),如果本地没有镜像则先下载。

docker ps / docker container ls: 两者均是显示正在运行的容器。

docker images: 显示本地镜像。

2. docker image: 只读模板。

3. docker container: image的运行实例。

4. registry: 存放image的仓库。

 三、理解image镜像

从以上的信息判断,docker cli指令可以在使用时查看手册学习,先格物docker image对于致知docker有很大的帮助。

1. 使用最小的hello-world镜像运行容器

docker run hello-world

可以看到会输出Hello from Docker!...的信息

2. 学习dockerfile

由于image是通过dockerfile创建的,我们先看一下linux中hello-world的dockerfile。(在https://hub.docker.com/_/hello-world/可以找到链接)

PS: URL地址中的nanoserver是windows上的。

FROM scratch
COPY hello /
CMD ["/hello"]

1) FROM scratch

此镜像从零开始构建。

2) COPY hello /

将文件hello复制到镜像的根目录。

3) CMD ["/hello"]

容器启动时,执行/hello。

从零开始构建镜像达到发布程序的目的,对于现在的我来说无法想象。

我希望有一个基本的操作系统环境,在此之上安装配置一些软件,打包一些库和发布程序即可。这种镜像一般被称作base镜像。

四、base镜像

1. base镜像含义

1)不依赖其他镜像,从scratch构建;2)其他镜像可以以之为基础进行扩展。

一般能称作base镜像的通常都是各种Linux发行版的镜像,如:ubuntu、debian、centos等。

2. rootfs

官方发行的base镜像只有几十M到几百M,因为对于base镜像来说底层可以直接用Host的kernel,自己只需提供rootfs即可。

centos7的dockerfile:

FROM scratch
ADD centos-7-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20180804"

CMD ["/bin/bash"]

第二行ADD指令会自动解压。centos-7-docker.tar.xz中包含/dev、/proc、/bin等目录。

LABEL用于给镜像添加信息,使用docker inspect可以查看这些相关信息。

3. kernel

base镜像只是在用户空间与发行版一致,kernel版本与发行版不同。

通过base镜像启动容器后,容器使用kernel为Host的kernel。所以若对kernel版本有要求,则不建议使用docker。

猜你喜欢

转载自www.cnblogs.com/xiaochuizi/p/9483630.html