概念
Docker包括三个基本概念:
镜像(Image):Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库(Repository)类似Git的远程仓库,集中存放镜像文件。
三者关系可以用下图表示:

Docker的常用命令
服务
查看Docker版本信息
1 | docker version |
启动Docker
1 | systemctl start docker |
关闭docker
1 | systemctl stop docker |
设置开机启动
1 | systemctl enable docker |
重启docker服务
1 | service docker restart |
关闭docker服务
1 | service docker stop |
镜像
Docker Hub等镜像仓库上有大量的高质量的镜像可以用,可以从仓库获取镜像
检索镜像
1 | docker search 关键字 |
拉取镜像
1 | docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] |
列出镜像
1 | docker image ls |
删除镜像
1 | # 删除指定镜像 |
导出镜像
1 | # 将镜像保存为归档文件 |
导入镜像
1 | docker load |
构建镜像
Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 来快速创建自定义的镜像
Dockerfile 由一行行行命令语句组成,并且支持以#开头的注释行.
一些常见的指令:
- FROM:指定基础镜像
- RUN:执行命令
- COPY:复制文件
- ADD:更高级的复制文件
- CMD:容器启动命令
- ENV:设置环境变量
- EXPOSE:暴露端口
以下是一个Dockerfile实例:
1 | FROM java:8 |
构建镜像命令:
1 | docker build [选项] <上下文路径/URL/-> |
1 | # 指定Dockerfile路径 |
镜像运行 (容器运行):
1 | # 新建并启动 |
容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
1 | docker run --name mynginx -it 01da99b6476c |
-it 参数 为该docker创建一个伪终端,这样就可以进入到容器的交互模式
查看容器
1 | # 列出本机运行的容器 |
停止容器
1 | # 停止运行的容器 |
重启容器
1 | docker restart [容器ID] |
删除容器
1 | docker rm [容器ID] |
进入容器
1 | # 如果从这个 stdin 中 exit,会导致容器的停止 |
docker exec后面跟的常见参数如下:
- d, –detach 在容器中后台执行命令
- i, –interactive=true I false :打开标准输入接受用户输入命令
发布
容器运行成功后,就确认了 image 文件的有效性。这时,我们就可以考虑把 image 文件分享到网上,让其他人使用。
去 hub.docker.com 或 cloud.docker.com注册一个账户
1 | docker login |
为本地的 image 标注用户名和版本
1 | docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1 |
最后,发布 image 文件。
1 | docker image push [username]/[repository]:[tag] |
Demo
从零开始来创建一个新的镜像:
1 | FROM registry.cn-beijing.aliyuncs.com/selfdriveguard/ubuntu_20_sumo:1.14.1 |
使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像
1 | # 作为基础镜像 |
查看创建的镜像
1 | docker images |
已经在列表中存在,镜像ID为860c279d2fec 使用新的镜像来创建容器
1 | docker run -it oasis-sumo-base:v0.1 |
查看容器运行情况
1 | docker ps |
进入服务器docker查看日志,启动交互式的 bash shell
1 | docker exec -it 860c279d2fec bash |
镜像可以简单理解为自定义的运行环境,容器为实例化后的镜像,运行中的进程