1. 概念
Docker 有 3 个基本概念,分别是 Image(镜像),Container(容器)以及Repository(仓库)。
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
PS:
-
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
-
Docker 容器通过 Docker 镜像来创建。
-
容器与镜像的关系类似于面向对象编程中的对象与类。
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
2. 相关命令
2.1 启动docker
service docker start
不启动使用docker命令会出现报错
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Is the docker daemon running?
2.2 docker run
命令:docker run
,使用Docker在容器内运行一个应用程序。
2.2.1 Docker的Hello World!
docker run ubuntu:15.10 /bin/echo "Hello,World!"
命令解析:
-
docker: Docker 的二进制执行文件。
-
run: 与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
-
/bin/echo “Hello world”: 在启动的容器里执行的命令。
2.2.2 部分相关参数
run 的部分相关参数:
-
-t: 在新容器内指定一个伪终端或终端。
-
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
比如说:开启一个ubuntu系统镜像
root@4HTFKO9PKNWGWU0:~# docker run -i -t ubuntu:15.10 /bin/bash
root@6a7bd21754c5:/# echo "Hello World!"
Hello World!
使用exit
退出系统:
root@6a7bd21754c5:/# exit
exit
root@4HTFKO9PKNWGWU0:~#
2.2.3 后台运行的容器模式
dokcer run
可以在后台运行,使用命令
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
我们可以通过docker ps
列出当前所有 的镜像来查看。
docker ps
输出详情介绍:
-
CONTAINER ID: 容器 ID。
-
IMAGE: 使用的镜像。
-
COMMAND: 启动容器时运行的命令。
-
CREATED: 容器的创建时间。
-
STATUS: 容器状态。
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
-
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
-
NAMES: 自动分配的容器名称。
我们看后台运行的时候大概能理解它是输出了一个Hello World
,可以使用docker logs + 容器ID/容器Names
来查看容器的标准输出。
docker logs 92927a25d292
docker logs admiring_borg
ps: 容器ID 和 容器Names 从
docker ps
里面找
2.2.4 停止后台运行的容器
使用命令docker stop 容器ID/容器Names
docker stop admiring_borg
2.3 容器使用
2.3.1 客户端命令查看
- 查看所有的命令使用
docker
- 命令具体内容使用
docker command --help
去查看,比如说:
docker stats --help
2.3.2 容器使用
2.3.2.1 拉取镜像
使用命令docker pull 镜像
,常用于本地没有镜像的时候。比如说:拉取ubuntu镜像。
2.3.2.2 使用容器
docker run -it ubuntu /bin/bash
这里的-it
是-i -t
的缩写。命令的意思是使用ubuntu镜像生成一个交互式的终端容器供予使用。
参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
退出容器命令:exit
2.3.2.3 已停止容器再启动
查看已停止容器
docker ps -a
启动已停止容器
docker start 容器ID
后台运行容器
当我们需要容器在后台运行而不是直接运行的时候加入参数-d
即可
这样就不会直接进入,而我们可以使用docker exec
命令去进入后台运行容器。
进入后台容器
docker exec
:推荐使用,因为此命令会退出容器终端,但不会导致容器的停止。docker attach
:使用该命令进入后,如果从容器退出,会导致容器的停止。
docker exec
命令使用
docker exec -it 4ea881615c3b /bin/bash
退出后,容器也还存在
docker attach
命令使用
2.3.2.4 导入导出容器
导出容器
docker export
docker export 容器ID > 导出文件名.导出文件类型
例如:
docker export 1e560fca3906 > ubuntu.tar
导入容器
docker import
2.3.2.5 删除容器
docker rm -f 容器ID
删除时需要是已经停止的状态。
docker rm -f 4ea881615c3b
2.3.3 web应用
2.3.3.1 运行一个web应用
在docker容器中运行一个 Python Flask 应用来运行一个web应用
docker pull training/webapp
docker run -d -P training/webapp python app.py
参数说明:
-
-d:让容器在后台运行。
-
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
启动之后可以通过docker ps
或者是docker port 容器ID
获取监听端口
确定开启了之后可以在web上127.0.0.1:端口号
访问docker提供的web服务。
-p
:增加该参数,提供固定的端口访问。
docker run -d -p 5000:5000 training/webapp python app.py
2.3.3.2 查看web服务日志
docker logs [ID或者名字]
:查看容器内部的标准输出。
-f
: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
2.3.3.3 查看web服务容器内的进程
docker top 容器ID/容器Name
2.3.3.4 检查服务在docker内的配置信息
docker inspect 容器ID
:查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
3 学习链接
加油~ 迎接新一天~ —swrici