上一篇中,我们对Docker有了一个基本的了解

下面将讨论Docker中Image,Container的相关实际操作

Image管理:

镜像的命名和版本管理:

普通镜像的命名规范

{namespace}/{repository}:{tag}

namespace是docker hub的用户名

repository是项目名称,如:Ubuntu,mysql等

tag表示版本信息,例如:cesc/mysql:5.5,tag是可选的,默认为latest

显示本地的images

  1. docker images

我们可以通过docker命令从Docker Hub上拉取镜像回本地:

  1. docker pull {image name}
  2. //如果没有指定image的tag的话,会把该image的所有版本都下载下来

上传镜像:

  1. docker login
  2. //登陆到docker hub中
  3. docker commit containerId
  4. //将一个指定的Container打包成一个image,这时会返回一个临时的imageId(一大串)
  5. docker tag imageId {namespace}/{repository}:{tag}
  6. //根据imageId重命名image
  7. docker push {namespace}/{repository}:{tag}
  8. //push到docker hub

运行Container:

在Host看来,运行一个Container就是开启一个独立namespace进程而已

通过docker run命令来启动一个container,必须指定一个image作为初始化的文件系统

  1. docker run [options] image[:tag] [commond][args]
  2. //[options]表示一些运行参数
  3. //如-t,表示后面用哪个image作为template
  4. //-d,表示后台运行等
  5. //[commond],表示可以输入一些linux命令 如ls等,作为container实际运行的首进程
  6. //[args],表示上面的命令需要的参数,如-al

如果-t 后面的image不存在本地的话,会自动到docker hub上下载对应的image

  1. docker run -d -t image[:tag]//-d让container运行在后台
  2. docker run -a stdin//默认是运行在前台的,会将输入,输出和错误信息打印出来,通过-a来限制只有stdin,这样就看不到输出和错误信息了
  3. docker attach containerId//将一个后台的container attach到前台
  4. docker ps//查看当前的container,用法和linux中的ps类似
  5. docker inspect containerId//获得指定container的所有信息
  6. docker logs containerId//查看指定container的日志信息

网络设置:

Docker默认使用桥接的方式,如下图:

Host上对应每个Container都有veth{id}这样的虚拟网卡,对应每个Container里面的eth0,Host上的bridge负责将数据在各个veth中转发,以达到通信的目的

  1. docker run -dt --net none image[:tag]
  2. //none关闭网络
  3. //host使用主机网络栈,将不做veth映射
  4. //container:{containerId}使用另外一个container的网络

端口映射:

docker通过端口映射的方式,能够将container内部的网络端口暴露到外部

  1. docker run -dt -p 80:8000 image[:tag]
  2. //将内部的80端口暴露出来,外部可以通过8000访问到,如果没有指定外部对应的端口号,将会默认分配一个49000-49900之间的一个端口,可以通过docker ps来查看自动分配的端口

Volume绑定:

通过-v参数可以将Host上的一个目录绑定到container中,允许container对其进行读写

  1. docker -dt -v /home/jchubby:/test image[:tag]
  2. //将host上的/home/jchubby映射到container中的/test目录

环境变量设置:

既然container可以看成一个独立的os,那么肯定会有环境变量的设置

举一个例子来说明:

有两个container,a是提供数据库服务的,b是web应用,那么b要怎么才能知道a的主机ip,端口等信息,然后进行服务接入呢?

  1. docker run --name mysql -dt image[:tag]
  2. //通过--name为该container指定一个唯一的name
  3. docker run --link mysql:db -dt image[:tag]
  4. //通过link参数,可以将指定name(mysql)的container信息以环境变量的方式加到当前的container中,:db是mysql的别名

–link运行产生的环境变量结果如下:

如何进入Container:

每个Container都是一个独立的os,我们可以像操作VM虚拟机一样操作它

连接到Container有三种方式:

1、sshd

需要在Container中安装sshd服务,然后通过ssh连接即可(安全性不高)

2、nsenter

由linux提供,用来进入一个进程的namespace

  1. docker inspect --format "{{.State.Pid}}" <container-id>
  2. //首先要获得Container在host中的进程id
  3. nsenter --target $pid --mount --uts --ipc --net --pid
  4. //然后通过下面的命令进入Container

3、exec

是Docker新进入的一个命令,用来进入一个Container来运行一些指令

  1. docker exec containerId commod args

Docker解析及轻量级PaaS平台演练(二)--Docker的一些简单命令的更多相关文章

  1. Docker解析及轻量级PaaS平台演练(四)--Fig相关介绍

    本篇中将会使用开源工具Fig Fig是什么? 简单的说就是对Docker的封装,从而方便我们构建应用的运行环境 它所做的事情是协调Docker上的各个Container之间的联系,并通过服务发现的方式 ...

  2. Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写

    在本篇中将介绍Dockerfile的编写 除了通过修改Image,创建Container,在打包成Image来创建我们需要的Image之外 我们还可以编写Dockerfile文件,通过build来创建 ...

  3. Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装

    Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...

  4. Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker& ...

  5. Docker云Paas平台部署:Docker+Mesos+Marathon

    针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发 ...

  6. docker快速创建轻量级的可移植的容器(一)

    系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口 docker&uwsgi高性能WSGI服务器生产部署必备 docker&gu ...

  7. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  8. Docker容器技术的PaaS云平台架构设计***

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...

  9. 基于Docker&Kubernetes构建PaaS平台基础知识梳理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...

随机推荐

  1. efi转bios详细说明

    前言 制作好的efi格式的ubuntu15.10系统放到服务器主板上启动不了,于是将其改为bios格式,发现问题解决了,成功登入系统.下面是操作过程的一个记录. 测试环境 目标环境 系统: Ubunt ...

  2. python基础===socket模块的讲解(转)

    一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...

  3. easyUi根据一个日期给另一日期自动赋值的js

    $('#loanbegindate').datebox({ onSelect:function(date){ changeDate(); } }); $('#loanterm,#loantermtyp ...

  4. MAC使用homeBrew安装Redis

    homeBrew的操作命令如下: brew search ** //查找某个软件包 brew list //列出已经安装的软件的包 brew install ** //安装某个软件包,默认安装的是稳定 ...

  5. jquery禁用select和取消禁用

    $("#id").attr("disabled","disabled"); $("#id").removeAttr(&q ...

  6. AC日记——codeforces Ancient Berland Circus 1c

    1C - Ancient Berland Circus 思路: 求出三角形外接圆: 然后找出三角形三条边在小数意义下的最大公约数; 然后n=pi*2/fgcd; 求出面积即可: 代码: #includ ...

  7. AC日记——[SHOI2008]小约翰的游戏John bzoj 1022

    1022 思路: nim: 代码: #include <cstdio> #include <cstdlib> #include <iostream> #includ ...

  8. django实现动态菜单的方式

    1.model from django.contrib.auth.models import User #django自带 class UserProfile(models.Model): " ...

  9. (14)python 文件和流

    打开文件 f=open('C:\Temp.txt') 读取数据 f.read(); 关闭文件 f.close();#关闭后将无法再读取 打开文件的方式 不写模式,默认是只读模式 1.r 打开只读文件, ...

  10. AMQ学习笔记 - 02. JMS客户端编程模型

    概述 客户端编程模型,是讲如何使用JMS API实现Java应用程序和JMS Provider的通信. 消息传送模式 消息传送模式又称为消息传送域,JMS API定义了两种模式:PTP和Pub/Sub ...