docker的重要概念和常用命令
docker的重要概念和常用命令
一、几个重要的概念
在使用docker时,我们得先弄清楚docker的几个重要的概念
1)Docker生态
Docker生态就像 iPhone 的生态一样,Docker仓库相当于 IPhone 的 App Store,docker自身程序相当于IOS系统。
2)Registry和Repository
Registry:注册服务器,用于管理镜像仓库,起到的是服务器的作用。
Repository:镜像仓库,用于存储具体的docker镜像,起到的是仓库存储作用。
3)镜像与容器
镜像(image):指的是以分层的、可以被 LXC/libcontainer 理解的文件存储格式。Docker的应用都是以这种格式发布到Docker仓库中,供大家使用。
可以理解为打包后的环境和应用。
容器(container):把应用镜像从 Docker 仓库下载到本地机器上,以镜像为模板,在一个容器类虚拟机中把这个应用启动,这个虚拟机叫做容器。可以理解为相当于在windows上运行了一个程序。
可以先简单的理解,仓库中的应用都以镜像存在,从仓库中拉取镜像到本地的,叫容器。这里可以参考文章《十分钟明白什么是容器技术》,对容器做进一步的认识和了解。
二、docker常用命令
1、镜像的操作
Build、Pull、Run这三个操作贯穿整个镜像的操作,后面会举栗子讲到
1)列出本地所有的镜像
docker images 或者 docker image ls(新版docker命令)
2)查看镜像
从Docker Hub查找镜像
docker search mysql(镜像名称)
3)下载镜像
docker pull mysql:5.7
说明:这里的5.7是指TAG版本号,可以到hub.docker.com上面查看。
当不使用Tag的时候,默认会使用latest进行标记。
4)获取容器/镜像的元数据
docker image inspect mysql:5.7
5)删除镜像
docker rmi -f mysql:5.7
rmi:删除本地一个或多少镜像 -f :强制删除
2、容器的操作
1)创建一个新的容器并运行
docker run --name -d(后台运行) -p(端口映射:宿主机端口对应容器开放的端口) -e(配置环境变量) MYSQL_ROOT_PASSWORD=1234 mysql:5.7
2)在运行的容器中执行命令
-i 交互模式
-t分配一个伪终端
-it在容器中开启一个交互模式的终端
docker container exec -it mysql /bin/bash
可能出现的问题:
执行以下命令
docker exec -it d3a sh
结果:Error response from daemon: Multiple IDs found with provided prefix: d3ad34c8c943fd1c2f81380f74059e567d78c6d8fe62a02dc74c14c5cc0d2727
原因分析:通过镜像名或者镜像ID传递到 docker inspect 或者其他类似的命令(需要指定Docker对象的命令)里,Docker 都会根据传入的内容去寻找与之匹配的内容,只要传入的内容能够找出唯一的镜像,Docker 就会对这个镜像执行给定的操作。如果找不到唯一的镜像,那么操作不会进行,Docker 也会显示错误。
也就是说,只要传入能够唯一识别镜像或容器的信息,即使它短到只有1个字符,Docker 都是可以处理的。
解决办法:将d3a换成更长一点的别名再试下或者使用镜像别名,只要通过这个名字能够docker能够唯一识别就行。
3)列出容器
docker ps 列出当前正常执行的容器
dockers ps -a 列出所有镜像包含退出,停止,异常的容器
docker ps -l 列出最新创建的容器包括所有状态
4)强制删除容器
docker rm -f mysql
或者 docker rm 1153a1996288(容器ID:container id)
5)容器的开启和停止
docker stop 容器ID : 来停止一个正在运行中的容器
docker start 容器ID : 可以启动一个停止状态的容器。
docker restart 容器ID : 先会停止该容器,然后重新启动该容器。
6)批量删除Docker中已经停止的容器
方法一:
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)
方法二:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune
7) docker inspect [OPTIONS] NAME|ID [NAME|ID...] : 获取容器/镜像的元数据
这个命令非常有用,在分析容器的状态、网络、等详细信息的时候很有帮助。如下图:
参考链接:https://zhuanlan.zhihu.com/p/39155341