2019-03-25 | Docker | UNLOCK

docker 简单入门-初识Container

话不多说半句多,直接上。
什么是Container ?

  1. container是通过image创建
  2. container的本质是在image(image本身不可读写)的最上层建立了一个layer(可读写的),这个和Java中类与实例的关系比较像
  3. image负责存储和分发,container负责运行app

25f06b6df9519bbfbcda00bd46cd185f

我们来用image 来创建一个 container
运行

1
docker run hello-world

c88262104eb28e30468ed99e64664417
因为我本地没有 hello-world这个镜像所以 它回去 dockerhub 上拉取官方的镜像,我们能看到它打印出了 hello from docker
然后我们运行

1
docker container ls

看第二张图,我们发现 运行完成后没有然后运行记录,这是因为 它已经运行完了,自动退出了,
然后我们运行

1
docker container ls -a

就能看到 它已经退出三分钟了。
3f34565bc628b62c2c4f71364022af70

那么有什么办法 让它不停止运行吗?

答案是 有的

1
docker run -it ubuntu

ps:

1
docker run -it -d ubuntu

-d 参数可以 让程序以 后台方式运行
这里 -it的意思 是 以交互式运行的方式 去运行这个镜像。
运行完毕后我们发现 我们进入了 ubuntu容器内部。ps:输入exit 回车 退出容器
104a8c361aaa58a479cbf4a54fe21b80

大家可以执行,查看详细的命令说明

1
docker run --help

983eb8123fb31d888d0bc008099f74e6

然后我们输入

1
docker container ls -a(查询所有)

可以看到 之前我运行过的容器的历史
那么 我们怎么把它删除掉呢?

1
docker rm(rmi 删除image rm默认删除容器) xxx(容器id)

但是,这样只能一个个删除,有没有简单的方式呢?
程序员当然用代码解决

1
docker container ls qa

会查询出所有容器的 id
然后我门运行

1
2
docker rm $(docker container ls -qa)
就能一次性删除所有的 容器了

947b4bd346cecf534ea579bf097d8821

那么我还有个问题,这样一下子把所有容器都删除了,万一我不想删除所有 只想删除其中几个呢?
也是有办法的,

1
docker container ls -f "status=exited"

查询出所有已经退出的容器 通过 -f 参数过滤
然后加上 -qa 参数 可以查询出 所有退出容器的id

1
docker container ls -f "status=exited" -qa

运行下面的命令 即可按照条件删除

1
docker rm $(docker container ls -f "status=exited" -qa)

0156e857efc47f97692110788e814a9d

评论加载中