docker

Posted cc77

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker相关的知识,希望对你有一定的参考价值。

一、什么是容器?

生活领域中的:容器是一种基础工具,泛指任何可以用于容纳存储其他物品的工具(瓶、罐、碗)

计算机领域中:容器以一种特定的格式来打包软件,这种格式可以各自独立的运行在同一个操作系统之上,不像虚拟机,容器不会捆绑一个完整的操作系统,仅仅打包软件运行所需要的依赖库和设置,可以实现高效、轻量级、自给自足的系统、可以保证软件总是以相同的方式运行,而不管它被部署在哪里。

容器是一种打包应用的方式,可以帮助打包应用中的所有软件和软件所依赖的环境,并且可以实现跨平台部署。

 

二、容器和虚拟化的区别?

虚拟化是通过虚拟化技术,将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真正的物理机上,对于主机级虚拟化,实现方式一般是想办法去模拟出硬件环境,模拟出虚拟的cpu、内存、硬盘、网卡等资源,然后在这些虚拟资源之上安装合适的操作系统来控制这些资源。

虚拟机与虚拟机之间是完全隔离的,也就是说一台虚拟机上运行的进程与其他虚拟机上运行的进程是互不干扰的,所以隔离性也是虚拟化所追求的一个目标。

虚拟化存在以下几个缺点:

1、资源占用多:

虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕里面的应用程序,真正使用的内存只有1MB,虚拟机依然需要几百MB的内存才能运行。

2、冗余步骤多:

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

3、启动慢:

启动操作系统需要多久,虚拟机启动就需要多久。

由于虚拟机存在这些缺点,所以又发展出另一种虚拟化技术:容器

容器:不是模拟一个完整的操作系统,而是对进程进行隔离,在正常进程外面套一个保护层,对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统隔离。

容器是进程级别的,相比虚拟机有很多优势:

1、启动快:

启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

2、资源占用少:

容器只占用需要的资源,虚拟机是完整的操作系统,会占用所有资源,多个容器可以共享资源,虚拟机是独享资源。

3、体积小:

容器只要包含用到的组即可,虚拟机是整个操作系统的打包。

4、简化部署:

容器技术可以将应用打包成单一地址访问的、Registry存储的、 通过一行命令就可以部署完成的组件。

5、服务组合:

通过容器技术将不同服务封装在对应的容器中

6、易于迁移:容器技术最重要的价值就是为在不同主机上运行服务提供一个轻便的、一致的格式。

容器与虚拟机的区别:

虚拟化使得多个操作系统可同时运行在单个系统上

容器则可共享同一个操作系统的内核,将应用程序与系统其它部分隔离开

 

 

三、为什么需要容器?容器到底解决的是什么问题?

 

简要的答案:容器使软件具备了超强的可移植能力

以前几乎所有的应用都采用三层架构,系统部署到有限的几台物理服务器上,现在开发人员通常使用多种服务构建和组装应用,而且应用会部署到不同的环境比如虚拟服务器,私有云和公有云。

容器运用了集装箱思想将软件打包,为代码提供了一个基于容器的标准化运输系统。可以将任何应用及其依赖打包成一个轻量级、可移植的容器。容器可以运行在几乎所有的操作系统上。

四、什么是Docker ?

Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,能极大简化环境运维过程。

Docker是基于Go语言实现的云开源项目,诞生于2013年。专注于Docker相关技术和产品的开发。

Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

技术图片

 

docker的Logo为蓝色鲸鱼,驮着许多集装箱。Docker将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统。

特性

集装箱

Docker容器

打包对象

几乎任何货物

任何软件及其依赖

硬件依赖

标准形状和接口允许集装箱被装卸到各种交通工具,整个运输过程无须打开。

容器无须修改便可运行在几乎所有的平台上:虚拟机、物理机、公有云、私有云

隔离性

集装箱可以重叠起来一起运输, 香蕉再也不会被铁桶压烂了

资源、网络、库都是隔离的, 不会出现依赖问题

自动化

标准接口使集装箱很容易自动装卸和移动

提供run、start、Stop等标准化操作, 非常适合自动化

高效性

无须开箱,可在各种交通工具间快速搬运

轻盘级,能够快速启动和迁移

职责分工

货主只需考虑把什么放到集装箱里,承运方只需关心怎样运输集装

开发人员只需考虑怎么写代码, 运维人员只需关心如何配置基础环境

Docker的英文本意是“搬运工”, Docker搬运的是集装箱,集装箱里装的是任意类型的应用程序和该应用程序所依赖的环境

五、安装docker

1、大多数用户设置Docker库然后安装,对安装和升级任务轻松。这是推荐的方法。

