docker学习Docker

Docker小记

2020-11-11  本文已影响0人  知道的太少

Docker概览

运维视角

在安装docker时,会涉及两个主要组件:docker客户端和docker daemon(docker引擎或docker服务端)。默认情况下,客户端与daemon通过套接字通信(/var/run/docker.rock)。由于docker命令需要root权限,所以可以将用户添加到安装docker时自动创建的docker组里:sudo usermod -g docker [username]

镜像

可以将docker镜像粗略理解为一个包含os文件系统和应用的对象。
查看镜像:docker image ls
拉取镜像:docker pull ubuntu:latest
启动容器:docker run -it ubuntu:latest /bin/bash-it表示开启容器的交互模式,将当前Shell连接到容器终端。/bin/bash表示用户想在docker里运行bash进程。ctrl-PQ组合键可以在推出容器的同时还保持容器的运行。
查看运行中的容器:docker container ls
查看所有容器,包括已停止的:docker container ls -a
连接到运行中的容器:docker container exec -it mycontainer /bin/bash

开发视角

从开发者的视角来看,运行的容器就是应用进程,一个属于特殊命名空间的应用进程。

构建镜像
将应用容器化,应用文件目录如下: 应用文件.PNG

可以看出在项目文件目录里有一个Dockerfile的文件,内容是:

FROM alpine
LABEL maintainer="nigelpoulton@hotmail.com"
RUN apk add --update nodejs nodejs-npm
COPY . /src
WORKDIR /src
RUN npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]

跳转到项目目录里,然后根据Dockerfile构建名为test:latest的镜像:docker image build -t test:latest
启动容器:docker container run -d --name web1 --publish 8080:8080 test:latest

Docker引擎

Docker引擎采用的是模块化设计,其组件是可以替换的。 Docker引擎架构.PNG

daemon的功能主要有镜像管理、镜像构建、与Docker client的交互、身份验证、安全特性、卷、核心网络以及编排。
runc是一个命令行工具,它只有一个作用:创建容器。
shim是一个实现容器与daemon解耦的工具,containerd每启动一个容器都会fork一个runc,不过一旦容器启动完毕,runc就会退出,一旦runc退出,对应的shim进程就会成为容器的父进程,其主要职责是保持STDIN和STDOUT流是开启状态,避免daemon重启时导致容器关闭,以及将容器的退出状态返回给daemon。
containerd是一个单独的守护进程,它的主要任务是容器的生命周期的管理——start|stop|pause|rm...
containerd还可完成一些诸如push和pull镜像的操作,但这些操作都是模块化可选的。
上面的daemon、containerd、shim、runc在Linux系统中均是以二进制文件形式存在,在宿主机通过ps命令均可以查看到对应的进程。


容器的启动过程.PNG
容器启动流程图.PNG

Docker镜像

镜像其实就是多个只读层文件的叠加。而容器则是在此基础上增加了一个读写层,并且在容器运行时,会映射出一个完整的叠加后的文件目录在对应容器的merged目录下。因为容器的运行依赖它下面的只读层,所以删除镜像前必须先删除以此镜像为基础的容器(哪怕是已经停止的容器),否则无法删除该镜像。镜像文件通常位于/var/lib/docker/overlay2/
镜像通常都比较小,镜像里并不包含内核——容器都是共用宿主机的内核。所以说容器仅包含必要的操作系统(通常指的是操作系统文件和文件系统对象)
拉取镜像:docker image pull ubuntu:latest
镜像仓库服务:

镜像仓库服务.PNG
docker客户端连接的镜像仓库服务是可配置的,默认值Docker Hub。在Docker Hub里还分官方仓库和第三方仓库。
拉取镜像.PNG
从Docker Hub拉取非官方镜像.PNG
拉取其它镜像仓库服务里的镜像.PNG 一个镜像可以拥有多个标签。
docker image ls --filter dangling=false可用于过滤没有标签的镜像(如果新镜像的标签和旧镜像的标签冲突,则会移除旧镜像的标签)。docker image prune可用于移除全部的悬虚(没有标签)镜像,如果再带上-a则还会移除所有没有被任何容器使用的镜像。 Docker支持的镜像过滤.PNG
docker search [NAME]用于搜索镜像。NAME字段可以是仓库名、你的Docker ID或者非官方仓库的组织名称。docker search [NAME] --filter "is-official=true"可以只返回官方仓库。默认情况下docker search只返回25行结果,可以通过--limit来指定返回行数,最多100行。
上一篇下一篇

猜你喜欢

热点阅读