Docker部分概念与常用命令

Docker的基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是相当于类,容器是镜像运行时的实例对象。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看作一个代码控制中心,用来保存镜像。

Docker 容器是通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker面向对象
容器对象
镜像

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

概念说明

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板(好比Java对象是由类创建的),比如 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。

常用命令

docker run

用于创建一个新的容器并运行一个命令,语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口;

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口;

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称,不指定名称时,会随机生成一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="werewolf": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

  • --volume , -v: 绑定一个卷,将宿主机的目录映射到容器的目录,格式为:宿主机目录:容器的目录

IMAGE说明:<仓库名>:<标签>,不指定标签时默认使用latest标签

示例

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

各个参数解析:

  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。其中15.10是镜像的版本号,未指定版本号时默认使用版本号是latest的镜像

  • /bin/echo "Hello world": 在启动的容器里执行的命令。

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

其它示例:

# 后台模式启动一个容器,并将容器命名为mynginx,容器内监听的端口映射到宿主机随机的端口号
# -it 以交互模式启动一个容器
docker run -it --name mynginx -P -d nginx:latest

# 将容器的80端口映射到宿主机的8081端口,主机的/usr/data目录映射到容器内的/data目录
docker run -p 8081:80 -v /usr/data:/data -d nginx:latest

# 将容器的8080端口的tcp协议映射到宿主机127.0.0.1的80端口
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

docker start/stop/restart

启动一个或多个已经被停止的容器,语法:

docker start [OPTIONS] CONTAINER [CONTAINER...]

停止一个运行中的容器,语法:

docker stop [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

-t, --time: 在停止容器之前等待停止的秒数(默认为10秒)

重启容器:

docker restart [OPTIONS] CONTAINER [CONTAINER...]

docker kill

杀掉一个运行中的容器:

docker kill [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

-s :向容器发送一个信号,默认指是KILL

docker rm

删除一个或多少容器,语法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -f :通过SIGKILL信号强制删除一个运行中的容器

  • -l :移除容器间的网络连接,而非容器本身

  • -v :-v 删除容器并删除与容器关联的卷

示例:

# 强制删除container1和container2
docker rm -f container1 container2

# 删除连接名为db的网络连接,不是删除容器
docker rm -l db

# 删除名为container1的容器,并删除与之关联的存储卷
docker rm -v container1

 

 

 

docker ps

runoob@runoob:~$ docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值