# 查看本地所有的镜像
"""
docker images/ docker image ls

$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 5f515359c7f8 5 days ago 183 M B
nginx latest 05a60462f8ba 5 days ago 181 M B
mongo 3.2 fe9198c04d62 5 days ago 342 M B
<none> <none> 00285df0df87 5 days ago 342 M B
ubuntu 16.04 f753707788c5 4 weeks ago 127 M B
ubuntu latest f753707788c5 4 weeks ago 127 M B
ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 M B
列表包含了 仓库名 、 标签 、 镜像 ID 、 创建时间 以及 所占用的空间 。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。
因此,在上面的例子中,我们可以看到 ubuntu:16.04 和ubuntu:latest 拥有相同的 ID,因为它们对应的是同一个镜像。

"""

# 虚悬镜像
"""
上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均
为 <none> 。:
<none> <none> 00285df0df87 5 days ago 342 M
B
可以用下面的命令专门显示这类镜像:
docker image ls -f dangling=true
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker image prune
"""

# 中间层镜像
"""
为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可
能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中只会显示顶层镜像,如果
希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数,命令如下:
docker image ls -a
"""
# 列出部分镜像
"""
不加任何参数的情况下, docker image ls 会列出所有顶级镜像,但是有时候我们只希望列出
部分镜像。 docker image ls 有好几个参数可以帮助做到这个事情。

一:根据仓库名列出镜像
$ docker image ls ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB
ubuntu latest f753707788c5 4 weeks ago 127 MB
ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 MB

二:列出特定的某个镜像,也就是说指定仓库名和标签
$ docker image ls ubuntu:16.04
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB

三: docker image ls 还支持强大的过滤器参数 --filter ,或者简写 -f,比如,我们希望看到在mongo:3.2 之后建立的镜像,可以用下面的命令:
$ docker image ls -f since=mongo:3.2
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 5f515359c7f8 5 days ago 183 MB
nginx latest 05a60462f8ba 5 days ago 181 MB
想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。
"""

# 以特定格式显示
"""
默认情况下, docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些
内容。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls 把所有的虚悬镜像
的 ID 列出来,然后才可以交给 docker image rm 命令作为参数来删除指定的这些镜像,这个
时候就用到了 -q 参数。

$ docker image ls -q
5f515359c7f8
05a60462f8ba
fe9198c04d62
00285df0df87
f753707788c5
f753707788c5
1e0c3dd64ccd

下面的命令会直接列出镜像结果,并且只包含镜像ID和仓库名:
$ docker image ls --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx
fe9198c04d62: mongo
00285df0df87: <none>
f753707788c5: ubuntu
f753707788c5: ubuntu
1e0c3dd64ccd: ubuntu

或者打算以表格等距显示,并且有标题行,和默认一样,不过自己定义列:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
5f515359c7f8 redis latest
05a60462f8ba nginx latest
fe9198c04d62 mongo 3.2
00285df0df87 <none> <none>
f753707788c5 ubuntu 16.04
f753707788c5 ubuntu latest
1e0c3dd64ccd ubuntu 14.04

"""
 

# 删除一个镜像
"""
一:第一种方法:

#1, 首先列出来镜像
docker image ls
#2,然后根据 docker image rm [选项] <镜像1> [<镜像2> ...]
例如:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 3 weeks ago 196.5 MB
redis alpine 501ad78535f0 3 weeks ago 21.03 MB
#3,删除redis的可用命令如下:
docker image rm 501ad78535f0 或者 docker image rm 501(ID的前三位)

二:第二种方法
我们也可以用 镜像名 ,也就是 <仓库名>:<标签> ,来删除镜像,命令如下:。
docker image rm redis

三:第三种方法:
更精确的是使用 镜像摘要 删除镜像。
$ docker image ls --digests

REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
node slim sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 6e0c4c8e3913 3 weeks ago 214 MB

删除命令如下:
$ docker image rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228

四:用 docker image ls 命令来配合删除

比如,我们需要删除所有仓库名为 redis 的镜像:
$ docker image rm $(docker image ls -q redis)

或者删除所有在 mongo:3.2 之前的镜像:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)
# 删除所有镜像
"""
docker rmi $(docker images | grep -v RESPOSITORY | awk '{print $3}')
"""

 


# 运行一个容器
"""
sudo docker run -d --name phototools -v /home/xgp/Downloads/PhotoTools/:/home -w /home -p xgp python3 check.py
-d, --detach=false 指定容器运行于前台还是后台;
--name 指定容器名字,后续可以直接通过这个名字进行容器的管理;
-v, 给容器挂载储存卷,挂载到容器的某个目录;
-w, 指定容器的工作目录;
-p, 指定容器暴露的端口;
"""

# 关闭运行中的容器
"""
docker stop 容器的ID
"""
# 启动一个已经停止的容器
"""
docker start 容器ID
"""
# 重启一个容器
"""
docker restart 容器ID
"""
# 进入一个运行的容器
"""
docker attach 容器ID
"""
# 显示全部容器
"""
docker ps -a
"""

# 显示当前运行的容器
"""
docker ps
"""
# 构建容器
"""
docker build -t 镜像名称 . # 后面的. 指的是当前文件夹 (其实是Dockerfile存放的文件夹)
# 建立映像文件。–rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般这些临时生成的Container是不需要的
docker build --rm=true -t loen/lamp .
"""
# 删除容器
"""
docker rm 容器ID
"""
# 删除所有容器
"""
docker rm $(docker ps -a)
"""
# 杀掉一些死的容器
"""
sudo docker ps -a | grep Exited | awk '{print $1}'|xargs sudo docker rm
"""
# 杀死正在运行的容器
"""
docker kill -s KILL 容器ID
"""
# 查看某个容器的日志
"""
docker logs 容器ID
"""
# 怎么在docker某个容器中安装一些没有的模块【使用 docker commit 定制镜像】
"""
# 1,首先进入这个容器,
docker run -it -d 容器名字 /bin/bash
# 2,然后获取到运行的容器ID
docker ps -a
# 3,进入到docker中
sudo docker exec -it 容器ID bash
# 4,进行安装软件
pip install 模块名字
# 5,安装好后退出
exit/(ctrl+d)
# 6,进行提交更新的容器名字,并重新命名例:
sudo docker commit 容器ID new_name(新容器的名字)
# 7,重启docker服务即可
sudo service docker restart
"""
相当于在原有的镜像基础上 我们第一次完成了定制镜像,使用的是 docker commit 命令,手动操作给旧的镜像添 加了新的一层,形成新的镜像

# 如何开启一个Tornado Web项目:
sudo docker run -d --name phototools -v /home/xgp/Downloads/PhotoTools/:/home -w /home -p 5001:5002 -p 9962:9962 xgp python3 check.py 

其中:9962端口是check.py文件中的端口

 


参考文档:https://www.w3cschool.cn/docker/docker-nx3g2gxn.html