2、有些用户下载RPM包并手动安装,并完全手动管理升级。没有互联网连接下的好方法。

3、在测试和开发环境,一些用户选择使用自动化脚本安装Docker。

卸载旧版本

Docker的旧版本被称为docker或docker-engine。如果这些已安装,请卸载它们以及关联的依赖关系

 $ sudo yum remove docker

                  docker-client

                  docker-client-latest

                  docker-common

                  docker-latest

                  docker-latest-logrotate

                  docker-logrotate

                  docker-selinux

                  docker-engine-selinux

                  docker-engine

安装Docker CE

1.安装需求包:

$ sudo yum install  -y  yum-utils  device-mapper-persistent-data  lvm2

2.安装stable标准库:

官方源:

$ sudo yum-config-manager

    --add-repo

    https://download.docker.com/linux/centos/docker-ce.repo

国内源:

$ sudo yum-config-manager

--add-repo

https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker-ce

1.安装最新版本:

$ sudo yum -y install docker-ce

这个命令会安装最新版本,安装完后,并不会启动docker,会创建docker组,但是组中没有任何用户。

2.可以使用以下命令列出可用版本,选择安装不同版本。

$ yum list docker-ce --showduplicates | sort -r

$ sudo yum install docker-ce-<VERSION STRING>

3.启动docker

$ sudo systemctl enable docker

$ sudo systemctl start docker

$ sudo systemctl status docker

4.测试.

检查docker是否正确安装并运行hello-world镜像

#docker run hello-world

技术图片

 

完成安装!!!

出于安全考虑,一般不会直接使用root用户。因此,将需要使用 docker 的用户加入docker用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入docker组:

$ sudo usermod -aG docker $USER   或  gpasswd -a username docker

重启docker后台服务

注销,然后再登陆

运行容器

# docker run -d -p 80:80 httpd

并将容器的80端口映射到host的80端口

六、Docker的体系架构

Docker 客户端:Client

Docker 服务器:Docker daemon

Docker 镜像:Image

Registry:镜像仓库

Docker 容器:Container

Docker采用的是Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host 上。

docker镜像:镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

 

1、hello-world 一一最小的镜像

hello-world是Docker官方提供的一个镜像,通常用来验证Docker是否安装成功。

2、base镜象

base镜像有两层含义:(1)不依赖其他镜像,从scratch 构建; (2)其他镜像可以以之为基础进行扩展

#docker pull centos

查看镜像信息:docker images centos

Docker 提供了两种构建镜像的方法:docker commit命令与Dockerfile构建文件。

docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤

• 运行容器

docker run -it centos

• 修改容器

安装vim yum -y install vim-enhanced

• 将容器保存为新的镜像

docker ps 查看运行的容器

docker commit 容器名 镜像名

docker images 查看新镜像的属性

通过 Dockerfile 构建镜像:

Dockerfile创建新的镜像ubuntu-with-vim

技术图片

 

docker build -t ubuntu-with-vim-dockerfile .

镜像的缓存性:

Dockerfile中添加一点新内容,往镜像中复制一个文件

技术图片

 

docker build -t ubuntu-with-vim-dockerfile-2  .

我们改变 Dockerfile 指令的执行顺序,或者修改或添加指令,都会使缓存失效。

docker容器:

Docker利用容器来运行应用。容器是从镜像创建的运行实例,它可以被启动、开始、停止、 删除,每个容器都是相互隔离的。

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。镜像最上面那一层是只读的,不可以修改,但是容器最上面一层是rw的,提供给用户操作

镜像与容器区别:镜像是静态的,不会运行。容器则是动态的,有生命周期

(1)运行容器

docker run 容器名 (运行容器)

docker ps(查看运行的容器)

docker ps -a 显示所有状态的容器

(2)进入容器的方法

有两种方法进入容器:attach 和 exec

docker attach ID

docker exec -it  ID bash

-it 以交互模式打开 执行 bash就是打开了一个 bash 终端

(3)stop/start/restart 容器

(4)pause/unpause 容器

容器暂停工作一段时间,要对容器的文件系统打个快照

(5)容器导入和导出

导出容器

docker export [容器 id] > [导出文件]

导入容器

docker import 从容器快照文件中再导入为镜像

(6)删除容器

docker rm ID

(7)查看容器的信息

docker inspect 容器名

 

 

以上是关于docker的主要内容,如果未能解决你的问题,请参考以下文章

DockerDocker常用命令

DockerDocker配置

dockerdocker镜像和镜像发布方法

dockerdocker

dockerdocker安装rabbitmq

dockerdocker下安装mysql