docker--初体验
docker这个词已经越来越热,很多docker的概念是从周围人和知乎上看的,打算从功能上先了解docker,深入的话放在以后。
ps:正好手头有一台腾讯云的vps,单核,1G内存,可以拿来做实验,腾讯云还能直接申请配置好的docker环境,一块钱每月,学生党的福利吧
docker是基于c-s架构的,它有一个 docker程序,既能作为客户端,也能作为服务器,作为客户端时,docker程序向docker守护进程发送请求,然后再对返回的结果进行处理。docker的一些命令一般需要在root账户下执行。
1. docker环境可以用了吗
docker安装很简单,安装之后验证它是否能够正常工作,
root@VM---ubuntu:~# docker info Containers: 7 #现有的容器 Images: 11 #现有的镜像 Storage Driver: aufs #存储驱动 Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: Dirperm1 Supported: false Execution Driver: native-0.2 #执行驱动 Logging Driver: json-file Kernel Version: --generic Operating System: Ubuntu LTS CPUs: Total Memory: MiB Name: VM---ubuntu ID: J2H5:LG3K:EL4Q:PKAL:K37L:C36K:GUIE:JQIW:XKAP:AL66:D7RS:7OEN Username: changan Registry: https://index.docker.io/v1/ WARNING: No swap limit support
2.docker用起来是怎么样的?
大部分书都会给运行docker的第一个容器
root@VM---ubuntu:~# docker run -i -t ubuntu /bin/bash root@d05d3db1b990:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
运行这条命令,发现终端从本机的~目录下跳转到 root@d05d3db1b990的 / 目录下,d05d3db1b990就是当前我们创造出来的容器,我们现在所处的是在容器里面的shell,有了这个shell,我们就能很方便的在这个容器里面执行各种操作,做这个容器的时候,我们定制它的模板是 ubuntu,所以我们可以把它当作一个新的操作系统用,这条命令的 -i 参数保证容器里面的STDIN是开启的,-t参数告诉docker要为创造的容器分配一个伪tty终端,这样,新创建的容器才能提供一个与我们交互的shell,这样我们创建的是一个可以交互的容器,同样,我们也能创建一个后台服务的容器。
在这里,我们选择是ubuntu这样一个基础镜像,同样也能选择 centos,fedora等其他镜像,Linux的不同发行版很多,但是它们都是依托唯一的Linux内核。在我们指定了ubuntu参数以后,docker去哪找这么多的基础部件呢,莫非我们在安装的时候就已经把各个操作系统,服务器的代码下载下来放到本地,用的时候去本地找?或者是每次取到用户指定的参数,拼接一个url,然后去一个地方下载?首先,docker回去本地的一个固定目录下去查找是否有本次要用的资源,如果没有,docker会连结官方的的Docker hub,看看网络上是否有镜像,找到后下载到本地,然后构建目标容器,如果本地和网络都找不到,命令只能返回一个失败。
容器操作的几个命令:
root@VM---ubuntu:~# docker ps #查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@VM---ubuntu:~# docker ps -a #所有容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d05d3db1b990 ubuntu minutes ago Exited () About a minute ago serene_banach 7916a41706d3 ubuntu hours ago Exited () minutes ago daemon_test
root@VM---ubuntu:~# docker start daemon_test #启动一个容器 daemon_test #返回容器名 root@VM---ubuntu:~# docker ps #容器启动了 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7916a41706d3 ubuntu hours ago Up seconds daemon_test root@VM---ubuntu:~# docker stop daemon_test #停止正在运行的容器 daemon_test #返回容器名
root@VM---ubuntu:~# docker run --name zzztest_daemon -d ubuntu /bin/bash -c "while true; do echo hello docker; sleep 3; done;" #创建一个守护式容器 --name是给这个容器取名 fe97ada54ee9ee5fe96b78033d80595b8e23006527782609757fe11474ba2aca root@VM---ubuntu:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fe97ada54ee9 ubuntu seconds ago Up seconds zzztest_daemon root@VM---ubuntu:~# docker logs zzztest_daemon hello docker hello docker hello docker
root@VM-30-109-ubuntu:~# docker logs -ft zzztest_daemon # -f选项类似 tail -f -t表示加上时间戳
2016-11-27T06:12:18.037582372Z hello docker
2016-11-27T06:12:21.039988788Z hello docker
2016-11-27T06:12:24.041247906Z hello docker
2016-11-27T06:12:27.042243171Z hello docker
2016-11-27T06:12:30.043316648Z hello docker
docker很便捷的是把容器做成了几条命令,直接敲几条命令就能启动几个容器,在容器里运行服务,像其他的命令一样,想知道docker的更多用法,只需要 docker --help
镜像与容器
docker镜像是用来启动容器的构建基石,能够修改,创建,存储,共享镜像,还有docker-hub和本地hub来存储和共享镜像。
1.镜像是什么
回到docker的作用上,docker相当于在寄主机上虚拟出了几个小的虚拟机,我们在构建出来的小的虚拟机里面工作,就像做系统一样,镜像就相当于我们的镜像盘,用来装机,这里相当于装的是小虚拟机。类似于所有机器的启动过程,这里的虚拟机启动也要经过引导然后运行在一定的环境中。Linux引导过程如下:
Linux操作系统引导参考:https://www.ibm.com/developerworks/cn/linux/l-linuxboot/ docker的虚拟过程与之类似。
docker的镜像是由文件系统叠加的,最低端是引导文件系统,跟Linux引导文件系统类似;也可以类比为进程加载的时候loader去加载进程的可执行文件(进程镜像),操作系统的用户不会去跟引导程序打交道,对于docker也是一样,docker用户不会与引导文件系统有什么交互,一个容器启动后,引导文件就完成了它的使命,之后就从内存中卸载了,留出更多的内存供 initrd 磁盘镜像使用。docker镜像的第二层是root文件系统rootfs,位于引导文件系统之上,rootfs可以是一种或多种操作系统(如debian,ubuntu文件系统)。
在传统的Linux引导过程中,root文件系统最先以只读的方式加载,当引导结束,它会被切换为读写模式;但是在docker里,root文件系统永远是只读的状态,并且docker又会在root文件系统上加载更多的只读文件系统,加载会将各层文件系统叠加在一起,这一层一层的文件系统成为镜像。
对于加载的多层镜像,一个镜像可以放在另一个镜像的顶部,容器的镜像最后就是一堆镜像的叠加。最后。当从一个镜像启动容器的时候,docker会在最顶层加载一个读写文件系统,我们想在docker容器中运行的程序就是在这个读写层运行的。
当docker第一次启动一个容器时,初始的读写层是空的,当文件系统发生变化的时候,这些变化都会应用在读写层上。如果想改一个文件,这个文件首先会从读写层下面的只读层复制到读写层,文件的只读版本依然存在,操作的是读写层的副本。当创建一个容器的时候,docker会构建一个镜像栈,并在栈的最顶端增加一个读写层,这个读写层加上其下面的镜像层和配制数据,就构成了容器。
构建容器
用Dockerfile能很快的利用现有镜像构建容器,dockerfile的书写有一定的规则,作用相当于Makefile对于 make,
# commet FROM ubuntu MAINTAINER changan "907743748@qq.com" RUN apt-get update RUN apt-get install -y nginx RUN echo 'index in container..' > /usr/share/nginx/html/index.html EXPOSE

