docker初识

2018-05-12  本文已影响14人  云师兄

虚拟化技术的优点

  1. 一个物理机的资源分配到了不同的虚拟机里
  2. 很容易扩展,可以加物理机器或者虚拟机
  3. 很容易云化,亚马逊AWS或阿里云提供虚拟机

虚拟化的局限性

  1. 每一个虚拟机都需要占用操作系统本身的资源,虚拟机数量增多时,消耗资源也增多。
  2. 开发和运维面临的挑战是每涉及到相关技术就需要设置环境,当测试环境、开发环境、线上环境之间切换的时候在各种配置和软件安装上就变得非常麻烦,由此引入容器技术,容器就像一个集装箱,它是对软件和其依赖的标准化打包,应用之间相互隔离,共享同一个kernel。

容器和虚拟化技术的区别

image.png

docker-容器技术的一种实现

docker提供了一个开发,打包,运行app的平台,它把app和底层隔离开来。


image.png

其中docker engine是docker平台的核心。

docker engine

docker engine主要分为三部分:

  1. 后台进程(dockerd)
  2. rest api server
  3. cli接口(docker)

docker的三大核心概念--镜像,容器和仓库

  1. 镜像类似于虚拟机镜像,是一个只读的模板,里面可以包含一个基本的操作系统和需要的应用程序。
  2. 容器类似于一个沙箱,docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。
  3. docker仓库是集中存放镜像文件的场所。另外仓库又存放在仓库注册服务器中,不同的仓库通过标签来区分,一个仓库中存放一类镜像文件。

镜像/image

image的概念:


image.png

'

image的获取方式:

  1. 通过dockerfile获取,在dockerfile同目录下使用docker build命令创建镜像。
  2. 从仓库(Registry)中pull image,默认的仓库是官方的dockerHub,使用的命令为docker pull

如何自行创建一个base image:

示例:创建一个hello world镜像:

首先在linux环境中建立一个hello-world目录,在其中创建一个hello.c文件,具体代码如下:

#include <stdio.h>
int main() {
  printf("hello docker\n");
}

为了编译这个文件,我们需要安装gcc编译器:

sudo yum install gcc
sudo yum install glibc-static

通过执行:
gcc -static hello.c -o hello
生成可执行文件后,在创建一个Dockerfile,把上面生成的可执行文件hello打成一个image,Dockerfile的内容如下:

FROM scratch
ADD hello /
CMD ["/hello"]

最后在Dockerfile所在目录下进行打包生成镜像文件:

docker build -t yubuyun/hello-world .

通过docker iamge ls命令就可以看到我们做好的镜像文件了。
当我们执行docker run yubuyun/hello-world命令后就打印出:hello docker,说明成功了。

Container

示例:
根据镜像ID启动容器实例:
docker run -it IMAGE ID //-it 可以进入容器的终端进行交互

把container 提交成为一个新的image

使用docker commit NAMES IMAGE的命令来基于一个现有的容器创建一个新的镜像。比如我们从centos镜像实例了一个容器,然后在容器上装了vim,当我们使用这个装好vim的容器来创建出一个新的镜像后,这个镜像就已经装好了vim。

使用Dockerfile创建一个镜像

在某个Dockerfile文件中:

FROM centos
RUN yum install -y vim

FROM语句表示镜像的来源,比如之前写的FROM scratch表示没有来源,而FROM centos表示基于centos的镜像。第二句RUN命令表示预先安装vim(-y表示安装的时候都选同意)。当我们使用这个文件来执行docker build -t yubuyun/centos-vim-new .的时候发现它先创建一个容器,紧接着就在这个容器上安装vim。

Dockerfile语法

WORKDIR /root
ADD hello test/

表示将hello文件拷贝到容器的/root/test/目录下。

上传docker image

  1. 首先在docker hub上注册。
  2. 注册完后,执行docker image push(可以简写为docker push)命令:
    docker image push yubuyun/hello-world:latest
    这样就开始上传自己的镜像了。

拉取docker image

执行:docker pull yubuyun/hello-world即可从docker hub上拉取image

如何发布和获取仅对自己可见的docker image

此处先略过。

上一篇 下一篇

猜你喜欢

热点阅读