Docker逐渐成为虚拟化技术的佼佼者,Java架构师之路接下来会推出一系列的Docker相关技术文章,Docker技术也是架构师的必备技能。

什么是Docker

Docker 是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotCloud公司,开发者可以打包应用到一个轻量级、可移植的容器中,然后发布到主流Linux系统上运行。

为什么用Docker

  • 持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员构建后的镜像,结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,也可以结合持续部署系统进行自动部署。

  • 更高效的资源利用:Docker是基于内核级的虚拟化,可以实现更高效的性能,同时对资源的额外需求很低,相比传统虚拟机方式,相同配置的主机能够运行更多的应用。

  • 更轻松的迁移和扩展:Docker容器几乎可以在任何平台上运行,同时支持主流的操作系统发行版本。

  • 更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到妙级,甚至毫秒级的启动时间,大大的节约了开发,测试,部署的时间。

Docker与传统虚拟机差异

传统虚拟化方式

Docker虚拟化方式

传统虚拟化是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层,而Docker容器是在操作系统层面实现虚拟化,直接复用本地主机操作系统,更加轻量级。

核心概念

  • Docker镜像:类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,使用镜像可以创建容器,可以理解为镜像是容器的基石。

  • Docker容器:是由Docker镜像创建的运行实例,类似于轻量级的沙箱,每个容器之间都是相互隔离的。支持的操作有启动,停止,删除等。

  • Docker仓库:类似于经常使用的代码仓库,如github,它是Docker集中存放镜像文件的仓所,国内也有网易,阿里等镜像仓库。

镜像操作指令

  • 获取镜像:

    docker pull centos    (默认获取centos最新的镜像)

    docker pull centos:7 (获取指定标签镜像)

  • 查看本地镜像:

    docker images

  • 查看镜像详细信息:

    docker inspect centos:7

  • 查看镜像历史:

    docker history centos:7

  • 删除镜像:

    A:使用标签删除:docker rmi centos

    B:使用ID删除:docker rimi

  • 构建镜像:

    A:使用docker commit命令

    B:使用Dockerfile构建

使用docker commit

例:构建一个带有jdk的镜像

按照如下步骤操作

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@060793baf536 /]# yum install wget
[root@060793baf536 /]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm [root@060793baf536 /]# rpm -ivh jdk-8u131-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
[root@060793baf536 /]# exit
[root@localhost ~]# docker commit 060793baf536 centos/jdk:2.0

通过docker images命令可以看到新增了centos/jdk 标签为2.0的镜像

使用Dockerfile构建

实际使用中不推荐使用docker commit构建,应使用更灵活和强大的Dockerfile构建docker镜像,直接举例来认识Dockerfile。

例:构建一个带有jdk的centos7镜像

[root@localhost Dockerfile]# mkdir Dockerfile
[root@localhost Dockerfile]# cd Dockerfile

编写Dockerfile:

FROM centos:7
MAINTAINER  Java-Road "Java-Road@qq.com" RUN mkdir /usr/local/jdk
COPY jdk-8u171-linux-x64.rpm /usr/local/jdk/
RUN rpm -ivh /usr/local/jdk/jdk-8u171-linux-x64.rpm

执行如下指令:

[root@localhost Dockerfile]# docker build -t centos/jdk .

运行结果如下:

docker images可以看到新生成的centos/jdk镜像。

容器操作指令

  • 创建启动容器:

    [root@localhost ~]# docker run centos:7 /bin/echo'hello world'

