Docker解析及轻量级PaaS平台演练(二)--Docker的一些简单命令

上一篇中,咱们对Docker有了一个基本的了解
下面将讨论Docker中Image,Container的相关实际操做css

Image管理:mysql

镜像的命名和版本管理:linux

普通镜像的命名规范
{namespace}/{repository}:{tag}web

namespace是docker hub的用户名
repository是项目名称,如:Ubuntu,mysql等
tag表示版本信息,例如:cesc/mysql:5.5,tag是可选的,默认为latestsql

显示本地的imagesdocker

docker images

咱们能够经过docker命令从Docker Hub上拉取镜像回本地:数据库

docker pull {image name}
//若是没有指定image的tag的话,会把该image的全部版本都下载下来

上传镜像:安全

docker login
//登录到docker hub中

docker commit containerId
//将一个指定的Container打包成一个image,这时会返回一个临时的imageId(一大串)

docker tag imageId {namespace}/{repository}:{tag}
//根据imageId重命名image

docker push {namespace}/{repository}:{tag}
//push到docker hub

运行Container:ruby

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

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

docker run [options] image[:tag] [commond][args]
//[options]表示一些运行参数
//如-t,表示后面用哪一个image做为template
//-d,表示后台运行等

//[commond],表示能够输入一些linux命令 如ls等,做为container实际运行的首进程
//[args],表示上面的命令须要的参数,如-al

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

docker run -d -t image[:tag]//-d让container运行在后台

docker run -a stdin//默认是运行在前台的,会将输入,输出和错误信息打印出来,经过-a来限制只有stdin,这样就看不到输出和错误信息了

docker attach containerId//将一个后台的container attach到前台

docker ps//查看当前的container,用法和linux中的ps相似

docker inspect containerId//得到指定container的全部信息

docker logs containerId//查看指定container的日志信息

网络设置:

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

这里写图片描述

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

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

端口映射:

docker经过端口映射的方式,可以将container内部的网络端口暴露到外部

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

Volume绑定:

经过-v参数能够将Host上的一个目录绑定到container中,容许container对其进行读写

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

环境变量设置:

既然container能够当作一个独立的os,那么确定会有环境变量的设置

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

docker run --name mysql -dt image[:tag] //经过--name为该container指定一个惟一的name

docker run --link mysql:db -dt image[:tag] //经过link参数,能够将指定name(mysql)的container信息以环境变量的方式加到当前的container中,:db是mysql的别名

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

这里写图片描述

如何进入Container:

每一个Container都是一个独立的os,咱们能够像操做VM虚拟机同样操做它

链接到Container有三种方式:

一、sshd
须要在Container中安装sshd服务,而后经过ssh链接便可(安全性不高)

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

docker inspect --format "{{.State.Pid}}" <container-id>
//首先要得到Container在host中的进程id

nsenter --target $pid --mount --uts --ipc --net --pid
//而后经过下面的命令进入Container

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

docker exec containerId commod args
相关文章
相关标签/搜索