Skip to content

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状态
# systemctl status docker
# service docker status
  • docker服务控制
# systemctl restart/start/stop docker
# service docker restart/start/stop

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 容器id
  • image:tag 创建的镜像名

导出镜像

docker save > yyy.tar {{image_id}}
# 可以通过docker images查看image id,注意image id和container id是不一样的

导入镜像

docker load < yyy.tar
  • 若是只想备份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: 创建后并后台执行
docker run -itd --name=container centos:latest
  • case 2: 运行一个带命令在后台不断执行的容器
docker run -d centos:latest ping www.baidu.com
  • case 3: 运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑
docker run -d --restart=always centos:latest ping www.baidu.com
  • case 4: 指定容器和主机的目录共享
docker run -d --name=my_centos -v /home/hfs/docs/:/var/www centos:latest

后台进入

::: tip 如何进入已经运行容器的后台

在使用-d参数时,容器启动后,如何重新进入后台?

:::

  • 第一种: docker attach

使用 docker attach xxx可以进入容器, 但是使用该种方式进入容器,如果执行exit退出后,那么该容器也会停止了;

::: tip 提示

在执行docker attach之后,如果不想停止容器,可以通过快捷键ctrl + P + Q实现。

:::

  • 第二种:docker exec

使用docker exec -it xxx /bin/bash,这种方式执行exit退出,容器依旧在后台运行;

查看进程

docker top xxx

查询日志

 - 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 inspect xxx

导出容器

docker export {{container_id}} > yyy.tar
# 导出容器,无需关闭容器

导入容器

docker import yyy.tar {{image_name}}

docker网络

docker的网络的解释可以参考Docker网络-原理Docker网络详细理解-容器网络互通

docker数据卷

数据卷的挂载,查看Docker数据卷和数据管理