docker基础使用

简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker架构

Docker包含三个概念:镜像、容器、仓库。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

  • 镜像:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库:仓库可看成一个代码控制中心,用来保存镜像。

docker基础使用_第1张图片

概念 说明
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。

Docker安装

Ubuntu、Debian、CentOs、Windows、MacOs

Docker使用

Hello Word

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

解释:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

运行交互式容器

  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
root@0123ce188bd8:/#  exit
exit
root@runoob:~# 

退出容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63   # 容器ID

启动后台模式

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

docker ps可以查看容器运行情况

  • CONTAINER ID: 容器 ID。
  • IMAGE: 使用的镜像。
  • COMMAND: 启动容器时运行的命令。
  • CREATED: 容器的创建时间。
  • STATUS: 容器状态。
    • created(已创建)
    • restarting(重启中)
    • running 或 Up(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
  • NAMES: 自动分配的容器名称。
runoob@runoob:~$ docker logs 2b1b7a428627

查看容器内标准输出

docker stop 2b1b7a428627 # 容器ID

停止容器

Dockers容器使用

  • 可以直接输入docker查看命令
  • docker command --help查看使用方法
  • docker pull ubuntu:本地没有ubuntu镜像,可以通过这个命令载入镜像
  • docker run -it ubuntu /bin/bash:启动镜像
  • exit:退出
  • docker ps -a:查看所有容器
  • docker attach 容器ID:退出容器会停止
  • docker exec 容器ID: 退出容器不会停止
  • docker export 1e560fca3906 > ubuntu.tar :导出容器快照到本地文件 ubuntu.tar
  • cat docker/ubuntu.tar | docker import - test/ubuntu:v1:将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
  • docker import http://example.com/exampleimage.tgz example/imagerepo:通过指定 URL 或者某个目录来导入
  • docker container prune:清理所有终止的容器

运行一个web程序

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py # 容器内部的 5000 端口映射到我们本地主机的 5000 端口
  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
docker port bf08b7f2cd89 # 查看容器的某个确定端口映射到宿主机的端口号
docker logs -f bf08b7f2cd89 # 查看web应用程序日志
docker top wizardly_chandrasekhar # 查看容器内部运行的进程

查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......
# 重启
docker stop wizardly_chandrasekhar
docker start wizardly_chandrasekhar

docker restart wizardly_chandrasekhar

docker rm wizardly_chandrasekhar # 移除容器必须先停止

你可能感兴趣的:(docker,容器,运维)