cheatsheet - docker¶
[[toc]]
docker架构¶
-
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
-
Docker 客户端(Client) : Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
- Docker 主机(Host) :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
-
Docker 包括三个基本概念:
-
镜像(Image) :Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container) :镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository) :仓库可看着一个代码控制中心,用来保存镜像。
docker服务¶
- 查看docker状态
- docker服务控制
docker镜像¶
基本操作¶
# 镜像列表
docker images
# 检索镜像, 从镜像仓库中检索
docker search xxx
# 下载镜像
docker pull xxx
# 删除镜像
docker rmi xxx
镜像也可以在Docker Hub上查找
关于创建镜像,有必要稍微详细一点点
# 通过容器创建镜像
docker commit -m="首次提交" -a="Yancy" dd85eb055fe8 image:tag
# 更多通过容器创建镜像的操作
tldr docker commit
# 镜像历史查询
docker history yh/centos
上面的几个参数进行说明
-m
和git的提交一样,后面跟上描述信息-a
版权声明,这个东西是我创建的,有啥问题,找我dd85eb055fe8
容器idimage:tag
创建的镜像名
导出镜像¶
导入镜像¶
- 若是只想备份images,使用save、load即可
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import
docker容器¶
基本操作¶
# 查看容器列表, 列出所有的容器, 下面命令加上`--no-trunc`可以显示完整信息
docker ps -a
# 启动容器,start后面可以跟上容器名,或者容器id
docker start xxx # (这里的xxx可以是容器名:my_centos 也可以是容器id:f57398ab22c5)
# 关闭容器
docker stop xxx
# 强制停止容器
docker kill xxx
# 重启
docker restart xxx
# 删除
docker rm xxx
# 清理停止的容器(正在运行的容器不会被删除)
docker container prune
# 删除所有的容器
docker ps -aq | xargs docker rm
docker rm -f $(docker ps -aq)
运行容器¶
- tldr docker run
- Run command in a new container from a tagged image:
docker run {{image:tag}} {{command}}
- Run command in a new container in background and display its ID:
docker run -d {{image}} {{command}}
- Run command in a one-off container in interactive mode and pseudo-TTY:
docker run --rm -it {{image}} {{command}}
- Run command in a new container with passed environment variables:
docker run -e '{{variable}}={{value}}' -e {{variable}} {{image}} {{command}}
- Run command in a new container with bind mounted volumes:
docker run -v {{/path/to/host_path}}:{{/path/to/container_path}} {{image}} {{command}}
- Run command in a new container with published ports:
docker run -p {{host_port}}:{{container_port}} {{image}} {{command}}
- Run command in a new container overwriting the entrypoint of the image:
docker run --entrypoint {{command}} {{image}}
- Run command in a new container connecting it to a network:
docker run --network {{network}} {{image}}
- case 1: 创建后并后台执行
- case 2: 运行一个带命令在后台不断执行的容器
- case 3: 运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑
- case 4: 指定容器和主机的目录共享
后台进入¶
::: tip 如何进入已经运行容器的后台
在使用-d参数时,容器启动后,如何重新进入后台?
:::
- 第一种:
docker attach
使用 docker attach xxx
可以进入容器, 但是使用该种方式进入容器,如果执行exit
退出后,那么该容器也会停止了;
::: tip 提示
在执行docker attach
之后,如果不想停止容器,可以通过快捷键ctrl + P + Q
实现。
:::
- 第二种:
docker exec
使用docker exec -it xxx /bin/bash
,这种方式执行exit
退出,容器依旧在后台运行;
查看进程¶
查询日志¶
- Print logs from a container:
docker logs {{container_name}}
- Print logs and follow them:
docker logs -f {{container_name}}
- Print last 5 lines:
docker logs {{container_name}} --tail {{5}}
- Print logs and append them with timestamps:
docker logs -t {{container_name}}
- Print logs from a certain point in time of container execution (i.e. 23m, 10s, 2013-01-02T13:23:37):
docker logs {{container_name}} --until {{time}}
- 打印最近30分钟的日志
docker logs --since 30m {{container_name}}
- 查看某时间段日志
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" {{container_name}}
- 将错误日志写入文件
docker logs -f -t --since="2018-02-18" {{container_name}} | grep error >> logs_error.txt
- 查看指定时间后的日志,只显示最后100行
docker logs -f -t --since="2018-02-08" --tail=100 {{container_name}}
文件拷贝¶
# 将当前目录的test.md文件拷贝到容器的 /tmp 目录下
docker cp test.md xxx:/tmp
# 将容器的/tmp/test.md目录拷贝到当前目录下
docker cp xxx:/tmp/test.md ./out.md
容器信息¶
导出容器¶
导入容器¶
docker网络¶
docker的网络的解释可以参考Docker网络-原理和Docker网络详细理解-容器网络互通。
docker数据卷¶
数据卷的挂载,查看Docker数据卷和数据管理。