docker create_[水文] Docker 入门:状态机

这篇文章是我看书的一点笔记,内容很简单,并且不会介绍任何 docker 的具体实现。本文只介绍 docker 的各种状态,并希望结合这些状态让读者能够理解而不是揣测 docker 的命令。

Review: Docker State Machine

通过 docker --help 和查文档来操纵 docker 是肯定行之有效的, 背 api 听上去也不是一个很明智的选项,但是想必对这个状态机有一定了解能够有助于你不执行一些错误的指令,比如对某个 running 中的 container rmi 或者 rm, prune container 觉得万事大吉了之类的。

本文会介绍:docker 的状态机和使用入门。

本文不会介绍:如何高效使用 docker, docker 的 best practice, dockerfile 相关的内容,docker 的原理

98f324b6d17b1270148df644201d6e29.png

ced11a5b9632e320cc91297a3519aa90.png
docker run

image -> container

docker stop/start/restart

container 状态更新

docker rm/rmi
  • docker rm 针对 container 而言,如果 running 的你可能需要 --force
  • https://docs.docker.com/engine/reference/commandline/rmi/ docker rmi 针对 image 而言
docker create
  • 类似 build / create

无关状态机的操作

docker attach

连接到正在运行的 容器,直接 stdio

注意上面是 stdio, 其实我觉得你可能还想要下面的:

docker  exec -it container_name /bin/bash

这个我觉得也很清晰

docker inspect

查看内部信息

docker ps

查看容器

docker events # 查看系统日志
docker history # 对 image 查看历史版本的命令
docker logs # 运行日志

如果你想 start 的 时候限制 docker container 的资源,可以看看下面:

Runtime options with Memory, CPUs, and GPUs​docs.docker.com
8bc594138fe829bb50d8cac63761ec24.png

sample

我们试着做一个主从备份的 redis:

docker run --name redis-master redis
docker run --name redis-slave1 --link redis-master:master redis
docker run --name redis-slave2 --link redis-master:master redis

然后 docker ps

➜  ~ docker container ls     
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
cfebd23b135a        redis               "docker-entrypoint.s…"   2 minutes ago       Up 14 seconds       6379/tcp            redis-slave2
2190da08125a        redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        6379/tcp            redis-slave1
61cfd85bc0a8        redis               "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        6379/tcp            redis-master

可以看到:

➜  ~ docker inspect -f "{{ .Mounts }}" 2190
[{volume e5a9586f14dc682c4496a062792166fc6c0a11b7189c45d8d77126ac2d76cce5 /var/lib/docker/volumes/e5a9586f14dc682c4496a062792166fc6c0a11b7189c45d8d77126ac2d76cce5/_data /data local  true }]

这个时候需要手动打到 redis-slave1 上去查看,如果你查看 /etc/hosts :

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	master 61cfd85bc0a8 redis-master
172.17.0.3	2190da08125a

这个时候,如果没有挂载 Volume 的话,我们大概是需要手动去复制到这个地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值