这两天使用docker容器部署了一下项目中的东西,在这里进行一些相关的资料整理。此篇博文的结构如下:
一、我印象中的docker
二、如何使用docker
三、一些原理
四、扩展学习
一、我印象中的docker
docker直译为码头搬运工人,而我更倾向于将之翻译为:集装箱管理员。
docker可以为应用分配出一个个image(个人理解,image就是一个可以以线程运行的操作系统模版,这个操作系统里可以加入各种各样的软件,例如:tomcat、telnet等等)。这个image一旦运行起来,即是一个instance,或者可以理解为以线程运行的简化操作系统(这个进程是可以由docker进程,或者叫docker容器管理的)。
简单说就是:docker维护了一个个独立的线程,而这些线程即是一个个简化的操作系统。在这些操作系统中,我们可以布置属于自己的应用或者工具,用于运维。
二、如何使用docker
按照如上理解,docker的使用至少需要进行如下步骤:
(1)安装docker容器;
(2)在docker容器中创建image;
(3)通过docker中的image生成运行实例;
(1)安装docker,这个没什么技术含量,相当于在linux上安装一个软件,附上帮助链接:
(a)官方文档:http://www.docker.org.cn/book/install/supported-platform-17.html
(b)我使用的参考博客:http://blog.csdn.net/fgf00/article/details/51893771
(c)简单说来两行命令
yum install -y epel-release
yum install docker-io
(2)在容器中创建image
image可以通过三种方法获得
(a)从docker云端仓库获得
在docker hub中查找centos镜像:docker search -s 10 centos
从docker hub中拉取centos镜像:docker pull centos
(b)从本地上传镜像
编写Dockerfile内容如下。
内容规范参考https://www.cnblogs.com/wangmo/p/6811321.html或者https://docs.docker.com/engine/reference/commandline/search/#description
#以tomcat:8-jre7 镜像为基础,生成镜像,此处tomcat:8-jre7 为centos系统为基础,搭建的jdk1.7、tomcat8的镜像 FROM tomcat:8-jre7 #author MAINTAINER chendeming #environment,一个简要的环境说明 ENV tomat8-java1.7 #操作需要执行的操作 RUN rm -rf /usr/local/tomcat/webapps/ROOT #将Dockerfile所在目录下的ROOT目录拷贝至镜像中/usr/local/tomcat/webapps/ROOT处 COPY ./ROOT /usr/local/tomcat/webapps/ROOT
将镜像构建生成(如下命令要在Dockerfile所在目录下执行)
docker build -t "cloud:latest" .
docker build –t “镜像名称:标签(默认标签为latest)” .(这个.不能少,用于指向当前目录)
备注:成功标志为执行docker images能够找到cloud这个名字的镜像
(c)使用导入的方式生成镜像
docker import ./export.tar可导入通过docker export cloud > export.tar导出的镜像
备注:也可以使用如下命令进行
(3)通过镜像创建运行实例
执行命令
docker run –d –p 8081:8080 –-name cloud001 cloud
docker run –d –p 对外发布端口:容器内使用端口 --name 运行实例名 镜像名
成功标志
docker ps 能够看到一个运行中的docker实例。若没有,执行docker ps -a 看看有没有没能运行起来的实例
(4)日常的一些docker运维
docker运行实例操作:
# 创建一个新的容器并运行一个命令
在运行实例中执行命令:docker run image_name echo "hello word"
在当前运行:docker run -i -t image_name /bin/bash
# 查看所有已存在的运行实例
查看当前所有运行中的实例:docker ps
查看当前所有状态的实例:docker ps -a
# 删除运行实例(无论运行状态)
docker rm `docker ps -a -q`
docker rm Name/ID
# 停止、启动、杀死一个容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
docker logs Name/ID
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
docker diff Name/ID
# 显示一个运行的容器里面的进程信息
docker top Name/ID
# 从容器里面拷贝文件/目录到本地一个路径
docker cp Name:/container_path to_path
docker cp ID:/container_path to_path
docker rmi <参数> <镜像>--> 删除某个镜像
参数:
-f 强制删除
docker build <参数> <容器> -->利用DockerFile创建镜像
参数:
-t 给镜像添加一个标签[tag]
-q 安装模式,直接输出结果
docker云端仓库操作
docker login -u 用户名 -p 密码 <仓库>--> 登陆到一个Docker镜像仓库[默认Docker Hub]
# 登出Docker镜像
docker logout
三、一些原理
如上内容中,很多东西都是个人的理解,在这个部分我将把之前提到的一些说法转换为业界内的说法。
Docker有三个组件和三个基本元素
三个组件分别是:
Docker Client是用户界面,它支持用户与Docker Daemon之间的通信
Docker Daemon运行于主机上,处理服务请求。
Docker Index是中央registry[仓库] Hub,支持拥有共有与私有访问权限的Docker容器镜像的备份
三要素分别是:
Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。即我上面说的启动的线程。
Docker Images是一个只读模板,用来运行Docker容器。即我上面说的image,或者镜像
DockerFile是文件指令集,用来说明如何自动创建Docker镜像,这个是创建部分以本地方式上传中的Dockerfile。
Docker 镜像是一个构建容器的只读模板,它包含了容器启动所需的所有信息,包括运行程序和配置数据。Docker镜像是由文件系统叠加而成的。自低而上分别是:引导文件系统[bootfs] -> root文件系统rootfs] -> 只读文件系统-> 读写文件系统
root文件系统+只读文件系统被称为镜像,镜像是可以叠放的,最下层的称为基础镜像[base image、下面层的为父镜像,当docker容器启动时。docker会加载最顶层的读写文件系统,我们程序就是在读写层中执行的
Docker 容器类似于一个轻量级的沙盒,Docker利用容器来运行和隔离应用[容器间是线程隔离的。容器是镜像创建的应用运行实例,容器中可以运行一个或多个进程。Docker容器可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
四、扩展学习
docker源码:http://www.infoq.com/cn/articles/docker-source-code-analysis-part2/
基础概念:http://blog.csdn.net/u013468915/article/details/53977759
docker命令:https://www.server110.com/docker/201411/11122.html
docker导入导出:http://blog.csdn.net/opensure/article/details/46559071