Docker常见用法

Ⅰ. 帮助启动类命令

启动 docker

systemctl start docker

停止 docker

systemctl stop 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.com 上查找。

  • 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 stop 容器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 top 容器ID或者容器名

查看容器内部细节

docker inspect 容器ID或者容器名

进入正在运行的容器

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

docker attach 容器ID或容器名

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

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

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

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

容器->主机

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

主机->容器

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

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

导入和导出容器

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

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

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

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

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

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

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

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

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

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

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

docker login --username=XXXXXX registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/incipe/test:[镜像版本号]
docker push registry.cn-shenzhen.aliyuncs.com/incipe/test:[镜像版本号]

Ⅴ. 容器数据卷

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

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

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

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

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

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

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

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

数据同步规则如下:

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

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

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

Ⅵ. Dockerfile

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

Dockerfile基础知识
  1. 每个保留字都必须为大写字母,并且后面至少要跟一个参数
  2. 指令从上到下,顺序执行
  3. # 表示注释
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交
Docker执行Dockerfile的大致流程
  1. docker 从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似 docker commit 的操作提交一个新的镜像层
  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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值