容器运行完后直接退出

  • 交互形式创建启动容器

    [root@localhost ~]# docker run -it centos:7 /bin/bash
    [root@802e3623e566 /]# ps
       PID TTY          TIME CMD
         1 ?        00:00:00 bash
        13 ?        00:00:00 ps
    [root@802e3623e566 /]# exit

    执行exit才能退出容器

  • 守护状态运行容器

    [root@localhost ~]# docker run -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"
  • 启动已有的容器:

    docker start 容器ID
    例:
    [root@localhost ~]# docker start 802e3623e566
  • 停止运行的容器:

    docker stop 容器ID
    例:
    [root@localhost ~]# docker stop 802e3623e566
  • 删除容器:

    [root@localhost ~]# docker stop 89566e38c7fb
    [root@localhost ~]# docker rm 89566e38c7fb
  • 进入运行的容器:

    [root@localhost ~]# docker exec -it cbd8b1f35dcc /bin/bash
  • 导出容器:

    导出容器cbd8b1f35dcc到centos_test.tar文件
    
    [root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc
    
    导出的tar文件可以在其他机器上,通过导入来重新运行
  • 导入容器:

    把导出的文件centos_test.tar通过docker import导入变成镜像
    
    [root@localhost ~]# docker import centos_test.tar test/centos
    
    通过docker images命令可以看到增加了个test/centos镜像

全面认识Docker和基本指令的更多相关文章

  1. Docker下操作指令

    Docker下操作指令 以mysql为例 1.搜索镜像: #docker search mysql 2.拉取镜像 #docker pull mysql:5.7 3.加载镜像并绑定端口: #docker ...

  2. 使用ASP.NET Core实现Docker的HealthCheck指令

     写在前面 HealthCheck 不仅是对应用程序内运行情况.数据流通情况进行检查, 还包括应用程序对外部服务或依赖资源的健康检查. 健康检查通常是以暴露应用程序的HTTP端点的形式 实施,可用于配 ...

  3. docker学习常用指令---第五章节

    前面我们了解了docker的基本概念,和docker镜像,端口相关的内容.在具体的实际操作过程中,我们需要了解一些相关的docker操作指令. 一.Docker save指令 指令功能:将指定镜像保存 ...

  4. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  5. 【Docker系列】:全面认识Docker和基本指令

    Docker逐渐成为虚拟化技术的佼佼者,Docker技术也是架构师的必备技能. 什么是Docker Docker 是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotClou ...

  6. Docker DockerFile文件指令 & 构建

    1.dockerfile指令格式 # Comment注释 INSTRUCTION argument指令名 + 参数 2.普通指令 1. FROM 已存在的镜像,基础镜像,第一条非注释指令 FROM & ...

  7. 【Docker】:全面认识Docker和基本指令

    Docker逐渐成为虚拟化技术的佼佼者,接下来会推出一系列的Docker相关技术文章,Docker技术也是架构师的必备技能. 什么是Docker Docker 是一个开源的应用容器引擎,基于Go语言, ...

  8. Docker常用操作指令

    1.查看正在运行的容器 docker ps 2.查看所有容器 docker ps -a 3.停用所有正在运行的容器 docker stop $(docker ps -q) 4.删除所有容器 docke ...

  9. docker win10 基本指令

    一.镜像操作 docker images 本地镜像 docker pull imagename 获取网上获取镜像 docker run 创建docker容器 docker rmi imagename ...

随机推荐

  1. MySQL数据库的账户管理

    账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud MySQL账户体系:根据账户所具有的 ...

  2. F6&F7adjust the volume

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard La ...

  3. Hexo博客系列(一)-Windows系统配置Hexo v3.x个人博客环境

    [原文链接]:https://www.tecchen.xyz/blog-hexo-env-01.html 我的个人博客:https://www.tecchen.xyz,博文同步发布到博客园. 由于精力 ...

  4. 升级vue-cli为 cli3 并创建项目

    一.升级npm install -g @vue/cli 二.创建项目 1.vue  create vue3-project 下面会提示让你配置下自己想要用到的功能,然后它会自动帮你安装,这个看自己需求 ...

  5. 分享一个电子发票信息提取工具(Python)

    电子发票太多,想统计下总额异常困难,网上工具不好用,花了2个小时实现一份,测试过中石油.京东开具的电子发票还行,部分发票名称失败有问题不影响统计,有需要的小伙伴自己拿去改吧. import cmd i ...

  6. LINQ入门教程之各种标准查询操作符(一)

    好久之前就想系统的学习下LINQ,好久之前…… 本篇文章主要介绍LINQ等的标准查询操作符,内容取自<LINQ高级编程>,后续还会介绍LINQ to XML ,LINQ to SQL. L ...

  7. web服务器/应用服务器

    1.概念 Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与客户端的网络浏览器配合.因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTT ...

  8. 关于delete和对象复制

    本码农的惯例,开篇废话几句... 前天小生又被虐了... 没办法,作为一个资深code user,我用代码的能力,解决问题的能力自问是不弱的... 但是自身的前端基础说实话还是不过硬,最明显的表现就是 ...

  9. HDOJ 5019 Revenge of GCD

    Revenge of GCD In mathematics, the greatest common divisor (gcd), also known as the greatest common ...

  10. Understanding JVM Internals---不得不转载呀

    http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ http://architects.dzone.com/art ...