zoukankan      html  css  js  c++  java
  • Docker介绍及使用

    什么是容器?

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

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

    容器和虚拟化的区别

    linux容器技术,容器虚拟化和kvm虚拟化的区别

    kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

    linux开机启动流程:

    • bios开机硬件自检
    • 根据bios设置的优先启动项 网卡 硬盘 u盘 光驱
    • 读取mbr引导 UEFI(gpt分区) mbr硬盘分区信息,内核加载路径
    • 加载内核
    • 启动第一个进程init systemd
    • 系统初始化完成
    • 运行服务

    容器:共用宿主机内核,运行服务,损耗少,启动快,性能高

    容器虚拟化:不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)

    总结:
    1、与宿主机使用同一个内核,性能损耗小;
    2、不需要指令级模拟;
    3、容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
    4、避免了准虚拟化和系统调用替换中的复杂性;
    5、轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

    容器技术的发展过程:

    chroot技术,新建一个子系统(拥有自己完整的系统文件)

    参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
    chang root

    linux容器(lxc) linux container(namespaces 命名空间 隔离环境 及cgroups 资源限制)

    宿主机namespace ip地址 主机名 系统文件 进程
    子系统namespace,ip地址 主机名 系统文件 进程

    cgroups 限制一个进程能够使用的资源。cpu,内存,硬盘io
    kvm虚拟机:资源限制(1c 1G 20G)

    有一个相同函数名字:

    . name1 sss.sh   ===  name1.sss()
    .  xxxx.sh       ===  name2.sss()
    

    需要使用epel源

    安装epel源

    yum install epel-release -y
    

    编译epel源配置文件

    vi  /etc/yum.repos.d/epel.repo
    [epel]
    name=Extra Packages for Enterprise Linux 7 - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
    
    mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
    
    failovermethod=priority
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    
    [epel-debuginfo]
    name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
    
    mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
    
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    gpgcheck=1
    
    [epel-source]
    name=Extra Packages for Enterprise Linux 7 - $basearch - Source
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
    
    mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
    
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    gpgcheck=1
    

    安装lxc

    yum install lxc-* -y
    yum install libcgroup* -y
    yum install bridge-utils.x86_64 -y
    

    桥接网卡

    [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    echo 'TYPE=Ethernet
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
    
    [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
    echo 'TYPE=Bridge
    BOOTPROTO=static
    NAME=virbr0
    DEVICE=virbr0
    ONBOOT=yes
    IPADDR=10.0.0.11
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.254
    DNS1=223.5.5.5' >/etc/sysconfig/network-scripts/ifcfg-virbr0
    

    启动cgroup

    systemctl start cgconfig.service
    

    启动lxc

    systemctl start lxc.service
    

    创建lxc容器

    方法1:
    lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
    方法2:
    lxc-create -t centos -n test
    

    为lxc容器设置root密码:

    [root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
    Changing password for user root.
    New password: 
    BAD PASSWORD: it is too simplistic/systematic
    BAD PASSWORD: is too simple
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    为容器指定ip和网关

    vi /var/lib/lxc/centos7/config
    lxc.network.name = eth0
    lxc.network.ipv4 = 10.0.0.111/24
    lxc.network.ipv4.gateway = 10.0.0.254
    

    启动容器

    lxc-start -n centos7
    

    docker容器 (对lxc进行改进,当前流行)

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

    docker 初期把lxc二次开发,libcontainer

    docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行
    部署服务,环境问题

    一次构建,处处运行

    docker是一种软件的打包技术

    构建:做一个docker镜像
    运输:docker pull
    运行:启动一个容器
    每一个容器,他都有自己的系统文件rootfs.

    kvm解决了硬件和操作系统之间的依赖
    kvm独立的虚拟磁盘,xml配置文件

    docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
    docker镜像有自己的文件系统。

    docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

    docker的安装

    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
    

    docker的主要组成部分

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

    安装成功后可查看版本
    命令:docker version
    [root@controller ~]# docker version 
    Client:
     Version:	17.12.0-ce
     API version:	1.35
     Go version:	go1.9.2
     Git commit:	c97c6d6
     Built:	Wed Dec 27 20:10:14 2017
     OS/Arch:	linux/amd64
    
    Server:
     Engine:
      Version:	17.12.0-ce
      API version:	1.35 (minimum version 1.12)
      Go version:	go1.9.2
      Git commit:	c97c6d6
      Built:	Wed Dec 27 20:12:46 2017
      OS/Arch:	linux/amd64
      Experimental:	false
    

    docker info(如果要做监控)

    docker主要组件有:镜像、容器、仓库, 网络,存储

    启动容器必须需要一个镜像,仓库中只存储镜像 容器---镜像—仓库

    启动第一个容器

    启动容器
    systemctl start docker
    开启自启
    systemctl enable docker
    
    配置docker镜像加速
    
    vi /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }	
    
    开启一个nginx服务的容器:
    docker run -d -p 80:80 nginx
    docker run -d -p 80:80 -v /data:/usr/share/nginx/html  nginx:latest
    
    run(创建并运行一个容器)
    -d 放在后台
    -p 端口映射
    -v 源地址(宿主机):目标地址(容器)
    nginx docker镜像的名字
    
    小技巧:
    退出容器时使用 ctrl + p,ctrl +q 可以保证退出容器后 容器不被杀死
    

    手动制作支持ssh登录的docker

    启动一个基础容器
    docker run -it -p 1022:22  centos:6.9
    
    安装sshd服务
    yum install openssh-server -y
    service sshd start
    echo '123456'|passwd --stdin root
    
    把安装好软件的容器,提交为镜像
    docker commit 7d40c868114a centos_ssh:v1
    
    测试
    docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D
    

    手动制作bookManagerSystem的docker

    启动一个基础容器
    docker run -it -p 8080:8080  python:3.6 /bin/bash
    
    容器部署bms项目
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
    cd /opt/
    wget  http://www.qstack.com.cn/bookManageSystem.zip
    unzip bookManageSystem.zip 
    cd bookManageSystem
    
    替换Debian源
    echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib
    deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
    deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
    deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
    deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
    deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
    deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
    deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list
    
    apt-get update
    apt-get install vim -y
    vim bookManageSystem/settings.py 
    
    python manage.py migrate
    python manage.py runserver 0.0.0.0:8080
    
    把部署好bms项目的容器提交为镜像
    docker commit 3e3313968bf7 bms:v1
    
    测试
    docker run -d -p 8080:8080 bms:v1 python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
    

    制作一个支持多服务的docker镜像

    启动一个基础容器
    docker run  -it -p 8085:8080 -p 1024:22 bms:v1 /bin/bash
    
    在容器中安装部署服务
    apt-get install openssh-server
    service ssh start
    passwd root
    
    修改配置文件
    vim /etc/ssh/sshd_config
    PermitRootLogin yes
    
    service ssh restart
    
    编写启动文件
    vim /init.sh
    #!/bin/bash
    
    service ssh start
    python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
    
    把部署好bms项目的容器提交为镜像
    docker commit 6e44ab74fa5c bms_ssh:v4
    
    测试
    docker run  -d -p 8085:8080 -p 1024:22 bms_ssh:v4 /bin/bash /init.sh
    
    启动一个基础容器
    docker run -it -p 1022:22  centos:6.9
    
    安装sshd服务
    yum install openssh-server -y
    service sshd start
    echo '123456'|passwd --stdin root
    
    把安装好软件的容器,提交为镜像
    docker commit 7d40c868114a centos_ssh:v1
    
    测试
    docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D
    

    docker的镜像管理

    搜索镜像
    docker search
    选镜像的建议:

    • 优先考虑官方
    • stars数量多

    获取镜像
    docker pull(push)
    镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com

    docker pull centos:6.8(没有指定版本,默认会下载最新版)
    docker pull daocloud.io/huangzhichong/alpine-cn:latest 
    

    配置docker镜像加速

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

    第三方docker镜像仓库,使用方法:

    docker pull index.tenxcloud.com/tenxcloud/httpd:latest

    查看镜像
    	docker images  docker image  ls
    删除镜像
    	docker rmi  例子:docker image rm centos:latest
    导出镜像
    	docker save  例子:docker image save centos > docker-centos7.4.tar.gz
    导入镜像
    	docker load  例子:docker image load -i docker-centos7.4.tar.gz
    

    docker的容器管理

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

    nginx docker镜像的名字

    docker run -it --name centos6 centos:6.9 /bin/bash
    -it 分配交互式的终端
    --name 指定容器的名字
    /bin/sh覆盖容器的初始命令

    • 启动容器
      docker run image_name
      docker run -it image_name CMD

    docker run ==== docker create + docker start

    • 停止容器
      docker stop CONTAINER_ID

    • 杀死容器
      docker kill container_name

    • 查看容器列表
      docker ps
      docker ps –a

    • 进入容器(目的,调试,排错)
      *** docker exec (会分配一个新的终端tty)
      docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

    docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)
    

    制作dockerfile

    首先创建一个dockerfile文件 写入内容

    at dockerfile
    FROM python:3.6
    
    ADD bookManageSystem.zip /bookManageSystem.zip
    RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
    RUN unzip /bookManageSystem.zip 
    
    RUN sed -i 's#ALLOWED_HOSTS = []#ALLOWED_HOSTS = ["*"]#g' /bookManageSystem/bookManageSystem/settings.py
    
    RUN python /bookManageSystem/manage.py migrate
    
    CMD ["python","/bookManageSystem/manage.py","runserver","0.0.0.0:8080"]
    

    下载项目

    yum install wget -y
    wget  http://www.qstack.com.cn/bookManageSystem.zip
    

    修改之前的dockerfile文件

    FROM python:3.6
    
    ADD bookManageSystem.zip /bookManageSystem.zip
    RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
    RUN unzip /bookManageSystem.zip 
    
    RUN sed -i 's#ALLOWED_HOSTS = []#ALLOWED_HOSTS = ["*"]#g' /bookManageSystem/bookManageSystem/settings.py
    
    RUN python /bookManageSystem/manage.py migrate
    
    ADD sources.list /etc/apt/sources.list
    
    RUN apt-get update
    
    RUN apt-get install openssh-server -y
    
    RUN service ssh start
    
    RUN echo 'root:123456'|chpasswd
    
    RUN  echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config
    
    ADD init.sh /init.sh
    CMD ["/bin/bash","/init.sh"]
    

    编写一个执行脚本

    [root@docker01 bms_ssh]# cat init.sh 
    #!/bin/bash
    
    service ssh start
    python /bookManageSystem/manage.py runserver 0.0.0.0:8080
    

    最后开启一个容器

    docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry
    

    传自己的镜像到私有仓库

    docker login 在dockerhub上注册账号并且登录
    docker images
    docker push centos_ssh:v3 
    docker tag centos_ssh:v3 t29617342/centos_ssh:v3
    docker push t29617342/centos_ssh:v3
    
  • 相关阅读:
    取得窗口大小和窗口位置兼容所有浏览器的js代码
    一个简单易用的导出Excel类
    如何快速启动chrome插件
    网页表单设计案例
    Ubuntu下的打包解包
    The source file is different from when the module was built. Would you like the debugger to use it anyway?
    FFisher分布
    kalman filter
    Group delay Matlab simulate
    24位位图格式解析
  • 原文地址:https://www.cnblogs.com/wanlei/p/10757524.html
Copyright © 2011-2022 走看看