Docker容器化技术

一、介绍

  • 开源的应用容器引擎,基于Go语言开发
  • 容器是完全使用沙箱,容器开销极低
  • Docker就是容器化技术代名词
  • Docker也具备一定虚拟化职能
  • 标准的应用打包

二、Docker的发展

三、Docker安装

1.安装utils

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

后两个工具是持久化工具,yum-utils是省去安装源配置过程

2.yum-config-manager 是yum-utils的命令,如果没有,则会采用去复制repo到某目录,然后刷新yum(比较麻烦)

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

3.让yum检测最快的源并使用

yum makecache fast

4.安装docker,ce是社区版本

yum -y install docker-ce

5.启动服务

service docker start
或者
systemctl start docker

6.查看docker版本

由于docker是CS架构,所以我们这次查看有Server和Client,在第四步安装,我们就已经安装了Server和Client

docker version

7.拉取hello-world

docker pull hello-world

8.执行hello-world

docker run hello-world

注意:

  • 第七步如果下载失败,则可以使用阿里云的加速代理,加速代理的教程四。

  • 目前Windows 10 64bit也支持了docker,其他版本windows均不支持。

四、阿里云Docker镜像加速

登录阿里云,进入后台

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的码"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 使用tee进行输出{}这段json文本

  • 辅助进程重载

  • 重启docker

五、Docker的基本概念

  • Docker是提供应用打包,部署与运行应用的容器化平台

总体架构

  • Docker引擎分为3个,内层是一个docker daemon,中间层REST API进行通讯,最外层是CLI,我们通过REST API进行与server进行通讯。
  • 因为通讯是REST API,所以我们使用协议是HTTP 协议

Docker引擎

  • 容器与镜像

镜像:镜像是文件,只读的,提供了运行完整软硬件应用程序的集装箱

容器:是镜像的实例,由Docker负责创建,容器之间彼此隔离

  • Docker执行流程

客户端来向服务端发送命令,服务端由Docker daemon来负责管理Containers和Images,最右边是注册中心,用来保存各种各样的镜像文件

docker执行流程

六、命令

  • docker pull imageName<:tags> 远程仓库抽取镜像
  • docker images 查看远程抽取镜像
  • docker run 创建容器,启动应用
  • docker ps 查看正在运行的镜像
  • docker rm 删除容器
  • docker rmi 删除镜像

七、Docker宿主机与容器通信

我们可以使用docker进行端口映射

ip运行原理

容器正常启动,内部8080映射到8000端口

docker run -p 8000:8080 tomcat

容器后台运行

docker run -p 8000:8080 -d tomcat

杀死后台容器

docker kill containerID

八、容器内部结构

  • 以tomcat为例,Tomcat容器内部组件

Tomcat组件

  • 思考:为什么有个linux文件还这么小?

理由:linux仅支持这个应用,其他组件一律没有安装,所以占用资源较少

  • 容器中执行命令
docker exec [-it] 容器id 命令

例子

docker exec -it 098988czcd /bin/bash

退出命令

exit

九、容器生命周期

容器生命周期图

  • docker run = docker create + docker start

  • docker create 单执行,则会进入停止状态

    • 执行docker start 进入开始状态
    • docker destroy 删除容器
  • docker kill 或者 docker stop 都置die状态,紧接着进入stop状态

    • docker kill 后进行docker start 创建新进程
    • docker stop 后进行docker start 进入恢复
  • docker restart 可以重启

  • docker pause 进行暂停状态

  • 内存溢出OOM,会置die

  • 查看状态 docker ps -a 我们会发现更多子状态

十、Dockerfile构建镜像

  • Dockerfile是一个包含用于组合镜像命令的文本文件
  • Docker读取Dockerfile中指令,进行自动生成镜像
  • docker build -t 机构/镜像名<:tags> Dockerfile目录

案例dockerfile

from tomcat:latest //设置基准镜像
MAINTAINER xxx.com //拥有者
WORKDIR /opt/tomcat/webapps //结合web容器路径进行放置打包,如果目录不存在,则创建
ADD docker-web ./docker-web //添加 docker-web ./docker-web

实际案例

创建dockerweb文件夹,内部放一个index.html

在外部书写Dockerfile,无扩展名

