• 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
    
  • 相关阅读:
    redis学习(二)-高级特性
    redis学习(一)-基础知识
    设计模式类型
    装饰者设计模式
    udp代理
    docker: unrecognized service
    centos6.x 编译安装zabbix_proxy 2.2.5
    写了一个shell,删除15天以上日志
    tempo 删除团队失败
    github批量删除organization下的private repo
  • 原文地址:https://www.cnblogs.com/wanlei/p/10757524.html
Copyright © 2020-2023  润新知