Docker重要概念及基本操作

版权声明:作者已开启版权声明,如转载请注明转载地址。 https://blog.csdn.net/qq_34829447/article/details/83796847

一.Docker架构和底层技术简介

1.Docker Platform

  • Docker提供了一个开发,打包,运行app的平台
  • 把app和底层infrastructure(physical/virtual物理设备和虚拟设备)隔离开来

2.Docker Engine

  • 后台进程(dockerd)
  • 提供REST API Server
  • CLI 接口(docker)

3.Docker Architecture(Docker整体架构)

在这里插入图片描述

  • Client(命令行中常用的命令)
  • DOCKER_HOST
    • image镜像
    • containers容器
  • Registry(存储镜像的公共服务器,用于images的存储与获取)

4.底层技术支持

  • Namespaces:做隔离pid,net,ipc,mnt,uts
  • Control groups:做资源限制(指定容器用多少内存)
  • Union file systems:Container和image的分层

5.实验环境介绍

  • 使用已经搭建好的实验环境【暂时还没有发布】
  • 执行vagrant up命令开启centos7的虚拟机,这个虚拟机中已经安装好docker了
  • 执行vagrant ssh登录centos虚拟机中

二.Docker image概述(Image即镜像)

1.什么是Image

  • 文件和meta data的集合(root filesystem)
  • 分层的,并且每一层都可以添加改变删除文件,成为一个新的image
  • 不同的image可以共享相同的layer
  • Image本身是read-only的
    在这里插入图片描述

2.实例了解Image

  • 执行docker image ls查看本地的所有image

3.Image的获取

  • 通过Dockerfile格式的文件build出来对应的image(Build from Dockerfile)

  • 从Registry拉取Image(Pull from Registry)

    sudo docker pull ubuntu:14.04#从registry中拉取ubuntu14.04的image,不加版本号取的是最新版本
    #上述拉取的方式是从docker hub中取出的,https://hubs.docker.com
    
    • 上述拉取的方式是从docker hub中取出的,https://hubs.docker.com
    • 如果不携带版本号的拉取,拿到的是最新版本
    • 如果pull的内容带对应路径,如sudo docker pull binami/wordpress,该内容不是官方给提供的,其中binami为用户名;若想取官方image则需要执行sudo docker pull wordpress

三.DIY一个Base Image

1.提升docker命令的执行权限

#我们通常执行
#sudo docker image ls 查看docker中的image
#执行 docker image ls 会提示权限不足
#执行如下命令提升权限
sudo groupadd docker
sudo gpasswd -a vagrant docker
sudo service docker restart#重启docker服务
#使用vagrant ssh重新登录后,执行docker image ls可以直接查看结果

2.使用官方hello-world的image

docker pull hello-world#从registry中获得hello-world的baseimage,执行hello-world会创建一个容器
docker run hello-world#执行hello-world的container

3.通过c语言编写hello world,将hello wrold编译执行成二进制的可执行文件

  • 执行vim hello.c创建hello.c

  • 编写hello.c

    #include<stdio.h>
    int main()
    {
        printf('hello docker\n')
    }
    
  • 编译c语言文件成二进制文件(编译c语言使用gcc)

    #安装gcc
    sudo yum install gcc
    #安装glibc-static
    sudo yum install glibc-static
    #安装后执行如下命令进行编译c语言文件
    gcc -static hello.c -o hello
    #此时我们将hello.c文件编译成名为hello的可执行文件
    #可以使用./hello直接执行hello文件
    
  • 编写Dockerfile文件

    FROM scratch #表示当前image是base image
    ADD hello / #将hello运行到根目录中
    CMD [~/hello~]
    
  • 执行docker build -t jack/hello-world .构建Base image,最后的点表示在当前路径找Dockerfile

  • 通过dockerfile将此可执行文件打成docker image

  • 使用docker run jack/hello-world执行创建的container,会打印hello docker

四.初识container

1.什么是Container

  • 通过Image创建(copy)
  • 在Image layer之上建立一个container layer(可读写)
  • 类比面向对象:类(Image)和实例(Container)
  • Image负责app的存储和分发,Container负责运行app

2.container命令

  • docker container ls查看当前正在运行的container
  • docker container ls -a查看所有的container(当前正在运行的和退出的)
  • 如上述docker run jack/hello-world创建并运行container,运行后就会退出,故直接使用ls查看不到
  • 若想创建后不退出则可以使用命令docker run -it centos,则会创建container并不会退出,直接使用ls可以查看到对应的contianer,相当于在image上多了一个layer
  • 执行docker container rm ID号即可将对应退出的container删除【使用docker rm ID号默认移除的就是container】
  • 执行docker image rm ID号即可移除image【使用docker rmi ID号移除Image】
  • 余下命令及参数请查阅相关文档

五.构建自己的Docker镜像

1.Docker命令

  • docker container commit Container名字 Image名字[简写:docker commit Container名字 Image名字]先基于某个image创建一个container,之后在container中做某些变化(如添加软件),之后将其commit成一个新的image
  • docker image build[简写:docker build]通过Dockerfile创建一个image

2.Docker命令应用实例

  • 场景一:
    • 在image1中创建一个container,并安装vim
    • 执行docker commit...将container变成image2【image2的大小比image1大,相当于填了一层并安装了vim】
  • 场景二:
    • 在image1中创建一个Dockerfile,内容如下
      FROM centos #表示base image是centos
      RUN yum install -y vim #表示运行相关命令
      
    • 通过docker build -t Image名 .会创建临时的container并安装vim,安装后会将container变成image并移除临时的container

猜你喜欢

转载自blog.csdn.net/qq_34829447/article/details/83796847