2019.03.17 - Docker与相关技术

Docker

Docker简介

  • 基于go语言编写
  • 开源项目
  • Docker提供了一种打包、输送、运行任意应用的容器解决方案
  • 当前适用于Linux平台

Docker的安装

环境依赖

  • Docker基于Linux,在Win/Mac需要依赖Linux VM。
    在这里插入图片描述

安装Docker

安装VirtualBox

Docker Machine

Docker Machine的简介

  • 可以通过本地的Docker Machine控制远程Docker主机的配置

Docker Machine与Docker Engine的异同

  • Docker Engine的基本结构
    在这里插入图片描述

  • Docker Machine的基本结构:通过客户端(Client)管理主机(Server)
    在这里插入图片描述

Docker Machine的功能

  • 在Mac/Win运行Docker的唯一方式
  • 支持不同版本的Linux上管理多个Docker主机
  • 提供集中创建和管理Docker主机的功能
  • 与Docker Swarm集成,创建Docker集群

Docker Machine的基本使用

Docker Machine的常用命令

  • Docker Machine命令行指南:Docker Machine command-line reference
  • version:查看版本
  • help:查看帮助
  • create/rm:创建/删除一个Docker Machine
  • start/stop/restart/kill:启动/停止Docker Machine
  • active/config/env/inspect/ip/ls/status/url:获取相应信息
  • ssh:远程登录Docker machine
  • scp:本机与machine或machine之间传输文件

Docker Machine的基本演示

  • 打开命令行
  • 查看可用的Machines:
    • docker-machine ls
  • 删除、创建一个Machine
    • docker-machine create --driver virtualbox cloudcomb:在指定的virtualbox(虚拟硬件)上创建cloudcomb(Machine)
    • 再次ls查看,cloudcomb创建成功
      在这里插入图片描述
  • 获取指定Machine的环境变量
    • docker-machine env cloudcomb:四个环境变量(通信是否基于TLS,远程Docker的Host与Port,认证证书与路径,docker-machine的名称)
      在这里插入图片描述
  • 将Shell连接到指定的Machine上
    • eval $(docker-machine env cloudcomb):把cloudcomb的环境变量配置到shell,即上图的最后一行。
  • 运行一个Docker容器
    • docker run hub.c.163.com/library/busybox:latest echo hello world:运行指定Docker容器(网易蜂巢镜像中心的busybox容器),验证docker-machine是否正常工作,并echo打印字符串
      在这里插入图片描述
  • 删除指定docker machine
    • docker-machine rm cloudcomb:删除指定Machine。
    • ls查看,是否删除成功

Docker+Nignx:快速部署静态网站

  • 网易蜂巢景象中心

  • docker pull:拉取镜像,类似下载。

    • docker pull hub.c.163.com/library/nginx:latest:拉取指定地址的镜像
      在这里插入图片描述
  • docker images:查看现有镜像
    在这里插入图片描述

  • docker run

    • 运行前需要配置Machine变量到Shell:eval $(docker-machine env cloudcomb)
    • docker run -p 8080:80 --name nginx_web -it hub.c.163.com/library/nginx /bin/bash:启动docker
      • -it:进入指定docker
      • -p:容器对于宿主机的映射,宿主机的Port映射为容器的Port(本机的8080端口 映射到 Docker的80端口,Nginx默认端口为80)
        在这里插入图片描述
  • 在容器内运行Nginx
    在这里插入图片描述

  • 查看进程:ps aux

  • 尝试访问http://192.168.99.102:8080/

    • 192.168.99.102:cloudcomb(docker-machine)的Host(docker-machine env查看)
    • 8080:宿主机的Port(docker run指定)
      在这里插入图片描述
  • 登出cloundcomb docker环境(但不停止Docker):先ctrl+p,后ctrl+q

  • 在指定容器中打开交互模式的终端:docker exec -it nginx_web /bin/bash

  • 查看当前运行的容器信息:docker ps -a
    在这里插入图片描述

  • 列出指定容器内正在运行的进程:docker top nginx_web

  • 列出容器内端口地图:docker port nginx_web

  • 停止指定容器:docker stop 8cc8cc是前缀,防止误删。http://192.168.99.102:8080/将不可访问。

  • 删除指定容器:docker rm 8cc

  • 再次查看:docker ps -a,确保已删除

Dockerfile快速部署

Dockerfile文件

  • 无后缀名:

    • 制作纯文本(注意不要使用rtf格式)
      在这里插入图片描述
  • 内容:

FROM hub.c.163.com/library/nginx #以此镜像为基础

RUN echo “Hello Nginx on Docker” > /usr/share/nginx/html/index.html #把文本写入html网页

EXPOSE 80 #暴露80端口

#CMD ’nginx’ #注释
  • 位置:/Users/jayli/Desktop/Nginx/Dockerfile

Docker Build操作

  • docker build -t couldcomb/nginx:1.0 /Users/jayli/Desktop/Nginx:创建couldcomb的nginx版本为1.0,自动执行Nginx文件夹下的Dockerfile。
    在这里插入图片描述

  • 查看镜像
    在这里插入图片描述

  • 运行Docker

    • docker run -p 8081:80 --name test_nginx -it couldcomb/nginx:1.0 /bin/bash
    • 在Docker中启动Nginx
    • 实测失败!!!

参考