10分钟记住Docker常用命令

Docker是一个开源的应用容器引擎,将应用以及依赖打包到一个可移植的镜像中,然后发布到服务器上,并且可以实现虚拟化,有助于快捷高效的交付应用。

Docker三个核心概念:

l 镜像Image,应用和依赖打包生成的文件,类似安装包。

l 容器Container,镜像创建运行应用的示例。

l 仓库Repository,Docker存放镜像文件的地方。

Docker-compose定义和运行多个容器组成的应用系统,通过docker-compose.yml文件声明各个服务,作为一个整体来完成应用的创建和启动。

Swarm是Docker官方提供的集群管理工具,将Docker节点统一管理组织,以服务为调度单元,支持动态扩容等特性,和Kubernetes(k8s)类似,更加轻量。

Docker常用命令:

Docker-compose常用命令:

Swarm集群部署常用命令:

Docker常用命令

帮助命令

docker version       # 显示Docker版本信息
docker info       # 显示Docker系统信息,包括镜像数、容器数、正在运行的镜像数、暂停的镜像数、停止的镜像数等
docker --help      # 显示docker指令的信息
docker 指令 --help # 显示具体某一个docker指令的可选项

镜像命令

docker images

docker images   # 显示你本地主机上(买的服务器或安装的Linux虚拟机)所有下载的镜像信息

执行该指令之后,信息显示如上图所示,对每个标签的解释如下:

REPOSITORY    # 镜像的仓库源(也就是镜像名)
TAG            # 镜像的标签(也就是镜像的版本,如果不指定,则默认为lastest,也就是最新版)
IMAGE ID        # 镜像的ID(同一个镜像的不同版本,拥有不同的镜像ID)
CREATED         # 镜像的创建时间SIZE            # 镜像的大小

通过docker images --help可以看到该指令的一些可选项,现对几个常用的可选项做一解释:

-a        # 列出本地所有镜像
-q        # 只列出镜像的ID
--digests # 显示镜像的摘要信息

docker search

docker search 某个镜像的名称        # 搜索镜像,例如:docker search mysql

NAME           # 镜像名
DESCRIPTION    # 镜像描述
STARS          # 收藏数(类似于GitHub上的STARS,STARS越多,表示越受欢迎,下载次数越多)

如果我们只想搜索STARS不小于5000的镜像呢?我们可以采用一些过滤条件。

通过docker search --help指令来查看一些可选参数。从图中可以看出,我们可以采用-f--filter filter指令来进行过滤。

具体代码如下:

# 以下四种方式均可
docker search --filter=stars=5000 mysql
docker search --filter stars=5000 mysql
docker search -f=stars=5000 mysql
docker search -f stars=5000 mysql

由此可看出,我们筛选除了stars不小于5000的mysql镜像。

docker pull

docker pull mysql         # 下载镜像(这里如果不指定TAG,默认就是lastest最新版)

docker pull mysql:5.7

需要注意的是,这个镜像的版本一定得是DockerHub上有的版本。不然会下载

docker rmi

首先使用docker rmi --help来看一下这个命令都有哪些可选项。如下图所示:

可以看到有-f参数

# 删除镜像
docker rmi -f 镜像id                     # 删除单个镜像
docker rmi -f 镜像名:tag 镜像名:tag         # 删除多个
docker rmi -f $(docker images -qa)         # 删除全部

容器命令

有镜像才能创建容器,我们这里使用centos的镜像来测试,就是虚拟一个centos

新建容器并启动(docker run)

docker run命令就是docker createdocker start命令的组合

docker run [OPTIONS] 镜像名 [COMMAND][ARGS...]
# 常用可选参数以及解释
--name     # 给容器取一个名字
--rm       # 容器退出后,自动删除容器
-i         # 以交互模式运行容器,通常与-t同时使用,即-it
-t         # 分配一个虚拟的终端,在docker中启动bash就会有提示符,通常与-i通知使用,即-it
-d         # 在后台运行容器。等同于进入容器后按Ctrl+P+Q。所以可以docker attach回去。在后台运行的容器,只能通过网络和它交互。
-p         # 设置端口转发。-p:hostport:containerport

测试如下:

使用centos进行交互模式启动容器,在容器内执行/bin/bash命令

由上图可以看出,地址已经变成容器内部了。

列出所有运行的容器(docker ps)

docker ps [OPTIONS]

我们首先使用docker ps --help指令来看一下都有哪些可选参数:

-a      # 列出所有正在运行的容器 + 历史运行过的容器
-l      # 列出最近创建的一个容器以及该容器的信息
-n int  # 列出最近n个创建的容器以及容器的信息
-q      # 列出容器的编号
-s      # 列出容器的大小

容器退出(exit、Ctrl+P+Q)

exit            # 容器停止并退出
Ctrl + P + Q    # 容器不停止退出,也就是进入后台模式,等同于docker run的参数 -d

启动 / 停止容器(docker start、docker restart、docker stop、docker kill)

docker start (容器id or 容器名)     # 启动容器
docker restart(容器id or 容器名)    # 重启容器
docker stop (容器id or 容器名)      # 停止容器
docker kill(容器id or 容器名)       # 强制停止容器

删除容器(docker rm)

docker rm 容器id                  # 删除指定容器
docker rm -f $(docker ps -aq)
docker rm `docker ps -a -q`     # 删除所有容器(常用)
docker ps -aq | xargs docker -rm  # 删除所有容器(不常用)

常用其他命令

后台启动容器(-d)

docker run -d 容器名        # 后台启动容器
# 问题: 使用docker ps 查看,发现容器已经退出了! 
# 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。 
# 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。

查看日志(docker logs)

docker logs 容器id

docker logs有以下可选参数:

-t           # 显示时间戳
-f           # 打印最新的日志
--tail 数字  # 数字---显示多少条

查看容器中运行的进程信息(docker top)

docker top 容器id

查看容器 / 镜像的元数据(docker inspect)

docker inspect 容器id

进入正在运行的容器

docker exec

这个命令是用已经运行的容器执行命令。需要注意的是,如果容器关闭后再次运行,那么用exec命令执行的命令是不会自己再次执行的

docker exec 容器id

-d       # 让命令在后台执行
-e       # 设置环境变量
-it      # 使用交互模式进入
-u -w    # 分别设置命令运行的用户和work directory。也就是如果要改变用户或者工作目录,就是用-u或-w

docker attach

attach命令把一个后台运行的容器搞到前台来,这样就可以看到他们的输出,并且使用输入了。

docker attach 容器id

attach命令的可选参数如下:

--no-stdin        # 关闭输入
--sig-proxy       # 信号转发,默认开启,这样DMD进程就可以收到你的信号了

区别

exec是在容器中打开新的终端,并且可以启动新的进程

attach是直接进入容器启动命令的终端,不会启动新的进程

从容器内拷贝文件到主机上(docker cp)

docker cp 容器id:容器内路径 目的主机路径
例如:docker cp f261f17bb39d:/home/f1 /home