上次说了简单的介绍了 docker, 基本的概念和架构, 并实际操作了如何安装 docker. 这次就说说 Docker 镜像和容器的基本操作命令.
(一)镜像
了解 Git 的老铁都知道有 GitHub, 其实 docker 也有个官方的镜像仓库叫 dockerhub.
https://hub.docker.com/
1获取镜像
> docker pull [选项] [Docker Registry 地址 [: 端口]/] 仓库名[: 标签]
> Docker 镜像仓库地址: 地址的格式一般是 <域名 / IP>[: 端口号], 默认地址是 Docker Hub.
> 在 library 的镜像也就是官方镜像需要: 名称
> 如果是个人的镜像需要: 用户名 / 软件名
docker pull Redis:4.0
2镜像列表
> 仓库名称, 标签, 镜像 ID, 创建时间, 镜像大小. 镜像 ID 是唯一标识.
docker image ls
官网 Redis 大小: 40MB, 但是下载到本地后是 102MB. 压缩后的体积. 在镜像下载和上传过程中镜像是保持着压缩状态的, 因此 Docker Hub 所显示的大小是网络传输中更关心的流量大小.
3镜像层次
> 我们可以使用 history 命令来看看, 可以发现 Redis 包含很多个镜像层. Docker 的镜像的基础是联合文件系统, 它支持将文件系统中的修改信息作为一次提交, 并层层叠加, 外界看到的是最外层的镜像.(比如外界只看到 Tomcat 镜像, 而中间叠加了很多层镜像)
- # 刚才那个镜像 ID
- docker image 67f7ad418fdf
4删除镜像
> 删除本地的镜像
docker image rm 镜像名: 版本号
docker rmi 镜像 ID
5镜像迁移
> 场景: 之前博客是通过容器的方式来进行的后来从华为云迁移到了阿里云, 需要将容器打包成镜像, 然后在将镜像打包成文件. 将文件拷贝到另一台阿里云的机器上.
打包
docker save 镜像名称 | gzip> alpine-latest.tar.gz
到阿里云机器后将打包文件转换成镜像
docker load -i alpine-latest.tar.gz
(二)容器
1创建容器
> -it: 这是两个参数, 一个是 -i: 交互式操作, 一个是 -t 终端. 我们这里打算进入 bash 执行一些命令并查看返回结果, 因此我们需要交互式终端.
> CentOS:7: 这是指用 Ubuntu:16.04 镜像为基础来启动容器.
> /bin/bash: 放在镜像名后的是命令, 这里我们希望有个交互式 Shell, 因此用的是 bash
> name: 容器指定一个名称
> p : 端口映射(-p 80:80)80 端口映射到外部的 80 端口上, 前一个是映射, 后一个容器内的端口
> [root@5cd9daf8961b /] 开启的容器终端, exit 退出后状态就变成 status (Exited 状态)
> -restart=always 无论容器退出代码是什么, docker 都会自动重启容器.
限制重启次数:-restart=on-failure:5 , 当容器退出代码不为 0 时, 最多重启 5 次. 这个很有用, 我自己的博客服务器经常流量大了就挂了, 有了这个命令挂了一会就自动重启了, 不用半夜在给我发邮件了. 这只是在我的场景下比较合适的方式. 在实际生产中还是使用容器编排工具比较好.
- docker run -it CentOS:7 /bin/bash
- exit
启动一个后台运行的, 如果不加入后台运行的, 容器退出后, 容器就关闭了
加入 - d 后台运行, status (up 状态)
docker run -it -d CentOS:7 /bin/bash
2容器列表
> 如果不加 - all, 显示正常运行的容器, 如果加 - all 显示所有的容器
docker container ls -all
3进入容器
> 存在可能修改容器内部的参数的情况, 所以需要进入容器.
> exec -it 开启交互进入容器中.
docker exec -it 容器 ID /bin/bash
4终止和启动容器
> 在实际应用中有这种场景: 更换 springboot 的容器的 jar 包, 需要终止容器. 更换完成后需要重新启动容器.
docker container stop 容器名称 / 容器 ID
docker container start 容器名称 / 容器 ID
5容器日志
> 查看容器日志
docker log -f 容器名称 / 容器 ID
6删除容器
> 删除容器的操作
docker container rm 容器 ID
批量删除容器, 慎用
docker rm -f $(docker ps -qa)
7容器改变
> 容器内发生的改变
docker diff 容器 ID
8容器变成镜像
> 就是在原有镜像的基础上, 再叠加上容器的存储层, 并构成新的镜像.
-author: 指定修改的作者
-message: 记录本次修改的内容
docker commit 命令除了学习之外, 还有一些特殊的应用场合, 比如被入侵后保存现场等. 但是, 不要使用 docker commit 定制镜像, 定制镜像应该使用 Dockerfile 来完成.
不规范的镜像不是 docker 推荐的.
docker commit --author 'www.idig8.com' --message '修改打包成镜像' 镜像 ID 名称: 版本号
(三)总体信息查看
多少个镜像, 多少个容器, 多少个外部, 建立了多少个缓存
docker system df
PS: 基本容器和镜像的常用命令都给老铁们说了, 如果你会 Git 或者 Linux 命令比较熟悉 docker 并不复杂, 原理还是很重要的.
来源: http://www.tuicool.com/articles/yuUNveF