docker介绍

详情参考:https://download.csdn.net/download/appke846/10474726

一、Docker简介

1.简介

•Docker是一个基于LXC技术之上构建的开源的Container容器引擎,可

以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

•通俗点,Docker是一个容器管理器。容器打包一个应用以及它的依赖

关系。你能从仓库的每个镜像里实例化出一个容器并在主机上各自隔

离的环境里运行这些容器。因为容器运用的虚拟技术是轻量级的,所

以你能同时运行多个容器。

2.问题

传统的开发部署存在的问题

•1.资源利用效率低;

•2.单物理机多应用无法有效隔离(进程空间,cpu资源,磁盘);

•3.运维部署不便;

•4.测试、版本管理复杂;

•5.迁移成本高;

•6.传统虚拟机,空间占用大,启用慢,管理复杂;

3.优点

•1.秒级启动,秒级停止,空间资源占用极少;

•2.实现进程级别的隔离;

•3.可在普通服务器上建立上百个docker实例;

•4.加快开发测试部署的速度;

•5.简化版本管理;

二、docker原理

1.Docker架构图

 

2.底层

•Docker底层实现包括Linux的命名空间(Namespaces),控制组

(Control groups),Union文件系统(Union file system),容器格式

(Container format)。

•利用命名空间来做到相互隔离;

•利用cgroups来做资源分配。

Namespaces命名空间

•pid命名空间:用于隔离进程,容器都有自己独立的进程表和1号进程;

•net命名空间:用于管理网络,容器有自己独立的networkinfo;

•ipc命名空间:用于访问IPC资源(IPC:InterProcessCommunication);

•mnt命名空间:用于管理挂载点,每个容器都有自己唯一的目录挂载;

•uts命名空间:用于隔离内核和版本标识(UTS:UnixTimeProcess

System),每个容器都有独立的hostname和domain。

Cgroups控制组

•限制Linux进程组的资源占用(内存、CPU);

•为进程组制作PID、UTS、IPC、网络、用户及装载命名空间。

•主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容

器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控

制组可以提供对容器的内存、CPU、磁盘IO 等资源的限制和审计管

理。

AUFS(AnotherUnionFS)

•AUFS是一种Union FS,简单来说就是支持将不同目录挂载到同一个虚

拟文件系统下的文件系统,具体点,就是AUFS支持为每一个成员目

录设定readonly,readwrite和whiteout-able的权限,同时AUFS里有一个

类似分层的概念,对readonly权限的branch可以逻辑上进行修改(增

量地,不影响readonly部分的)。

3.Docker文件系统

 

references

parent

Docker镜像位于bootfs之上

第一层为Base Image

容器在最顶层

其下所有层为可读层

4.docker组成

• Docker的组成部分docker类似于c/s结构

Docker Client

Docker Server

•支持三种连接方式:

unix:///var/run/docker.sock

tcp://host:port

fd://socketfd

 

我们可以将docker启动比喻成Docker server,我们执行命令的时候相当于Dockerclient

5.三大基本组件

•Docker Client

是用户界面,支持用户和Docker Daemon之间通信;

•Docker Daemon

运行于主机上,处理服务请求;

•Docker Index

是中央registry,支持拥有共有和私有访问权限的

Docker容器镜像的备份;

index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务

上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,最终docker客户端再从

registry下载镜像,

6.三大核心元素

 

•镜像

Docker images是Docker container最基本的模板,包含一个完整的操作

系统环境和需要的应用程序,由一堆只读层组成,Docker image是用来

运行的容器。镜像可以用来创建Docker容器,一个镜像可以创建很多

容器。

镜像由许多层组成,最下层的是基础镜像,其它层都会有一个指针指

向下一层。统一文件系统(Union File System)技术能够将不同的层整

合成一个文件系统,为这些层提供了一个统一的视角。

通过Dockerfile创建Image的时候,每一步都会创建一个只读层。

只含操作系统运行环境,不含内核,共用宿主机的内核

•容器

Docker容器,Image的运行实例,它可以被启动、开始、停止、删除。

每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个

简易版的Linux 环境(包括root用户权限、进程空间、用户空间和网络

空间等)和运行在其中的应用程序。

容器的最上层是可读写的。容器其实就是UnionFS在镜像上面创建了一

个可读写的层。

当容器通过dockercommit提交时,其实就是通过UnionFS将这个读写层

转为可读层。

•仓库

仓库(Repository)是集中存放镜像文件的场所。而仓库注册服务器上

往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不

同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的

公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。当然,

用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用push 命令将它上传到公有或

者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要

从仓库上pull 下来就可以了。

二、Docker安装

1.版本

•Docker 从17.03版本之后分为CE(Community Edition)

和EE(Enterprise Edition)。

•较老版本的Docker被称为docker或docker-engine

•sudoapt-get install docker-ce

2.安装

•前提:

•需要64位架构的系统和Linux3.10内核或更高版本

•安装步骤:

• $ sudoapt-get remove docker docker-engine docker.io

• $ sudoapt-get install linux-image-extra-$(uname-r)linux-image-extra-virtual

• $ sudoapt-get update

• $ sudoapt-get install apt-transport-https ca-certificates curlsoftware-properties-common

• $ curl -fsSLhttps://download.docker.com/linux/ubuntu/gpg |sudoapt-key add –

