zoukankan      html  css  js  c++  java
  • 20200330 docker安装基础介绍

    部署之docker

    1. docker介绍

    # 1  虚拟化---》虚拟机,硬件虚拟化
    # 2 docker:centos系统--》大约90m
    # 3 开源项目,诞生于2013----》17年以后--》两年多的时间
    # 4 基于go语言实现的---》docker ce:免费的  docker ee:收费
    # 5 轻量级的操作系统虚拟化解决方案
    # 6 Docker 的基础是 Linux 容器(LXC)等技术
    # 7 用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单
    # 8 django写了个项目,
    	-部署到服务器---》代码放到服务器--》服务器装python环境(版本)--》django环境(版本)--》mysql(版本)
      -docker部署--》项目做成docker镜像-----》放到服务器---》拉起镜像(容器)---》项目就运行了
      
    # 9 虚拟机--》python,mysql,redis,nginx---》虚拟机的大文件,直接copy到新机器上,用虚拟机的软件打开---》跑起来---》就是你之前装好的操作系统
    
    # 10 跟传统虚拟机的比较
    # 11 都用同样的docker环境开发:不涉及到版本问题
    
    # 12 解决的问题
    	-保证程序运行环境的一致性;
    	-降低配置开发环境、生产环境的复杂度和成本;
    	-实现程序的快速部署和分发
      
    # 13 docker 是一个c/s架构软件(客户端,服务端)
    # 14 docker客户端通过restful跟服务端做交互
    # 15 服务端:容器,镜像,数据卷,网络
    
    # 16 客服端,服务端,仓库(放了一堆镜像):当客户端发一条命令(拉取redis镜像)---》服务端守护进程接收---》去仓库拿redis镜像,放到服务端本地
    
    
    # 学docker:就是学一堆命令
    

    Docker是一个开源的容器引擎,可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。

    Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

    img

    • client端相当于我们使用linux操作的客户端,用来执行docker命令。

    • Registry:是一个集中存储与分发镜像的服务。它是一个Docker镜像仓库,当我们使用Docker下载软件的时候会先从这边进行下载。它相当于是Maven仓库

    • images:当我们从远程仓库下载软件后会存放到本地仓库,这个本地仓库就是images,可以使用docker images查看本地安装了哪些软件。

    • Container(容器):容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。要有Container需要先有images,Image就相当于抽象的类,Container就相当于具体实例化的对象。可通过 Docker API或者 CLI命令来启停、移动、删除容器。

    介绍

    Docker是一个集开发、打包、运行应用于一体的开放式平台。Docker可以用来快速交付应用。使用Docker,你可以将应用程序从你的基础设施中分离出来,并将基础设施当做一个管理平台。Docker可以加快打包时间,加快测试,加快发布,缩短开发及运行代码之间的周期。Docker通过结合内核容器化特点和工作流,并使之工具化来实现这一切,帮助管理和发布你的应用。

    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    centos安装docker

    centos7.0以上安装

    1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

    通过 uname -r 命令查看你当前的内核版本

     $ uname -r
    

    2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

    $ sudo yum update
    # 更新较多时间较长
    

    3、卸载旧版本(如果安装过旧版本的话)

    $ sudo yum remove docker  docker-common docker-selinux docker-engine
    

    4、安装需要的软件包,依赖包

    yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

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

    5、设置yum源

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    # 把源设置为阿里云,安装比较快
    

    img

    可以查看所有仓库中所有docker版本,并选择特定版本安装

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

    6、安装docker

    sudo yum install docker-ce  
    #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
    
    
    # 2 sudo yum install <FQPN>  
    	例如:sudo yum install docker-ce-17.12.0.ce
    # 3 版本问题:
    	老版本:之前没有分docker ce 和docker ee ,17之前是老版本
      新版本:17以后,新版本(操作都不太一样)
    

    7、启动并加入开机启动

    systemctl start docker # 服务端启动
    
    $ sudo systemctl enable docker
    

    8、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

    $ docker version
    

    img

    2. 容器和镜像

    - 类和对象的关系: 类可以产生对象,而且可以产生多个对象
    - 镜像和容器: 一个镜像可以运行多个容器
    - 如果拉取了一个redis镜像: 想当于一个linux操作系统上安装了redis软件
    - 真正的执行,容器在运行(操作系统 + 软件)
    - 镜像: 一堆文件,必须运行起来,成为容器
    

    架构

    Docker 包括三个基本概念:

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

    Docker 容器通过 Docker 镜像来创建。

    容器与镜像的关系类似于面向对象编程中的对象与类。

    img

    该图显示Docker虚拟化的架构:其中Docker Engine可以简单看成对Linux的NameSpace、Cgroup、镜像管理文件系统操作的封装。Docker并没有和虚拟机一样利用一个完全独立的Guest OS实现环境隔离,它利用的是目前linux内核本身支持的容器方式实现资源和环境隔离。简单的说,Docker是利用namespace实现系统环境的隔离;利用Cgroup实现资源限制;利用镜像实现根目录环境的隔离。

    3. 加速配置

    拉取镜像,从远程拉取下来的(在国外,速度较慢),所以要更改成国内的镜像源,如清华阿里...
    
    Docker相当于一个容器,我们要在这个容器安装软件,如果是首次安装,需要到对应的仓库下载(Docker里Registry概念),然后存放在本地(Docker 里mage概念)。需要的朋友可以到dockerhub进行查看,https://hub.docker.com,我们要从docker下载的软件,一般在这边都可以找到。从这边下载安装的话,单纯网络开销就很大,所以我们可以配置镜像加速器,在下载软件的时候可以大大的提速。
    
    

    步骤

    0. 查看文件是否存在
    	cd /etc/docker/
    	ls
    1. 修改文件 daemon.json
    	vi /etc/docker/daemon.json 
    2. 如果没有此文件,进行创建
    	vim daemon.json		#没有vim安装 sudo yum install -y vim
    3. 添加文件内容
    	{"registry-mirrors": ["https://reg-mirror.qiniu.com"]}
    	# :wq 保存并退出
    4. 重启docker服务
    	systemctl restart docker 
    

    命令

    重启服务
    	systemctl restart docker
    停止服务
    	systemctl stop docker
    	
    systemctl status docker # 查看docker状态
    systemctl enable docker # 设置成开机启动
    docker info  # 查看docker 概要信息
    

    4. 镜像操作

    镜像查找search

    docker search 镜像名称 
    
    https://hub.docker.com/
    NAME   DESCRIPTION     STARS    OFFICIAL 
    镜像名字   描述          start数   是否是官方
    

    * 镜像查看docker images

    docker images	// 查看本地镜像
    
    REPOSITORY   TAG      IMAGE ID         CREATED             SIZE
    redis       latest    f0453552d7f2    2 weeks ago         98.2MB
    python      3.6       1daf62e8cab5    4 weeks ago         914MB
    

    * 镜像下载pull

    一般去网站上https://hub.docker.com/

    docker pull centos:版本号
    
    docker pull centos # 不写表示下载最新的,等同于docker pull centos:latest
    docker pull centos:7
    docker pull redis
    docker pull python:3.6
    

    镜像删除 rmi

    docker rmi 镜像名或者ID号
    
    过滤所有的ID号
    	docker images -q
    
    删除所有镜像
    	docker rmi `docker images -q`
    

    5. 容器操作

    创建并启动容器docker run

    创建容器命令:docker run
    

    参数

        -i:表示运行容器
        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t两个参数,创建后就会自动进去容器)。
        -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
        --name :为创建的容器命名。
        -v:数据卷:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
    

    使用

    docker run -it --name=mycentos centos:7
       #接下来操作的是mycentos这个容器
       #可以安装软件,它就是一个centos7
       # 你之前拉取的redis的镜像:linux+redis软件
    	 # exit 退出,容器也就停止了
    	 
    docker run -di --name=mycentos2 centos:7
    	# docker run -d -i --name=mycentos2 centos:7	
    	# 每个容器都用自己的id号:b1eeace155b54e467dfcbc42bb2fa5b580db5463f230a3eae1b27b74de4c597
    
     docker run -d -i --name=mycentos3 centos:6.5  # 如果本地没有最新的centos镜像,先去拉,然后创建并允许
    

    img

    img

    img

    开启端口映射

     # 启动一个redis容器
    docker run -di --name=myredis -p 6379:6379 redis
      # 把本机的reids停掉
      # 端口映射,6378 6379
    

    img

    img

    img

    img

    停止,重启

    停止

    1、docker stop 此方式常常被翻译为优雅的停止容器

    docker stop 容器ID或容器名
    
    参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
    docker stop -t=60 容器ID或容器名
    

    2、docker kill

    docker kill 容器ID或容器名 :直接关闭容器
    
    由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器
    

    重启

    docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器
    1. 首先 docker ps 查看正在运行的容器信息,显示2分钟前启动运行
    2. docker restart 59ec 重启容器
    3. 再次 docker ps 查看容器信息 显示 2秒前启动运行
    
    
    docker restart 参数
    -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
    

    查看容器

    • 查看正在运行 docker ps
    • 查看所有 docker ps -a
    • 查看最后一次运行的容器 docker ps –l
    • 查看停止的容器 docker ps -f status=exited

    容器操作

    进到容器内部,操作容器

    • 启动容器 docker start id或者名字
    • 退出容器 exit
    • 查看容器信息 docker info
    • 进入某一容器 docker exec -it id或名称 /bin/bash
    # 用docker 允许一个服务(装一个软件),变得异常简单
    	-linux安装redis(源码下载,解压,make & make insall)
    
    一个容器中有多个软件(一般情况下,不要在一个容器里装多个服务)
    
    mysql redis python
    
    centos---》装python--》装mysql--》装redis
    
    redis容器---》装python--》装mysql
    
    

    补充

    • cpython解释器
    • pypy解释器:更快,库较少
    pypy:预编译:编译---》执行:很多库没有
    cpython:边解释边执行,库多
    
    操作系统---》软件----》网络通信:软件监听端口
    
  • 相关阅读:
    Ensp模拟OSPF与ACL综合应用
    ENSP配置NAT
    Ensp配置RSTP
    EnspOSPF单区域配置
    Ensp配置静态路由和默认路由
    NotPron国外版
    MSF
    转换流
    梦之光芒1-14关通关秘籍
    php序列化与反序列化
  • 原文地址:https://www.cnblogs.com/fwzzz/p/12734579.html
Copyright © 2011-2022 走看看