Docker小记

作者: 知道的太少 | 来源:发表于2020-11-11 23:57 被阅读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行。

相关文章

  • docker运行python3.6+flask小记

    docker运行python3.6+flask小记 docker新手。 目的:开发运行多个web api项目的时候...

  • docker 小记

    启动容器 容器后台运行 Ctrl + p + q 进入docker容器 docker exec -it 775c7...

  • Docker小记

    本文首发:http://m0nkee.github.io/2015/11/30/about-docker/ Doc...

  • docker 小记

    docker输出镜像的两种方法: docker导入镜像的方法: 不要使用 export /import参数 其他常...

  • docker 小记

    今个,有关项目涉及到了docker,发现环境配置不是一般的方便呀。 合计反正等docker pull 环境,开个贴...

  • Docker小记

    Docker概览 运维视角 在安装docker时,会涉及两个主要组件:docker客户端和docker daemo...

  • docker使用小记

    0. 目的 创建一个包含elasticsearch和python3的Docker环境 1.安装Docker并启动服...

  • docker 使用小记

    本地开发很少用到 docker, 但部署到服务器的都是用 docker 的方式,但基本都是运维在管理本地跑跑镜像,...

  • Centos7离线安装Docker小记

    Centos7离线安装Docker小记 将Centos7的iso镜像包上传到服务器,挂载镜像,制作yum源mkdi...

  • Docker构建镜像小记

    #构建镜像: ##1.建立Git仓库 将应用代码拷入 ##2.建立一个名为Dockerfile的文件 内容为下: ...

网友评论

    本文标题:Docker小记

    本文链接:https://www.haomeiwen.com/subject/tfvsbktx.html