目录
序言
一、什么是容器
二、docker入门
2.1安装启动
2.2docker使用
  2.2.1 helloworld
2.2.2 容器
2.2.3 镜像
2.2.4 容器的连接
 
 

序言

  虚拟化一般指的是虚拟机,虚拟机之前是物理机时代。

  首先物理机有以下缺点,1.费用太贵了2.运维以前基于某种os开发,可移植性过低3.物理机可能跑一点应用而已,资源不能有效利用 4.购买物理机需要时间,组装等导致上线速度慢

  那么虚拟技术应运而生,现在是基于Hypervisor,比如VMWare,KVM、,AWS等等。相对物理机我们能装不同的操作系统。

优点:

1.资源有效利用相对物理机,一个os可以运行很多操作系统

2.上线快

3.扩展、伸缩

局限:

1.os内核资源重复消耗资源

2.应用的移植性不高

  所以现在我们基于容器做虚拟化。

一、什么是容器

容器是一种轻量级的,可移植的软件的打包技术,我们需要容器就是因为我们需要它的可移植能力。docker里面先把容器理解为一个虚拟机,好的我们开始吧。

二、docker入门

2.1安装启动


$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装一些必要的系统工具:


sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:


sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:


sudo yum makecache fast

安装 Docker-ce:


sudo yum -y install docker

启动 Docker 后台服务


sudo systemctl start docker

测试运行 hello-world,这个命令会发现很卡,执行一分钟不动的话就ctr+c退出,我们接下来配置国内镜像加速

 docker run hello-world

现在配置国内镜像

vi /etc/docker/daemon.json 请在该配置文件中加入(没有该文件的话,请先建一个):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

打开后发现里面内容是{},直接加上去就好了。

现在我们重新运行helloworld

2.2 docker使用

2.2.1 docker helloworld

现在我们跑一个容器,在容器里面输出helloworld,其实就相当于开了个ubanto在里面执行

/bin/echo "Hello world"命令
docker run ubuntu:15.10 /bin/echo "Hello world"

我们也可以弄个交互式,所谓交互式就是我们不是创建了个ubantu容器嘛,我们现在进去里面look一look

docker run -i -t ubuntu:15.10 /bin/bash

呐,现在我们就进去了,exit可以退出来。如果想后台启动,加上-d即可,首先它可以这么用的

我们发现这他么没打helloworld,却打印了个长字符,这个就是容器的id

它的后台进程也可以/bin/sh -c “”你的sh脚本”来执行

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

打印出来的也是个容器id

我们 docker ps查看一下运行的容器

复制这个containerId

docker logs 你的容器id或name

  

可以看到容器内输出了一堆的hello world,使用name也是可以的

可以用docker stop+id把这个容器停止了

2.2.2 docker 容器的使用

现在我们用docker搞个web应用,我们在docker容器里面跑一个Python的flask应用~令人怀念的flask啊。

我们使用docker pull 命令可以拉取一个镜像

docker pull training/webapp

现在我们启动容器

 docker run -d -P training/webapp python app.py

之前说过-d是后台,-p是将容器内部的端口映射到主机上面去。

现在我们用docker ps 查看我们现在在运行的容器

这个的意思就是docker开放了5000端口到主机的32768端口,咱访问一下

好的,这样我们就访问到了,但是整天32768也不是个事儿,自己定义5000端口吧

 docker run -d -p : training/webapp python app.py

对了,这个时候是启动了新的容器,原来的容器是没有关掉的

想查看端口的话,docker port+id或者名字挺好。

假如我想看里面运行的python程序的日志

docker logs -f +id

查看docker容器的进程也是top命令,我们用docker top

我们可以用docker inspect查看docker容器的配置和状态信息

现在我们看一下run启动和start(重启)这两个

我们停一下容器,再将它重启。。。慢着,我去哪儿看已经停止的docker容器啊我去

docker ps 下面没了呀我去

好吧,我们先试着下一个命令,docker rm 删除不需要的容器

会发现报错了,因为我们的docker容器还在开着,好吧把他关了

现在就删除成功了

2.2.3 镜像

我们之前run hello-world的时候也看到这一幕

运行容器的时候,如果本地的镜像是不存在的,那么docker自动从docker镜像仓库dockerhub下载

