【Docker笔记】Docker核心概念与指令

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 【Docker笔记】Docker核心概念与指令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

本篇主要是Docker核心概念与指令。
下一篇:【Docke进阶篇】Docker网络模式与容器间通信

一、Docker理解

在这里插入图片描述

在这里插入图片描述虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

在这里插入图片描述关于Docker的起源与形象理解,看这篇非常经典的文章:Docker的形象理解

核心概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine 一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure

二、Docker命令

在这里插入图片描述

2.1 镜像相关指令

1、docker images 列出本地镜像

参数:

  • -a :列出本地所有的镜像
  • -q :只显示镜像ID
  • – -digests:显示镜像的摘要信息
  • – -no-trunc :显示完整的镜像信息

举例:
列出本地镜像中REPOSITORY为commit/llg的镜像
在这里插入图片描述

2、docker pull 仓库:tag 从镜像仓库中拉取指定镜像

参数:

  • -a:拉取所有符合的镜像

举例:
从Docker Hub下载java最新版镜像

docker pull java

3、docker rmi 镜像id或仓库:tag 删除本地某镜像

参数:

  • -f:强制删除

举例:
删除本地镜像commit/llg:v1
在这里插入图片描述

4、docker tag Image_id repository:new_tag 为镜像添加一个新的标签,将其归入某一仓库。 也可docker tag [repository:tag] repository:new_tag

举例:
使用第二种方式如下
在这里插入图片描述

5、docker history : 查看指定镜像的创建历史

参数:

  • -H:以可读的格式打印镜像大小和日期
  • – -no-trunc :显示完整的提交记录
  • -q:仅显示ID

举例:
在这里插入图片描述

6、docker save : 将指定镜像保存成 tar 归档文件

参数:

  • -o :输出到的文件

举例:
docker save -o 打包后的名字.tar 仓库名:tag
在这里插入图片描述
也可使用重定向:

docker save 仓库名:版本tag > 打包后的名字.tar

打包后的名字.tar前面可指定路径。

7、docker load : 导入使用 docker save 命令导出的镜像

参数:

  • –input , -i : 指定导入的文件,代替 STDIN
  • –quiet , -q : 精简输出信息

举例:
在这里插入图片描述
也可使用重定向:

docker load < 打包后的名字.tar

8、docker build :使用 Dockerfile 创建镜像

参数:

  • -f :指定要使用的Dockerfile路径
  • –tag, -t: 镜像的名字及标签, name:tag 格式
  • –quiet, -q :安静模式,成功后只输出镜像 ID

举例:
使用当前目录的 Dockerfile 创建镜像,标签为llg/commit:v1

docker build -t llg/commit:v1 .
注意最后的.

在这里插入图片描述

2.2 容器的生命周期相关指令

1、docker run :创建一个新的容器

参数:

  • -d: 后台运行容器,并返回容器ID
  • -i: 以交互模式运行容器,通常与 -t 同时使用
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • –name=“nginx-lb”: 为容器指定一个名称
  • –rm:退出容器以后,这个容器就被删除了,且docker rm -v,方便在临时测试使用

举例:
在这里插入图片描述

2、docker start/stop/restart 启停、重启容器

举例:
后面跟容器ID或者容器名称都可以
在这里插入图片描述

3、docker kill :杀掉一个运行中的容器

参数:

  • -s :向容器发送一个信号

举例:

docker kill -s KILL nginx
docker kill nginx

4、docker rm :删除一个或多个容器

参数:

  • -f :通过 SIGKILL 信号强制删除一个运行中的容器
  • -l :移除容器间的网络连接,而非容器本身
  • -v :删除容器和与容器关联的卷

举例:
在这里插入图片描述
更多Docker清理指令进阶点这里

5、docker pause/unpause:暂停、恢复容器中的所有进程

举例:

#暂停容器llg提供的服务:
docker pause llg
#恢复:
docker unpause llg

6、docker create :创建一个新的容器但不启动它

举例:
用法参数同docker run
在这里插入图片描述

在这里插入图片描述

2.3 容器操作相关指令

1、docker ps :列出容器

参数:

  • -a :显示所有的容器,包括未运行的
  • -l :显示最近创建的容器
  • -n :列出最近创建的n个容器
  • -q :静默模式,只显示容器编号
  • -f :根据条件过滤显示的内容

举例:
在这里插入图片描述

输出各列含义:
CONTAINER ID: 容器 ID
IMAGE: 使用的镜像
COMMAND: 启动容器时运行的命令
CREATED: 容器的创建时间
STATUS: 容器状态
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
NAMES: 自动分配的容器名称

容器的状态有七种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

在这里插入图片描述
上图中的stopped就约等于exited
在这里插入图片描述

2、docker logs : 获取容器的日志

