Docker常见用法

家电修理 2023-07-16 19:16www.caominkang.com电器维修

Ⅰ. 帮助启动类命令 启动 docker

systemctl start docker

停止 docker

systemctl s docker

重启 docker

systemctl restart docker

查看 docker 状态

systemctl status docker

开机启动

systemctl enable docker

查看 docker 信息

docker info

查看 docker 帮助文档

docker --help

查看 docker 命令帮助文档

docker 具体命令 --help

Ⅱ. 镜像类命令 docker images

列出本地主机上的镜像

  • REPOSITORY: 仓库镜像的仓库源
  • TAG: 镜像的标签版本号(同一仓库源可以有多个 TAG 版本,使用 REPOSITORY:TAG 来定义不同的镜像)
  • IMAGE ID: 镜像 ID
  • CREATED: 镜像创建时间
  • SIZE: 镜像大小

选项

  • -a: 列出本地所有的镜像
  • -q: 只显示镜像 ID
docker search

在 hup 服务器上寻找镜像,如果没有配置国内镜像默认就是在 hup.docker. 上查找。

  • NAME: 镜像名称
  • DESCRIPTION: 镜像说明
  • STARS: STAR 数
  • OFFICIAL: 是否是官方的
  • AUTOMATED: 是否是自动构建的

选项

  • –limit: 只列出 N 个镜像,默认 25 个
docker pull

拉取指定镜像

如果没有指定 TAG,默认就是最新版,即 docker pull ubuntu:latest

docker system df

查看镜像/容器/数据卷所占用的空间

docker rmi

删除某个镜像

删除单个docker rmi -f 镜像ID

删除多个docker rmi -f 镜像名1:TAG 镜像名2:TAG

删除全部docker rmi -f $(docker images -qa)

Ⅲ. 容器类命令 新建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

选项

  • –name=“容器的名字”
  • -d 后台运行容器并返回容器 ID,也即启动守护式容器
  • -i 以交互模式运行容器,通常跟 -t 使用
  • -t 为容器重新分配一个伪 tty(终端),通常与 -i 使用
  • -P(大写)随机端口映射
  • -p(小写)指定端口映射
列出当前所有正在运行的容器

docker ps

选项

  • -a 列出所有容器,不加 -a 只会显示正在运行的容器
  • -l 显示最近创建的容器
  • -n 显示最近 n 个创建的容器
  • -q 只显示容器 ID
退出容器

两种退出方式

  • exit 退出,容器停止
  • ctrl + p ctrl + q 退出,容器不停止
启动已经停止的容器

docker start 容器ID或者容器名

停止容器

docker s 容器ID或者容器名

强制停止容器

docker kill 容器ID或者容器名

删除已停止的容器

docker rm 容器ID或者容器名

没有停止的容器加上选项 -f 既可以删除。

一次性删除多个容器实列 docker rm -f $(docker ps -aq) 或者 docker ps -a -q | xargs docker rm

启动守护式容器(后台服务器)

docker run -d 镜像名

请注意,虽然是叫做守护容器,如果你的容器内部没有一个前台进程,即使是使用 docker run -d 运行的容器也会马上结束。

,需要将我们要运行的程序以前台进程的形式进行,如下图所示

查看容器日志

docker logs 容器ID或者容器名

查看容器内运行的进程

docker 容器ID或者容器名

查看容器内部细节

docker inspect 容器ID或者容器名

进入正在运行的容器

docker exec -it 容器ID或容器名 shell

docker attach 容器ID或容器名

attach 直接进入容器启动命令的终端,不会启动新的进程,用 exit 退出,会导致容器的停止。

exec 是在容器中打开新的终端,并且可以启动新的进程,用 exit 退出,不会导致容器的停止。

推荐用 docket exec 进入正在运行的容器。

从容器内拷贝文件到主机上

容器->主机

docker cp 容器ID或容器名:容器内路径 目的主机路径

主机->容器