容器中的80端口被映射到宿主机32772端口,一个nginx服务便在docker容器中运行了。
docker--初体验的更多相关文章
- Docker初体验
## Docker初体验 安装 因为我用的是mac,所以安装很简单,下载dmg下来之后拖拽安装即可完成. 需要注意的就是由于之前的docker是基于linux开发,不支持mac,所以就出现了docke ...
- 2.Docker初体验【Docker每天5分钟】
原文:2.Docker初体验[Docker每天5分钟] Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制.该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和 ...
- Docker深入浅出系列教程——Docker初体验
我是张飞洪,钻进浩瀚代码,十年有余,人不堪其累,吾不改其乐.我喜欢把玩代码,琢磨词句!代码算法让我穿透规律,文章摘句让我洞察人情.如果你觉得和我的看法不一样,请关注我的头条号,那我们一定合得来. Do ...
- Docker学习系列(二)Docker初体验
一.系统要求 Docker的安装,需要在CentOS 7.0+版本,内核至少3.10,64-bit uname --r [randy@randysun ~]$ uname --r -.el7.x86_ ...
- docker初体验,搭建自用的gitlab服务
一.前言 git在如日中天的版本管理系统,现在如果不是工作在git版本管理系统下,几乎都不好意思给人打招呼.现在就有现成的互联网的git服务器提供给大家使用,例如号称程序的社交网络github. 正好 ...
- docker初体验:Docker部署SpringCloud项目eureka-server
Docker部署SpringCloud项目eureka-server 1 创建eureka-server工程 创建父工程cloud-demo,其pom.xml如下: <?xml version= ...
- Docker深入浅出系列 | 容器初体验
目录 Docker深入浅出系列 | 容器初体验 教程目标 预备工作 容器与虚拟化技术 什么是Docker 为什么要用Docker 事例 什么是容器镜像和容器 容器与虚拟机的区别 Vagrant与Doc ...
- 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验
概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...
- Spring boot集成Rabbit MQ使用初体验
Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...
- kubeadm搭建K8s集群及Pod初体验
基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...
随机推荐
- angular路由——ui.route
angular路由 使用案例 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- [UWP] 对应用进行A/B测试
[对A/B测试的看法] 开发者在Dev Center中设置几种应用变体,这几种变体有几个变量的值不一样,比如有变体A和变体B(当然还可以加上变体C,Dev Center最多支持5个变体),A和B的不同 ...
- CTRL-Space always toggles Chinese IME (Windows 7、10)
一.window占用了ctrl+空格的快捷键,影响开发工具的只能提示的使用. 二.解决方式: Go to Start > Type in regedit and start it (打开运行输入 ...
- 【翻译】如何在AJAX生成的内容中再次运行Prism.js
一.前言 最近用一个十分轻量级的网页代码高亮Js库,应用到项目中发现了一个问题,对于静态的已经写好的代码,Prism的高亮插件是没有问题的,但是通过Ajax异步获取数据并修改DOM时发现,Prism高 ...
- 【总结】.Net面试题集锦(一)
一.背景 最近一直在准备面试,收到的面试邀请邮件里还有面试题,真是要当面霸的节奏,不过看看也好,一方面能够锻炼锻炼生锈的脑子,查缺补漏一下,另一方面,万一靠这几个面试题拿到offer呢,哈哈.开个玩笑 ...
- BZOJ3932: [CQOI2015]任务查询系统
传送门 真不知道我没学主席树之前是有什么勇气说自己高级数据结构以及学的七七八八了. 这道题应该也是算是主席树的经典运用. 刚开始脑抽了,想把(S,E,P)的处理直接在线用树状数组xjb搞搞算了.写完后 ...
- 前端之DIV+CSS布局
刚开始学习javaweb,首先定位学习后端,可是随着学习的深入和项目的进行,越来越发现前端知识的欠缺,之前也随着视频看过,随着时间的流逝,具体的应用也随之忘记了. 而现在开始自己练习项目,发现前端知识 ...
- JavaScript的Dom操作
两个练习: 1.两个表单里面的数据相互移动: <style type="text/css"> select { width: 100px; position: rela ...
- 美国在研新药_读取单个PDF
QQ:231469242 读取下载美国在研新药PDF内数据:unii,分子式,分子重量,药品名,who,编码,.... PDF无逻辑规则,不能百分之百提取,只能部分提取 几个默认字段为空 # -*- ...
- php 生成word的三种方式
原文地址 http://www.jb51.net/article/97253.htm 最近工作遇到关于生成word的问题 现在总结一下生成word的三种方法. btw:好像只要是标题带PHP的貌似点击 ...