什么是 docker
作为一个开源的应用容器引擎,docker主要用于开发和运行应用。docker容器和虚拟机有些类似,但二者在原理上不同。容器是将操作系统层虚拟化,而虚拟机则是虚拟化硬件。因此容器相较于虚拟机来说更加便携、轻量以及高效。
所以我们可以简单的将docker容器理解为一个轻量版的虚拟机。在docker之上我们可以高效地运行各式各样的应用,应用之间相互独立而又可以互相协调。
docker组成

其中,容器和镜像的概念一定要分清。他俩的关系就像是Java中的类与对象。镜像是一个只读模板,用于指示创建容器,而容器是镜像的可运行实例。一个镜像也可以创建很多个容器,这些容器可以相互独立运行。
Docker注册中心(Docker registry)也被称为Docker仓库,主要用于存储docker镜像。Docker Hub是一个公共的注册中心,任何人都可以在此处下载镜像。
docker基本常用命令
镜像相关
- 检索镜像
- 获取镜像(默认从Docker Hub下载)
1
| docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
|
- 列出镜像
1 2
| docker image ls docker images
|
- 导入镜像
- 导出镜像
1 2 3 4
| docker save [镜像名/镜像ID] [输出]
|
- 删除镜像
容器相关
- 启动容器
1 2 3 4 5
| docker run [选项] [镜像名/镜像ID[:TAG]] [命令] [参数]
docker start [容器名/容器ID]
|
docker run
常用选项:
- -d: 后台运行容器
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- –name: 为容器指定一个名称
- -e: 设置环境变量
- –env-file: 从指定文件读入环境变量
- –net: 指定容器的网络连接类型
- –link: 添加链接到另一个容器
- –expose: 开放一个端口或一组端口
- –volume, -v: 绑定一个卷,将本地文件夹与容器文件夹共享
举例:
1 2 3
| docker run -it -p 80:80 -p 443:443 --name lnmp -v ~/docker/lnmp/data:/root/data centos:7 /bin/bash
|
- 查看容器
1 2 3 4 5
| docker ps
docker ps -a
|
- 终止容器
- 重启容器
1
| docker restart [容器名/容器ID]
|
- 进入容器
1 2 3 4 5
| docker attach [容器名/容器ID]
docker exec -it [容器名/容器ID] /bin/bash
|
- 导入容器
1 2 3
| docker import [选项] [文件路径/URL] [REPOSITORY[:TAG]]
|
- 导出容器
1 2 3
| docker export [容器名/容器ID] [输出]
|
注:用户既可以使用 docker load
来导入镜像存储文件到本地镜像库,也可以使用 docker import
来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
- 删除容器
- 复制文件
1 2 3 4
| docker cp [主机路径] [容器ID]:[容器路径]
docker cp [容器ID]:[容器路径] [主机路径]
|
参考:
【1】:Docker - 维基百科
【2】:Docker 教程 | 菜鸟教程
【3】:Docker - 从入门到实践
【4】:Docker Engine overview | Docker Documentation
【5】:Docker - 实现本地镜像的导出、导入(export、import、save、load)
【6】:一张脑图整理Docker常用命令 - 腾讯云开发者社区