docker使用

2021/12/5 6:21:09

本文主要是介绍docker使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

《Docker必知必会系列》

容器、镜像、仓库

  • 镜像就是一个只读模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
  • Docker利用容器独立运行一个或一组应用,容器是用镜像创建的运行实例。可以被启动、开始、停止、删除。
  • 可以把容器看做是一个简易版的LInux环境
  • 仓库是存放镜像的地方

镜像加速

点击这里获取阿里云docker加速URL

至于如何使用, 可以看网站的教程

常用命令

命令图片

帮助命令

  • docker version
    docker版本
  • docker info
    docker信息,如多少个镜像,内存等信息。
  • docker --help
    帮助信息

镜像命令

  • docker images
    列出本机上的镜像
    -a 列出本地所有的镜像(含中间映射层) (重要)
    -q 只显示镜像ID (重要)
    --digests 显示镜像的摘要信息
    --no-trunc 显示完整的镜像信息

  • docker search 某个XXX镜像的名字
    www.dockerhub.com搜索
    --no-trun 显示完整的镜像描述
    -s 列出收藏数不小于指定值的镜像(重要)
    --automated 只列出 automated build类型的镜像

  • docker pull 某个镜像的名字
    下载镜像
    指定tag:docker pull 镜像名字[:TAG],默认最新

  • docker rmi 某个XXX镜像的名字ID
    删除镜像
    删除单个 docker rm -f 镜像ID
    删除多个 docker rm -f 镜像名1:TAG 镜像名2:TAG
    删除全部 docker rmi -f ${docker images -qa}

  • docker history 镜像id
    列出镜像的构建历史

容器命令

有镜像才能创建容器,这是根本前提(下载一个Centos镜像演示)

运行容器docker run

创建并运行一个容器(本地没有镜像时,将从云端下载)

docker run的流程:
docker run命令

命令: docker run [OPTIONS] IMAGE [COMMAND][ARG]
参数

  • --name="容器新名字":为容器指定一个名称
  • -d:后台运行容器,并返回容器ID, 也即启动守护式容器
  • -i:以交互模式运行容器,通常与-t同时使用
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • -P:随机端口映射(大写)
  • -p:指定端口映射,有以下四种格式:
    1. ip:hostPort:containerPort
    2. ip::containerPort
    3. hostPort:containerPort
    4. containerPort

例子:

$docker run -d -p 8080:8080 tomcat

查看容器 docker ps

列出当前所有正在运行的容器

命令: docker ps [OPTIONS]
参数

  • -a:列出当前所有正在运行的容器+历史上运行过的
  • -|:显示最近一个创建的容器
  • -n n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
  • --no-trunc :不截断输出

例子:

$docker ps
CONTAINER ID   IMAGE          COMMAND                ...  PORTS                       NAMES
09b93464c2f7   nginx:latest    "nginx -g 'daemon off" ...  80/tcp, 443/tcp            mynginx
96f7f14e99ab   mysql:5.6      "docker-entrypoint.sh" ...  0.0.0.0:3306->3306/tcp       mymysql

退出容器

在容器中的两种退出方式:

  1. exit 容器停止退出
  2. ctrl+P+Q 容器不停止退出

启动/停止/重启容器

启动已经存在的容器: docker start 容器ID或容器name
重启已经存在的容器: docker restart 容器ID或容器name
停止已经存在的容器: docker stop 容器ID或容器name
强制停止容器: docker kill 容器ID或容器签名

例子:

$docker start container 
$docker stop container
$docker restart container
  • docker rm 容器ID -f
    删除已停止的容器
    一次性删除多个容器
    docker rm -f $(docker ps -a -q)
    docker ps -a -q | xargs docker rm

  • docker logs -f -t --tail 容器ID
    查看容器日志
    -t 是加入时间戳
    -f 跟随最新的日志打印
    --tail 数字显示最后多少条

  • docker top 容器ID
    查看容器内的进程

  • docker inspect 容器ID
    查看容器内部细节

  • docker exec -it 容器ID bashShell
    进入正在运行的容器并以命令行交互

    重新进入docker attach 容器ID

    • attach 直接进入容器启动命令的终端,不会启动新的进程
    • exec 实在容器中打开新的终端,并且可以穷的那个新的进程
    • docker cp 容器ID:容器内路径 目的主机路径
      从容器内拷贝文件到主机上
  • docker commit
    docker commit 提交容器副本使之称为一个新的镜像
    docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

