docker是什么
轻量级的虚拟化技术。Docker 可以让开发者在构建应用时,将应用与其依赖的环境一起打包到一个可移植的容器中, 然后很方便地发布到任意操作系统中。
docker主要由什么组成
- docker client (客户端)
- docker deamon (docker守护进程)
- docker registry (注册中心,存储docker镜像的地方)
- docker image (镜像 )
- docker container (容器 镜像运行的实例)
image
- 镜像 虚拟化主机环境
- 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
- 分层存储的特征还使得镜像的复用、定制变的更为容易。
- 利用 Union FS 的技术
container
- 虚拟机镜像实例
- 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
- 每一个容器进行时,是以镜像为基础层,在其上创建一个当前容器的存储层,称之为容器存储层
- 按照docker的最佳实践要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。
Repository
- Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
镜像操作
- 搜索镜像:
docker search [op] keyword
- 拉取&下载镜像
docker pull [IMAGE_NAME]:[TAG]
- 保存镜像
docker save -o redis.tar redis:latest
- 导入镜像
docker load -i redis.tar
docker load < redis.tar
- 删除镜像
docker rmi [image]
docker image rm [image]
# -f, -force: 强制删除镜像,即便有容器引用该镜像;
# -no-prune: 不要删除未带标签的父镜像;
# -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
容器操作
启动
docker run IMAGE:TAG
- 示例:
docker run -it ubuntu:18.04 /bin/bash
- 重要选项
| 选项 | 说明 |
|---|---|
| -a, --attach=[] | 是否绑定到标准输人、输出和错误 |
| -d,--detach=truelfalse | 是否在后台运行容器,默认为否 |
| --expose=[] | 指定容器会暴露出来的端口或端口范围 |
| -i, --interactive=truelfalse | 保持标准输入打开,默认为 false |
| -P,--publish-all=truelfalse | 指定如何映射到本地主机端口,例如-p 1123-12234:1234-2234 |
| -t,--tty=truelfalse | 是否分配一个伪终端,默认为 false |
| -v / --volume[=[[HOST-DIR:] CONTAINER-DIR[:OPTIONS]] | 挂载主机上的文件卷到容器内 |
| --name="" | 指定容器的别名 |
进入
- 命令 : docker exec (推荐)| docker attach
区别 : exec 命令和下面 attach 命令的区别在于,当使用 exit 退出容器时,不会导致容器停止。 - exec:
docker exec -it [container ID or NAMES]
#退出 exit
- attach:
docker attach [container ID or NAMES]