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

posted @ 2020-04-19 21:04  欢乐豆123  阅读(284)  评论(0编辑  收藏  举报