FROM consol/tomcat-7.0

MAINTAINER steveyu.com

WORKDIR /opt/tomcat/webapps

ADD docker-web ./docker-web

执行 docker build -t steveyu/mywebapp:1.0 /usr/local
  • 镜像分层

镜像构件图

我们在处理的时候,每一层都是一个镜像,处理过的镜像不必要重新处理,极大加快了构建镜像的速度

Docker容器化技术(上)的更多相关文章

  1. Docker容器化技术(下)

    Docker容器化技术(下) 一.Dockerfile基础命令 1.1.FROM - 基于基准镜像 FROM centos #制作基准镜像(基于centos) FROM scratch #不依赖任何基 ...

  2. 新一代Java程序员必学的Docker容器化技术基础篇

    Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...

  3. Docker容器化技术

    1. 初始Docker 1.1 Docker概念 Docker概念:Docker是一个开源的应用容器引擎 诞生于2013年初,基于Go实现,dotCloud公司出品(后改名为Docker Inc) D ...

  4. Java 服务 Docker 容器化最佳实践

    转载自:https://mp.weixin.qq.com/s/d2PFISYUy6X6ZAOGu0-Kig 1. 概述 当我们在容器中运行 Java 应用程序时,可能希望对其进行调整参数以充分利用资源 ...

  5. 通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署

    通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署 Intro Azure DevOps Pipeline 现在对于公开的项目完全免费,这对于开源项目来讲无疑是个巨大的 ...

  6. [ci]jenkins-slave-ssh docker容器化-用户名密码

    jenkins-slave-ssh docker容器化 架构 参考:https://www.youtube.com/watch?v=OxrBCt1JLuQ https://github.com/Dav ...

  7. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  8. docker容器化python服务部署(supervisor-gunicorn-flask)

    docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...

  9. 利用 ELK 搭建 Docker 容器化应用日志中心

    利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...

随机推荐

  1. css3逐帧动画

    写css3动画的时候,我们经常用到animation来实现,默认情况下,animation是属于连贯性的ease动画.我们熟悉的animation动画有ease.ease-in.ease-out.li ...

  2. [LeetCode] 656. Coin Path 硬币路径

    Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...

  3. [LeetCode] 774. Minimize Max Distance to Gas Station 最小化加油站间的最大距离

    On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., statio ...

  4. 【Tools】HP/惠普v285w 量产工具

    前段时间朋友说自己u盘坏了,让帮忙看看.看下图是这个u盘. 坏的问题:往里面复制东西,提示:请去掉写保护或使用另一张磁盘.但是能正常从里面读取出来数据. 无论更换电脑,还是使用网上的修改注册表等方式皆 ...

  5. 使用Nginx+WordPress搭建个人网站

    背景 很多研究技术的朋友喜欢写博客.如果希望搭建一个完全属于自己的网站,也并不困难.这里简要分享一下我搭建这个博客网站的经验. 关键步骤 购买服务器.域名.DNS云解析服务 网站备案(可选) 安装Ng ...

  6. Django ORM 数据库设置和读写分离

    一 Django的数据库配置 (一)修改settings.py文件关于数据库的配置: Django默认使用sqlite: DATABASES = { 'default': { 'ENGINE': 'd ...

  7. js获取日期时间

    获取当前时间 function getNowFormatDate() {//获取当前时间 var date = new Date(); var symbol_gang = "-"; ...

  8. 常用Tables控件介绍(三)

    向datagrid中添加临时记录: 代码: $(function(){ fun={ add:function(){ $.ajaxSettings.async=false; var rows=$('#d ...

  9. Xcode中提高效率的快捷键

    依稀记得大神都是使用超多的快捷键来开发的.虽然要成为大神的路很远,不过把下面这些快捷键用熟练,就相当于把宝剑磨的既快又光,相当于有了一件极品的装备,对于接下来的打(升)怪(职)升(加)级(薪)那肯定是 ...

  10. ax 2012批处理不运行问题

    最近在开发12的批处理,但是很奇怪所有的都配置好了就是不跑批处理,假如你也出现了那用下面的方法试试: 12的批处理和09不一样,不是运行x++代码,而且运行你CIL生成的DLL文件, 1.你必须让你的 ...