01-docker基础

作者: UncleZ_strive | 来源:发表于2019-12-09 13:15 被阅读0次

    1:什么是容器?

    容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等


    image.png

    kvm虚拟机,linux,系统文件

    程序:代码,命令 进程:正在运行的程序

    2:容器和虚拟化的区别

    linux容器技术,容器虚拟化和kvm虚拟化的区别:
    • linux开机启动流程


      image.png
    • 容器启动流程: 共用宿主机内核: 第一个进程直接启动服务(nginx,httpd,mysql)

    kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
    容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
    虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统

    • 3:容器技术的发展过程:

    1):chroot技术,新建一个子系统(拥有自己完整的系统文件)
    2):linux容器(lxc) linux container(namespaces 命名空间 隔离环境 及cgroups 进程资源限制)

    3:docker容器

    • docker是一种软件的打包技术

    centos7.6 2G 10.0.0.11 docker01 host解析 centos7.6 2G 10.0.0.12 docker02 host解析

    Docker是通过进程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。 namespace 资源隔离 cgroups 进程的资源限制 kvm 虚拟磁盘文件,资源隔离 kvm 资源限制,--cpus --memory

    docker 初期把lxc二次开发,libcontainer

    4:docker的安装

    10.0.0.11:修改主机名和host解析

    rm -fr /etc/yum.repos.d/local.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    yum install docker-ce -y
    

    5:docker的主要组成部分

    docker是传统的CS架构分为docker client和docker server,向mysql一样

    • 命令:docker version
    [root@docker01 ~]# docker version
    Client: Docker Engine - Community
     Version:           19.03.5
     API version:       1.40
     Go version:        go1.12.12
     Git commit:        633a0ea
     Built:             Wed Nov 13 07:25:41 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    • docker主要组件有:镜像、容器、仓库, 网络,存储

    6:启动第一个容器

    • 启动容器必须需要一个镜像,仓库存储镜像 容器---镜像---仓库
    • docker初次体验: 安装Nginx步骤: 官网下载Nginx源码包wget
      tar 创建Nginx用户

    1.配置docker镜像加速

    vi  /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }   
    

    2.docker启动nginx
    docker run -d -p 80:80 nginx

    run(创建并启动一个容器) 等于
    -d 放在后台
    -p 端口映射
    nginx docker镜像的名字

    7:docker的镜像管理

    搜索镜像​ docker search 选镜像的建议: 1,优先考虑官方 2,stars数量多
    官方镜像仓库地址:hub.docker.com

    获取镜像​ docker pull(push)​
    镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
    官方pull docker pull centos:6.8(没有指定版本,默认会下载最新版)
    私有仓库pull docker pull daocloud.io/huangzhichong/alpine-cn:latest

    • 镜像管理相关命令
    查看镜像列表​ docker images 或者 docker image ls 
    删除镜像​ docker rmi 例子:docker image rm centos:latest 
    导出镜像​ docker save 例子:docker image save centos -o docker-centos7.4.tar.gz 
    导入镜像​ docker load 例子:docker image load -i docker-centos7.4.tar.gz​
    

    8:docker的容器管理

    • 创建并运行一个容器
      docker run -d -p 80:80 nginx:latest

    run(创建并运行一个容器)
    -d ----放在后台
    -p ----端口映射
    -v ----源地址(宿主机):目标地址(容器)
    nginx:latest ----docker镜像的名字

    • 命名一个容器
      docker run -it --name centos6 centos:6.9 /bin/bash

    -it ----分配交互式的终端interactive tty
    --name ----指定容器的名字
    /bin/sh ----覆盖容器的初始命令

    运行容器
        docker run image_name   
        docker run ==== docker create  + docker start
    启动容器
        docker start
    停止容器
        docker stop CONTAINER_ID
    杀死容器
        docker kill container_name
    查看容器列表
        docker ps(-a -l  -q)
    删除容器
        docker rm
    批量删除容器
        docker rm -f `docker ps -a -q`
    

    9:docker容器的网络访问(端口映射)

    • 首先要开启宿主机的内核转发参数,通过iptables来实现的端口映射
    [root@docker01 ~]# sysctl -a | grep ip_forward
    net.ipv4.ip_forward = 1
    
    • 指定映射(docker 会自动添加一条iptables规则来实现端口映射) ​
      -p hostPort:containerPort ​ 宿主机端口映射到容器
      -p ip:hostPort:containerPort 多个容器都想使用80端口
      -p 10.0.0.100::53/udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口 ​
      -p 81:80 –p 443:443 可以指定多个-p

    10:docker的数据卷管理

    nginx 站点 /usr/share/nginx/html

    持久化 数据卷(文件或目录)​
    -v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)​ -v src(宿主机的目录):dst(容器的目录) 数据卷容器​ --volumes-from(跟某一个已经存在的容器挂载相同的卷)​

    • 基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现静态页面
      -p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站点
      ①.编写nginx.conf文件
    [root@docker01 ~]# cat nginx/nginx.conf 
    server {
          listen 80;
          root /usr/share/nginx/html;
    
          location / {
          index index.html;
            }
    }
    server {
            listen 81;
            root /opt;
    
            location / {
            index index.html;
            }
    }
    

    ②.下载静态页面代码

    image.png
    ③.根据镜像起一个容器,并将目录挂载
    docker run -d -p 80:80 -p 81:81 -v /root/yiliao:/opt -v /root/nginx:/etc/nginx/conf.d/ nginx:latest

    11:手动将容器保存为镜像

    docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]

    • 1:基于容器制作镜像
      ①.根据镜像启动一个容器
      [root@docker01 ~]# docker run -it centos6.9
      ②.将代码防止nginx的默认目录下
      配源(centos6)
    配源
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    安装nginx
    yum install -y nginx
    删除原来的默认页面并加入新的页面
    rm -f /usr/share/nginx/html/ *
    vi /usr/share/nginx/html/index.html
    重启nginx
    nginx -s reload
    

    ③.将安装好的服务器提交为镜像
    docker container commit optimistic_brahmagupta yiliao:v1
    ④.使用镜像启动容器访问
    docker run -d -p 88:80 yiliao:v1 nginx -g 'daemon off'

    相关文章

      网友评论

        本文标题:01-docker基础

        本文链接:https://www.haomeiwen.com/subject/jkscgctx.html