参数:

  • -f : 持续日志输出
  • –since :显示某个开始时间的所有日志
  • -t : 显示时间戳
  • –tail :仅列出最新N条容器日志

举例:

docker logs --since="2022-07-06" --tail=10 nginx

3、docker inspect : 获取容器/镜像的具体信息

举例:
inspect后跟容器ID或者容器NAME
在这里插入图片描述

=====
用途之保存导出容器日志:
docker inspect 容器名字或者 ID | grep -i logpath
在这里插入图片描述
拷贝这个文件就可以导出容器日志了。

4、docker exec :进入运行的容器中

参数:

  • -d :在后台运行
  • -i :即使没有附加也保持STDIN 打开
  • -t :分配一个伪终端

举例:

docker exec -it nginx /bin/bash

5、docker attach进入正在运行的容器

举例:
和exec不同的是:如果从这个容器退出,会导致容器的停止,但exec不会。
在这里插入图片描述
在这里插入图片描述

6、docker top :查看容器中运行的进程信息

举例:

for i in  `docker ps |grep Up|awk '{print $1}'`;
do echo \ &&docker top $i; 
done

7、docker events : 从服务器获取实时事件

参数:

  • -f :根据条件过滤事件

  • –since :从指定的时间戳后显示所有事件

  • –until :流水时间显示到指定的时间为止

举例:
在这里插入图片描述

8、docker wait : 阻塞运行直到容器停止,然后打印出它的退出代码

举例:
在这里插入图片描述

9、docker port: 指定的容器的端口映射

举例:

docker port nginx-service

10、docker export:保存导出容器为tar文件

参数:

  • -o :将输入内容写到文件

举例:
最后跟容器ID或者NAME
在这里插入图片描述

11、docker cp :用于容器与主机之间的数据拷贝

参数:

  • -L :保持源目标中的链接

举例:
将主机/root/test目录拷贝到容器9527f14e99ab的/root目录下

docker cp /root/test 9527f14e99a:/root/

将主机/root/test目录拷贝到容器9527f14e99ab中,并将目录重命名为/root

docker cp /root/test 9527f14e99a:/root
注意和第一个的区别

将容器9527f14e99a的/root目录拷贝到主机的/test目录中

docker cp 9527f14e99a:/root /test/

12、docker commit :从容器创建并提交一个新的镜像

参数:

  • -a:提交的镜像作者
  • -m :提交时的说明文字
  • -p :在commit时,将容器暂停

举例:
在这里插入图片描述

13、docker import : 从docker export 的归档文件中创建镜像

参数:

  • -m:提交时的说明文字

举例:
在这里插入图片描述
到此,应该疑惑于docker save和docker export的区别了:

  • docker save保存的是镜像(image),docker export保存的是容器(container);
  • docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
  • docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

在这里插入图片描述

2.4 仓库相关指令

1、docker login/logout :仓库的登录与登出

参数:

  • -u:用户名
  • -p:密码

举例:
在这里插入图片描述

2、docker search : 从Docker Hub查找镜像

参数:

  • –automated :只列出 automated build类型的镜像
  • –no-trunc :显示完整的镜像描述
  • -f <过滤条件>:列出收藏数不小于指定值的镜像

举例:
在这里插入图片描述
返回结果列含义说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思
  • AUTOMATED: 自动构建

3、docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

举例:

上传本地镜像myimage:v1到镜像仓库中:
docker push myimage:v1

4、docker info : 显示 Docker 系统信息,包括镜像和容器数

举例:
在这里插入图片描述

5、docker version :显示 Docker 版本信息

举例:
在这里插入图片描述

至此,Docker的三个核心:仓库、镜像、容器的基本指令完结。以这三个核心为基础,整理图:
在这里插入图片描述

三、Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile文件指令或说明:

  • MAINTAINER:镜像维护者的姓名或者邮箱
  • FROM:定制这个的镜像是基于 FROM 的镜像
  • RUN:构建镜像时执行的命令,格式:RUN shell指令
  • CMD:与RUN用法一样,但CMD 在docker run 时运行,RUN 是在 docker build
  • ENV:设置环境变量,后续指令中可使用。格式:ENV <key> <value>或者ENV <key1>=<value1> <key2>=<value2>
  • WORKDIR:指定工作目录,该目录必须提前创建好。格式:WORKDIR 路径a。这样路径a在每层镜像中都存在
  • EXPOSE:声明端口。docker run -P 时,会自动随机映射 EXPOSE 的端口
  • ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
  • COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
  • HEALTHCHECH:健康检查
  • LABEL:给镜像添加一些元数据信息,如LABEL author=‘llg’

举例:

FROM python:3.7-alpine
MAINTAINER llg-9527
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146188.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!