• $ sudoapt-key fingerprint 0EBFCD88

• $ sudoadd-apt-repository "deb [arch=amd64]https://download.docker.com/linux/ubuntu

$(lsb_release -cs) stable“

• $ sudoapt-get update

• $ sudoapt-get install docker-ce

3.配置

• /etc/init/docker.conf

• DOCKER_OPTS='-Htcp://0.0.0.0:2376-Hunix:///var/run/docker.sock‘

• -H设置后台模式下指定socket绑定,可以绑定一个或多个

•三种不同类型的socket:unix,tcp,fd。

•DOCKER_OPTS="--insecure-registry 10.0.40.16:5000"

• /lib/system/system/docker.service

• EnvironmentFile=-/etc/default/docker

•修改ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS

• docker -H tcp://127.0.0.1:2375 info

创建docker组

•$ sudogroupadddocker

•$ sudogpasswd-a ${USER} docker

•$ sudosystemctlrestart docker

•# 若提示/var/run/docker.sock无权限,执行以下命令:

•$ sudochmoda+rw/var/run/docker.sock

4.启动

•sudosystemctldaemon-reload

•sudosystemctlrestart docker

•或

•sudoservice docker restart

 

三、Docker使用

获取镜像

•拉取基础镜像

•docker pull ubuntu

•dockerrun ubuntu/bin/echo hello world

常用命令

•docker images

•dockerps(-a)

•docker run -it <IMAGE ID> /bin/bash

•dockerstart <CONTAINER ID

•docker exec -it <CONTAINER ID>

•docker stop <CONTAINER ID

•docker kill <CONTAINER ID>

•dockercommit <CONTAINER ID> <REPOSITORY:TAG>

启动容器

docker run

•-i 交互式界面,默认是false

•-t 伪终端,默认false

•--name 容器别名,默认随机命名

•-d 后台运行容器,并返回容器id

•-v 目录挂载

•-p 端口映射

•exit 退出交互式界面,容器停止运行

Crtl+P或者Crtl+Q退出交互式界面,容器在后台运行

 

四、Docker相关操作

状态图

 

镜像

•拉取docker pull

•创建docker commit

•导出docker save

docker save –o ubuntu.tar ubuntu:base

•导入docker load

docker load –input ubunt.tar

•移除dokcer rmi

创建镜像

•基于基础镜像

1、docker commit

2、docker build +Dockerfile

•自己制作基础镜像

dockerfile

Dockerfile由一系列指令和参数组成。每条指令都必须为大写字母,切

后面要跟随一个参数。

•vim Dockerfile

•FROM 基础镜像

•RUN开头的指令会在创建中运行

•生成镜像docker build -t [image_name] . (“.” 是Dockerfile所在的路径)

自己制作基础镜像

#用tar命令将安装好后的操作系统转换成一个tar文件。

•tar--numeric-owner--exclude=/proc--exclude=/sys-cvfcentos6-base.tar/

#在一台可运行docker的机器上用dockerimport命令转换成docker image

•catcentos6-base.tar|dockerimport -centos6-base

容器

•创建容器docker create

•启动容器docker start

•启动docker run<image_name> (docker create和docker start两个命令的组合)

docker start <container_id>

•终止docker stop <container_id>

•导出docker export

docker export e0d9436b8556 > ubuntu.tar

•导入

cat ubuntu.tar | docker import–test/ubuntu:1.0

•删除docker rm

Docker rm$(docker ps-aq)删除所有终止状态的容器

•进入容器

•Docker exec

•Docker attach

•nsenter工具

#为了连接到容器,需要找到容器的PID,可以通过下面的命令获

取。

PID=$(docker inspect --format "{{.State.Pid}}" <container>)

#通过这个PID,就可以连接到这个容器:

nsenter--target $PID --mount--uts--ipc--net --pid

仓库

•有一个公共仓库Docker Hub

•docker search查找官方仓库中的镜像

•docker pull下载镜像

•docker push上传镜像

•registry是官方提供的,用于创建本地仓库的镜像

•结合hyper/docker-registry-web镜像创建一个有UI的本地仓库

•DOCKER_OPTS="--insecure-registry 10.0.40.16:5000"

创建本地仓库

• docker run -d -p 10050:5000 --restart=always --name registry-srv-v

$(pwd)/registry/:/etc/docker/registry:ro-v

/var/lib/registry/storage:/var/lib/registryregistry:2

• # ui监听主机的10080 端口

•docker run -d -p 10080:8080 --name registry-web --linkregistry-srv:srv-v

$(pwd)/frontend/:/conf/:rohyper/docker-registry-web

 

五、Docker结合jenkins

Jenkins插件

•安装插件

Jenkins提供了对docker的支持,

提供了docker插件。

•设置docker云

把docker容器当做一个节点来使用,可以把它当成一个独立的主机

系统管理设置任务设置

构建中创建镜像

•自动构建镜像

docker kill $(docker ps-aq)

docker rm$(docker ps-aq)

docker rmi–f image_name

cd ${workdir} & docker build –t<image_name> .

docker run –it –d –p 8080:8080 –name docker

<image_name>

 

Dockerfile:

#

FROM ubuntu

#

MAINTAINER XXX

#

ENV PATH

$PATH:$JAVA_HOME

#

ADD . /root/

#

WORKDIR /root

#

EXPOSE 8080

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值