Docker镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的有内容,包括代码、运行时、库、环境变量和配置文件

docker底层

UnionFS(联合文件系统): 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修作为一 次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a singlevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像)可以制作各种具.体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文 件系统会包含所有底层的文件和目录

加载原理

Docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
botfs(boot file system)主要包含bootloader和kernel, bootloader主 要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一-层与我们典型的Linux/Unix系统是- - -样的,包含boot加载器和内核。当boot加载完成之 后整个内核就都在内存中了,此时内存的使用权己由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system),在bootfs之 上。 包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就 是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

平时我们安装的虚拟机的Centos都是好几个G ,为什么docker这里才要200m

对于一个精简的OS, rootfs可 以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自只需要提供rootfs就行了。
由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别,因此不同的发行版可以公用bootfs。

优点

为什么 Docker纪念馆想要采用这种分层结构?

最大的一个好处就是-共享资源 比如:有多个镜像都从相同的base镜像构建而来,
那么宿主机只需在磁盘上保存一份base镜像, 同时内存中也只需加载一份base镜像,就可以为所有容器服务了。
而且镜像的每一层都可以被共享。

特点

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称为容器层,容器层之下都叫镜像层

容器数据卷

是什么

一句话:有点类似我们Redis里面的rdb和aof文件,做宿主机与容器之间的数据同步

特点:

  • 1:数据卷可在容器之间共享或重用数据
  • 2:卷中的更改可以直接生效
  • 3:数据卷中的更改不会包含在镜像的更新中
  • 4:数据卷的生命周期一直持续到没有容器使用它为止

使用

  • docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 不带权限,读写
  • docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 带权限

使用docker inspect 容器ID命令可以清楚看到绑定了哪些数据卷,以及数据卷的权限。

使用dockerfile构建内置数据卷

即不需要手动指定
VOLUME指令来给镜像添加一个或多个数据卷
可以参考Dockerfile章节
宿主机对应地址通过docker inspect命令查看。

Docker挂载主机目录Docker访问出现cannot open directory . Permission denied解决办法:在挂载目录后多加一个--privileged=true参数即可

数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器.

即多个容器之间数据共享

使用方法:

  1. 创建容器a
  2. 创建容器b,指定参数--volumes -from a
  3. 这样就实现数据同步了

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

Dockerfile

Dockerfile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本

构建三步骤

  1. 编写Dockerfile文件
  2. docker build
  3. docker run

编写Dockerfile

Dockerfile内容基础知识

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从.上到下,顺序执行
  3. 表示注释

  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

Docker执行Dockerfile的大致流程

  1. docker 从基础镜像运行一个容器
  2. 执行一-条指令并对容器作出修改
  3. 执行类似docker commit的操作提交- -个新的镜像层
  4. docker再基 于刚提交的镜像运行一一个新容器
  5. 执行dockerfile中的 下一条指令直到所有指令都执行完成

Dockerfile常用指令

https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

  1. FROM
    基础镜像,当前新镜像基于哪个镜像
  2. MAINTAINER
    镜像维护者的姓名和邮箱地址
  3. RUN
    容器构建时需要运行的命令
  4. EXPOSE
    当前容器对外暴露的端口
  5. WORKDIR
    指定创建容器后,终端默认登录进来的工作目录
  6. ENV
    用来在构建镜像过程中设置环境变量
  7. ADD
    将宿主机目录下的文件拷贝进镜像,会自动处理URL和解压tar压缩包
  8. COPY
    类似ADD,拷贝文件和目录到镜像中,但不会自动解压
  9. VOLUME
    容器数据卷,用于数据保存和持久化工作
  10. CMD
    容器启动时执行的命令,多个时,最后一个生效
    会被docker run后面的参数替换(假如指定的话)
  11. ENTRYPOINT
    容器启动时执行的命令
    docker run后面命令会将成为ENTRYPOINT的参数,然后拼接成新的命令
  12. ONBUILD
    当构建一个被继承的Dockerfile时运行命令,父镜像被子镜像继承后父镜像的ONBUILD会被触发

部署

https://zhuanlan.zhihu.com/p/145364353

docker compose

使用步骤:

  1. 定义dockerfile
  2. 定义docker-compose.yaml
  3. 执行docker-compose up命令或docker-compose up --build

容器编排

yaml规则

3层

  1. version
    版本
  2. services
    服务配置
  3. 其它配置
    volumes
    networks
    configs

官方文档,全部配置都有



这篇关于docker使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程