我们用docker images列出所有docker的镜像

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签,同一个仓库员可以有多个tag版本

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

获取镜像

,我们用docker pull

docker pull ubuntu:13.10

查找镜像,我们用docker search +镜像名称

现在我们创建一个新的镜像,首先我们用之前的镜像做一个容器,然后apt-get update进行更新

docker run -t -i ubuntu:15.10 /bin/bash
apt-get update

完毕后exit退出。现在这个容器被我们改了。我们用docker commit提交它 ,daysn/ubantu:v2是定义的镜像名

docker commit -m="更新的信息 " -a="镜像的作者名" f641b501fc52 daysn/ubantu:v2

现在我们docker images一下

现在我们启动一下我们的这个镜像

我们刚刚用一个已经有的镜像建立了一个新的镜像,现在我们从0开始建立镜像

在路径下新建一个Dockerfile ,vi Dockerfile

开始build,“.”表示拿当前路径的Dockerfile

docker build -t daysn/centos:6.7 .

docker images看一看

参考链接

http://www.runoob.com

微服务-封装-docker by daysn大雄的更多相关文章

  1. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  2. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

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

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

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

    小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...

  5. 微服务-网关-node.js by 大雄daysn

    目录 序言 一.node.js入门1.1 下载并安装1.2 从helloworld到一个web应用1.3 Express框架二.node.js搭建网关 三.node.js集群搭建   序言 首先一个问 ...

  6. 微服务SpringCloud+Docker入门到高级实战(教程详情)

    第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可 ...

  7. 微服务 SpringCloud + docker

    最近看到微服务很火,也是未来的趋势,所以就去学习下 好,接下来我们来认识下spring cloud.一.什么是spring cloud?它的中文官网这样说: 微服务架构集大成者,云计算最佳业务实践. ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介

    笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...

  9. 微服务之docker(一)

    一.docker介绍及使用 1.docker简介 (1)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windo ...

随机推荐

  1. 关于.net里面的静态html页面和接口组合使用的网站

    在网站的根目录下,主要有三部分组成.①接口里面的bin文件夹②接口③html里面的页面. html里面有ajax请求接口的js代码.另外接口里面的web.config不需要拷贝到网站根目录去. 如下截 ...

  2. Kubernetes 网络改进的三项实践分享

    自研CNI IPAM插件 解决K8s功能问题 首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现 ...

  3. Kali密码攻击之——离线攻击工具

    在线密码攻击在渗透测试中很重要,但对于测试过程中得到的哈希,加密数据,又需要离线破解工具辅助解决 Creddump套件 kali下离线攻击工具中的Cache-dump,lsadump,pwdump,均 ...

  4. Access restriction: The type 'Unsafe' is not API

    错误:Access restriction: The type 'Unsafe' is not API Eclipse中有一种叫做存取限制的机制,来防止你错误使用那些非共享的API.通常来说,Ecli ...

  5. python从字符串中提取指定的内容

    有如下字符串: text=cssPath:"http://imgcache.qq.com/ptlogin/v4/style/32",sig:"OvL7F1OQEojtPk ...

  6. 输出JSON

    <?php header("Content-type: text/html; charset=utf-8"); $host = '数据库IP'; $dbname = '数据库 ...

  7. Learning-Python【16】:模块的导入使用

    一.什么是模块 模块就是一系列功能的集合体,一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 模块有三种来源: 1.内置的模块 2.第三方的模块 3.自定义模块 ...

  8. 大项目小细节---onbeforeunload增强用户体验

    微信公众平台编辑数据页面,点击浏览器回退按钮.刷新按钮(包括F5.Ctrl+R).关闭页面.点击其他超链接等操作的时候,会提示弹窗提示. 为增加用户体验,我们也增加类似功能. 代码如下: @if (R ...

  9. 20165306 2017-2018-2《Java程序设计》课程总结

    课程总结 每周作业链接汇总: 预备作业一:我期望的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:Linux安装与学习 第一周作业:Java入门 第二周作业:基本数据类型与数组,运算符.表 ...

  10. CSS布局学习(三) - Normal Flow 正常布局流(官网直译)

    默认情况下,元素是如何布局? 首先,取得元素的内容,加上内边距(padding),边框(border),外边距(margin)放在一个盒子中 - 这就是我们之前看到的盒子模型 默认情况下,块级元素的内 ...