docker基础入门之二

简介: 一、docker文件系统:   linuxFS包括boot file system 和 root file system   boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载;   root...

一、docker文件系统:

  linuxFS包括boot file system 和 root file system

  boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载;

  root file system(rootfs),包括类似/bin,/usr, /lib等目录,这些和kernel无关,这也是不同linux发行版本的差异所在;

         

         Linux  FS                  Linux FS in Docker 

  

  • 传统Linux启动时,将rootfs设置为readonly并检查完整性,然后设置成read-write
  • Docker在启动container的时候,也是把rootfs设置为readonly,然后通过aufs把一个read-write的文件系统挂载到rootfs之上,并且把下层文件系统设置成readonly,这样构建一个完整的操作系统;          

二、Layer FS  

                 

  • 对于每层readonly的FS,在docker中成为image
  • 对于顶上read-write的FS,成为container
  • 对于readonly中内容的修改,采用的是COW的技术,把文件复制到read-write层并修改,实际用户看到的是当前container层中的文件,image中的文件是不受影响的;

  Image:

    • 除了base image之外,每一层image都有一个parent image
    • 没有parent image的镜像叫base image
    • 基于cow的技术,image部分是不会被修改的,因此container可以共享image的FS,提高了存储效率;      

   storage  dirver

    • 除了默认的aufs之外,docker通过对于storage的抽象,可以支持一些其他的storage driver; 例如:vfs, devicemapper, btrfs
    • 修改docker启动时候的参数设置,增加——storage-driver = {storage plugin}在配置文件中;       

  docker hub:

    docker官方提供的用来共享image的平台;

  镜像命名和版本管理:

    • base image是docker官方提供的基础镜像;
    • 普通镜像的命名规范{namespace}/{repository name}:{tag}
    • namespace是docker hub的用户名,实际是起namespace作用
    • repository,类似于github的项目,例如ubuntu, mysql等;
    • tag,表示版本信息,例如cp/mysql:5.5,  tag是可选的,默认值是latest      

   查找Image: docker search {repository name}    #默认是在docker hub上进心搜索

   获取Image: docker pull {image name}       #如果不指定tag的话,会把该image的所有tags都会download下来;

   上传Image:

      1、docker login      #登录到docker hub中

      2、把container通过docker commit的命令转化成一个Image

      3、通过docker tag来命名新生成的Image

      4、docker push到docker hub中;

三、基本操作:

  运行container:

    • 运行一个container的本事就是开启一个具有独立namespace的进程
    • docker 通过run的命令来启动一个container
    • 运行一个container必须要指定一个image作为初始化的文件系统;  

   sudo docker run [OPTIONS]  IMAGE[:TAG]   [COMMANG][ARG....]

  Image:

    对于不存在的Image,Docker会自动会Registry里面下载对于的Image,然后再运行container 

  COMMAND:

    command标志的是container中实际运行的首进程;

    如果Image里面包含了CMD的指令,那么在启动container的时候,不需要指定command,否则会使用指向command来覆盖Image的cmd

  前台运行or后台运行:

    • 默认的Container是在前台运行的,会绑定command进程的STDIN、STDOUT、STDERR到console上;
    • 可以通过-d的选项让container运行在后台;  
    • 如果是前台运行,也可以通过指定-a {STDOUT、STDIN、STDERR}选择需要绑定的IO
    • 前后台切换;通过attach命令可以重新attache一个后台运行的container 

   在后台运行的情况下,run命令会返回一下UUID,唯一标识container

   可以通过docker ps来查看container的UUID和运行信息

   可以通过指定——name的方式来指定container的名字,名字必须唯一

  inspect:

    通过docker  inspect {Container ID}来获取container的更多的信息,包括网络、volume,实际在HOST上的进程ID等信息;

  Log:

    通过Logs命令可以看到Container中的Command所指向进程的STDOUT、STDERR数据;

  环境变量:

    通过-e参数,可以在运行container的时候添加环境变量;

  Network架构:

    • 在Host主机上的一个veth{id}的虚拟网卡和一个container里面的eth0网卡一一映射
    • Host上的bridge负责把数据流在不同的veth间转发,实现网络的IO
    • bridge(docker0)使用RFC1918私有网络,给每一个container分配ip

      

  网络设置:

    • 通过——net参数来修改container的网络设置,默认是bridge的方式;  --net host 
      • none表示关闭container的网络连接
      • host表示使用主机的网络栈,这个时候host主机不会创建veth虚拟网卡映射
      • container:{name|id}, 使用另外一个container的网络栈  

  端口映射:

    Docker通过采用端口映射的方式,允许把内部container的服务端口暴露到外部;

    使用-p参数可以指定需要暴露的container的内部端口,在不指定特定的Host的对应端口的情况下,docker会自动分配(49000-49900)在一个Host上的端口与其映射;

    使用-p参数,表示暴露所有在Image中通过expose指定的端口;

 volume绑定:

    通过-v参数,可以把Host上的一个目录绑定到container中,允许container对其进行读写;

    docker run -v /home/test:/vagrant  -t  ubuntu ls -al /vagrant

 容器间通信:

    通过link参数,把container的端口信息暴露到另一个container中,实现container之间的通信;

    docker run --link redis:db  -t ubuntu  sh -c "export"

   

相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
87 5
|
1月前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
7天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
15天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
21天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
57 2
|
28天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
42 3
|
1月前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
46 2
|
1月前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
下一篇
无影云桌面