什么是 docker

作为一个开源的应用容器引擎,docker主要用于开发和运行应用。docker容器和虚拟机有些类似,但二者在原理上不同。容器是将操作系统层虚拟化,而虚拟机则是虚拟化硬件。因此容器相较于虚拟机来说更加便携、轻量以及高效。

所以我们可以简单的将docker容器理解为一个轻量版的虚拟机。在docker之上我们可以高效地运行各式各样的应用,应用之间相互独立而又可以互相协调。


docker组成

Docker

其中,容器和镜像的概念一定要分清。他俩的关系就像是Java中的类与对象。镜像是一个只读模板,用于指示创建容器,而容器是镜像的可运行实例。一个镜像也可以创建很多个容器,这些容器可以相互独立运行。

Docker注册中心(Docker registry)也被称为Docker仓库,主要用于存储docker镜像。Docker Hub是一个公共的注册中心,任何人都可以在此处下载镜像。


docker基本常用命令

镜像相关

  1. 检索镜像
1
docker search [关键字]
  1. 获取镜像(默认从Docker Hub下载)
1
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
  1. 列出镜像
1
2
docker image ls
docker images
  1. 导入镜像
1
2
3
docker load [文件]

# 举例:docker load < image.tar
  1. 导出镜像
1
2
3
4
docker save [镜像名/镜像ID] [输出]

# 举例:docker save 0fdf2b4c26d3 > image.tar
# 也可以将多个image打包成一个文件:docker save -o images.tar postgres:9.6 mongo:3.4
  1. 删除镜像
1
docker rmi [镜像ID]

容器相关

  1. 启动容器
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

# 以bash为交互方式运行一个centos7容器,放行80和443端口,取名为lnmp,并将本机(宿主机)的 ~/docker/lnmp/data 目录与容器内的 /root/data 目录绑定
  1. 查看容器
1
2
3
4
5
# 查看正在运行的容器
docker ps

# 查看所有容器
docker ps -a
  1. 终止容器
1
docker stop [容器名/容器ID]
  1. 重启容器
1
docker restart [容器名/容器ID]
  1. 进入容器
1
2
3
4
5
# 退出后容器终止
docker attach [容器名/容器ID]

# 退出后容器正常运行
docker exec -it [容器名/容器ID] /bin/bash
  1. 导入容器
1
2
3
docker import [选项] [文件路径/URL] [REPOSITORY[:TAG]]

# 举例:docker import ./myredis.tar.gz myredis:1
  1. 导出容器
1
2
3
docker export [容器名/容器ID] [输出]

# 举例:docker export myredis > myredis.tar.gz

注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

  1. 删除容器
1
docker rm [容器ID/容器名]
  1. 复制文件
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常用命令 - 腾讯云开发者社区