本篇主要是Docker核心概念与指令。
下一篇:【Docke进阶篇】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:强制删除
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 启停、重启容器
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 :创建一个新的容器但不启动它
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(死亡)
2、docker logs : 获取容器的日志
参数:
- -f : 持续日志输出
- –since :显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail :仅列出最新N条容器日志
举例:
docker logs --since="2022-07-06" --tail=10 nginx
3、docker inspect : 获取容器/镜像的具体信息
=====
用途之保存导出容器日志:
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 :将输入内容写到文件
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