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 create
和docker 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
暂无评论
发表评论