docker cp 文件名 容器名:容器内路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObynC2F-1660483281740)(https://incipe.oss--shenzhen.aliyuncs./image-20220813165403516.png)]

导入和导出容器

export 导出容器的内容流作为一个 tar 归档文件[对应 import 命令]

import 从 tar 包中的内容创建一个新的文件系统再导入为镜像[对应 export 命令]

docker export 容器ID或容器名 >> 文件名.tar

cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号

Ⅳ. 构建并发布自己的镜像(非Dockerfile方式)

当在创建的容器内搭建好了一系列的环境后,怎么发布出去给别人用呢?这时就需要 docker mit 命令。

比如新创建的环境是没有 vim 编辑器的,当我们在自己的容器中装好 vim,就可以发布成新的镜像。

然后我们执行 apt-get update apt-get install vim 安装 vim。注意刚刚运行的容器需要先运行 apt-get update

如此一来我们的容器里面就有了一个 vim 编辑器,现在把其发布成一个镜像。

docker mit -m="提交的描述信息" -a="作者" 容器名或容器ID 要创建的镜像名:[标签]

把自己制作的镜像发布到阿里云容器服务器或者Docker官网(要在容器服务器网站创建命名空间和仓库)。

docker login --username=XXXXXX registry.-shenzhen.aliyuncs.
docker tag [ImageId] registry.-shenzhen.aliyuncs./incipe/test:[镜像版本号]
docker push registry.-shenzhen.aliyuncs./incipe/test:[镜像版本号]
Ⅴ. 容器数据卷

数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

注意数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)

简而言之,就是把容器内的重要数据备份长期保存到本地主机目录。

docker run -it --privileged=true -v /主机绝对路径目录:/容器内目录:[ro(read only, default is read rite)] 镜像名

然后在 docker 指定的目录下生成的文件就会被实时的同步到主机相应的目录了。

执行 docker inspect 容器名或容器ID 即可查看挂载的位置。

注意可以指定多个数据卷~

数据同步规则如下

  • docker修改,主机同步修改
  • 主机修改,docker修改
  • docker s,主机修改,docker 启动同步数据
数据卷之间的继承

docker run -it --privileged=true --volumes-from 父类 --name=容器名字 镜像

只要某个容器继承了数据卷,那么就会共享数据卷,即无论哪一方修改共享目录,都会同步,即使 docker s。

Ⅵ. Dockerfile

前文提到了,我们可以通过 docker mit 定制每一层所添加的配置,文件,每次我们添加一层时,都需要 mit 命令,会显的很麻烦,这时就需要 Dockerfile ,把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。

Dockerfile基础知识
  1. 每个保留字都必须为大写字母,并且后面至少要跟一个参数
  2. 指令从上到下,顺序执行
  3. # 表示注释
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交
Docker执行Dockerfile的大致流程
  1. docker 从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似 docker mit 的操作提交一个新的镜像层
  4. docker 再基于刚刚提交的镜像运行一个新容器
  5. 执行 dockerfile 中的下一条指令,直到所有指令都执行完成
Dockerfile保留字
  • FROM 表示当前新镜像基于哪个镜像,指定一个已经存在的镜像作为模板,第一条必须是 FROM
  • LABEL 维护镜像的作者信息
  • RUN 容器构建的时候需要运行的命令
    • 两种格式
      • shell 格式
      • exec 格式
    • RUN 实在 docker build 时运行
  • EXPOSE 当前容器对外暴露出的端口
  • WORKDIR 指定在创建容器后,终端默认登录进来的工作目录
  • USER 指定该镜像以什么样的用户去执行,如果不指定,默认是 root
  • ENV 用来构建镜像过程中设置环境变量
  • ADD 将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解 tar 包
  • COPY 类似 ADD,拷贝主机文件和目录到镜像中
  • VOLUME 上文说的数据卷
  • CMD 指定容器启动后要干的事情
    • Dockerfile 可以有多个 CMD 指令,只有一个生效,CMD 会被 docker run 之后的指令替换
    • 跟 RUN 的区别
      • RUN 是在 docker build 后执行
      • CMD 实在 docker run 后执行
  • ENTRYPOINT 容器启动时要运行的命令,类似于 CMD 命令, ENTRYPOINT 不会被 docker run 后面的指令覆盖,而且这些指令会被当作参数送给 ENTRYPOINT 指令指定的程序

更多的参考 Dockerfile reference

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by