本文已参与「新人创作礼」活动,一起开启掘金创作之路。
帮助命令
docker --help 帮助命令
docker version 查看当前 docker 版本信息
docker info 查看当前 docker 运行状态等信息.
info 展示信息:
[root@localhost ~]# docker info
Containers: 5 #容器数量
Running: 1 #运行中的容器数量
Paused: 0
Stopped: 4
Images: 2 #镜像数量
Server Version: 18.06.1-ce
...
镜像命令
列表/查询
docker images 列出本机上的所有镜像
选项说明:
- REPOSITORY: 表示镜像的仓库源.
- TAG:镜像的标签. 同一仓库源可以有多个 TAG, 代表这个仓库源的不同个版本, 使用 REPOSITORY:TAG 来定义不同的镜像.如果不指定一个镜像的版本标签, docker 将默认使用 :latest 标签.
- IMAGE ID:镜像 ID.
- CREATED:镜像创建时间.
- SIZE:镜像大小.
\
docker search 镜像名 搜索指定名称的镜像, 也可以在网站 hub.docker.com 上直接搜索需要的镜像.
构建
dicker build 使用 Dockerfile 文件构建新镜像.
docker commit 容器名 镜像名 以容器为模板, 创建新镜像.
docker history 镜像名 查看指定镜像的创建历史.
下载/上传
docker pull 镜像名:tag 下载指定版本 tag 的镜像.
- 如果是从顶层仓库中下载, 直接写镜像名即可.
- 如果是从用户仓库中下载, 需要添加用户名. eg:
docker pull 用户名/镜像名:tag - 下载下来的本地镜像都保存在 Docker 宿主机的
/var/lib/docker目录下. 每个镜像都保存在 Docker 所采用的存储驱动目录下面, 如 aufs 或者 devicemapper. - 也可以在
/var/lib/docker/containers目录下面看到所有的容器.
\
docker push 镜像名:tag 上传镜像到仓库
Docker 会上传镜像的每一层, 但是如果 Docker Hub 上已经有了的镜像层不会被上传. 比如 : 如果我们的镜像是基于 base 镜像的, 实际上传的只有新增加的镜像层.
docker login -u 用户名 -p 密码 登录镜像仓库, 不指定地址, 默认为官方 Docker Hub
docker logout 登出
删除
docker rmi 镜像名 删除宿主机上指定名称的镜像.
注意 : 如果一个镜像有多个 tag, 只有当最后一个 tag 被删除时, 镜像才被真正删除. 删除其中一个标签, 只是删除了 latest tag, 镜像本身没有删除.
- 删除单个镜像
docker rmi -f 镜像 ID - 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG - 删除全部镜像
docker rmi -f $(docker images -qa)
重命名
docker tag 旧镜像名 新镜像名 修改镜像名. 原镜像名还存在, 新镜像名也存在, 就好像将旧的镜像复制了一份, 然后重命名为新的镜像名.
标签 TAG
docker tag 源镜像 镜像TAG 给本地镜像打标签, 一个镜像可以有多个标签. 就好像一个人可以有多个外号一样.
可以看到上面三个镜像的 IMAGE ID 都是一样的, 所以如果想要删除其中一个, 不能使用 ID 来删除, 需要使用 REPOSITORY:TAG 来删除, 删除掉的镜像, 对其他同名 ID 的镜像无影响.
导入/导出
docker save 镜像id > /xx/xx.tar 导出镜像文件
docker load < /xx/xx.tar 导入镜像文件
容器命令
注意 : 容器的生命周期依赖于启动时执行的命令, 只要该命令不结束, 容器也就不会退出.
列表
docker ps 参数 列出所有容器, 默认只会显示所有正在运行的容器.
参数 :
- -a 列出当前所有
正在运行的容器 + 历史运行过的容器. - -l 显示最近创建的一个容器.
- -n 数字x 显示最近创建的 x 个容器.
运行
docker run 参数 镜像名 [command] [arg] 新建并启动一个容器 ( 根据镜像名新建容器, 并且启动 )
参数:
- --name="xxx" 为容器指定一个名称. 如果不指定, docker 会自动为容器分配名字.
-d后台运行容器, 并返回容器 ID, 也即启动守护式容器.-it以交互模式运行容器, 并为容器重新分配一个伪输入终端.- -P 随机端口映射. ( 大写 )
-p指定端口映射 ( 小写 ), 有以下四种式
-
- :ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- --restart=always 该参数表示无论容器因何种原因退出(包括正常退出), 都会立即重启.但如果容器是因为执行 docker stop 或 docker kill 停止, 则不会自动重启.
- -h x.x.x.x 设置容器主机名
- -dns x.x.x.x 设置容器使用的 DNS 服务器
创建
docker create 镜像名 创建容器, 但不启动. 容器处于 Created 状态. docker run 命令实际上是 docker create 和 docker start 的组合.
启动/重启
docker start 容器id 启动已经存在的容器. 处于 created 状态 或 停止状态的容器, 该命令可以使其重新启动.
docker restart 容器id 重启容器. 其实就是依次执行 docker stop 和docker start
进入容器内部
docker exec -it 容器id bashShell 进入正在运行的容器, 并以命令行交互. 当你要对容器中的配置文件进行修改时, 使用该命令.
exit当和容器处于交互模式时, 退出容器.ctrl + p + q当和容器处于交互模式时, 退出容器但是不停止容器.
docker attach 容器id 重新进入指定容器的终端. 如果我们之前和容器处于交互模式, 但是退出了交互模式, 使用该命令可以再次进入交互模式.
- attach 直接进入容器启动命令的终端, 不会启动新的进程.
- exec 在容器汇总打开新的终端, 并且可以启动新的进程.
停止/暂停/恢复
docker stop 容器id 停止容器
docker kill 容器id 强制停止容器
docker pause 暂停容器的运行. 处于暂停状态的容器不会占用 CPU 资源.
docker unpause 恢复容器的运行.
删除容器
docker rm 容器id 删除已停止的容器
- 强制删除正在运行的容器
docker rm -f 容器id - 强制删除所有正在运行的容器
docker rm -f $(docker ps -a -q) - 批量删除所有已经退出的容器
docker rm -v $(docker ps -aq -f status=exited)
容器日志
docker logs 参数 容器id 查看容器日志. 参数:
- -t 加入时间
- -f 跟随最新的日志打印, 可以持续观看日志
- --tail 数字 显示最后多少条
容器内部信息
docker top 容器id 查看容器内运行的进程
docker stats 容器id 用来显示一个或多个容器的统计信息
docker inspect 容器id 查看容器内部细节, 返回的是 JSON 格式的详细数据.
数据拷贝
docker cp 容器id:容器内路径 目的主机路径 从容器内拷贝数据到宿主机上.
eg:从容器中拷贝 es 的配置文件到宿主机上.
docker cp 宿主机路径 容器id:容器内路径 从宿主机上拷贝数据到 Docker 容器.
因为 Docker 镜像的有一层就是 rootfs 文件系统, 里面有类似 linux 的文件.
端口映射
docker port 容器名 获取容器上的所有端口映射
docker port 容器名 容器上的端口 获取容器上的指定端口映射的宿主机上的端口
容器快照
docker export 容器id > /xx/xx.tar 导出容器快照
docker import - /xx/xx.tar 导入容器快照