zoukankan      html  css  js  c++  java
  • 【Docker系列】全面认识Docker和基本指令

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

    640

    什么是Docker

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

    640

    为什么用Docker

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

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

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

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

    640

    Docker与传统虚拟机差异

    640

    传统虚拟化方式

    640

    Docker虚拟化方式

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

    640

    核心概念

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

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

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

    640

    镜像操作指令

    • 获取镜像:

      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 .
    

    运行结果如下:

    640

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

    640

    容器操作指令

    • 创建启动容器:

      [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镜像

    往期推荐

     

    【技术篇】

    【技术篇】 

    【技术篇】 

    【技术篇】 

    640?wx_fmt=jpeg

    Java架构师之路,一个汇聚六万技术人的圈子,让学习之路更有趣!

  • 相关阅读:
    解决U3D4.1.5或以上无法启动MONODEV的方法
    unity的List构造函数在IOS平台存在缺陷
    【Python爬虫】性能提升
    【JavaScript+jQuery】JavaScript权威指南读书笔记1
    【Python爬虫】爬虫的基本修养
    【Python基础】Python yield 用法
    【Python进阶】回调函数
    【Python基础】Python输出终端的颜色显示
    【python进阶】并发编程-线程进程协程
    【项目实战开发】密码加密处理后登录验证
  • 原文地址:https://www.cnblogs.com/Java-Road/p/11824679.html
Copyright © 2011-2022 走看看