zoukankan      html  css  js  c++  java
  • Docker基础

      

    docker介绍:

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

    kvm虚拟机,linux,系统文件

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

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

    linux开机启动流程:

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

      

    容器启动流程:
    共用宿主机内核:
    第一个进程,服务nginx,httpd,mysql

    容器:共用宿主机内核,容器的第一个进程直接运行服务,轻量级,损耗少,启动快,性能高

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

    总结:

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

      

    安装:

    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
     systemctl start docker
     [root@localhost yum.repos.d]# docker version
     Client:
      Version:           18.09.7
      API version:       1.39
      Go version:        go1.10.8
      Git commit:        2d0083d
      Built:             Thu Jun 27 17:56:06 2019
      OS/Arch:           linux/amd64
      Experimental:      false
     ​
     Server: Docker Engine - Community
      Engine:
       Version:          18.09.7
       API version:      1.39 (minimum version 1.12)
       Go version:       go1.10.8
       Git commit:       2d0083d
       Built:            Thu Jun 27 17:26:28 2019
       OS/Arch:          linux/amd64
       Experimental:     false
    

      

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

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

    配置docker镜像加速

     
    [root@localhost ~]# cat > /etc/docker/daemon.json << eof
     ​
     > {
     > "registry-mirrors": ["https://registry.docker-cn.com"]
     > }
     > eof
     [root@localhost ~]# systemctl restart docker
    

      

    docker常用命令

      1:什么是容器?
     容器是在隔离的环境中运行的一个进程。
     容器是一个软件的打包技术。
     
     2:容器相对于虚拟机有什么优势?
     轻量级,损耗少,性能高,启动快
     
     3:镜像常用的命令
     
     docker search 搜索镜像
     docker image ls 查看镜像列表
     docker image rm 删除镜像     docker image rm busybox:latest
     docker image save 导出镜像    docker image save busybox:latest -o docker_busybox_tar.gz
     docker image load 导入镜像     docker image load -i docker_busybox_tar.gz  -i是指定路径
     docker image pull 拉取镜像     docker pull busybox
     docker image push 上传镜像
     docker image build 构建镜像
     docker image histroy查看镜像构建历史命令
     docker image prune批量清除未使用的镜像
     docker image tag  给镜像打标签
     
     4:容器常用的命令
     docker run   创建并启动一个容器
     docker exec  进入容器(新的终端)    docker exec -it 6512ee200992  /bin/bash
     docker attach进入容器(共用一个终端)  docker attach 6512ee200992  所有shell界面同步,需用crtl+p和crtl+q退出不影响其他shell界面操作
     docker rmi     删除容器        docker rmi busybox:latest
     docker create 创建容器
     docker start  启动容器
     docker stop   关闭容器     stop都面接容器的ID
     docker kill   杀死容器     kill后面接节容器的name
     docker restart 重启容器
     docker ps  -a   查看容器
     docker commit   把容器提交为镜像
     docker logs     查看容器初始命令的输出结果
     docker cp       在容器和宿主机之间拷贝文件
     docker inspect  查看容器的详细属性
     ​
     docker run的参数
     -d  在后台运行
     --name 容器的名字
     -it    分配一个交互式的终端
     -p     端口映射
     -P     随机端口映射(EXPOSE)
     -v     挂载目录或卷到容器中
     -e     指定环境变量
     --rm   容器退出自动删除
     --link 容器间互联(单向) /etc/hosts
     --network 基于制定的网络运行容器
     --restart=always 容器的开机自启
     -h      指定容器的主机名
     ​
     ​
     dockerfile常用指令?
     RUN
     ADD
     FROM
     CMD   容易被覆盖
     EXPOSE
     ENV
     COPY
     WORKDIR
     VOLUME
     ENTRYPOINT不会被覆盖
    

      


     docker的私有仓库
     上传镜像2步
     a:给镜像打标签
     docker image tag  centos6.9_ssh:v2 10.0.0.11:5000/centos6.9_ssh:v2
     docker push 10.0.0.11:5000/centos6.9_ssh:v2
     ​
     docker login 10.0.0.11:5000
     docker logout 10.0.0.11:5000
     ​
     docker 四种网络模式
     none  没有网络
     host  与宿主机共用网络
     container 与已运行的容器共用网络
     bridge  
     ​
     macvlan
     overlay
     ​
     pipework
     flannel
     docker-compose 单机版容器编排工具
     
     容器编排,k8s

    镜像的官网

     https://hub.docker.com/
     

    查看命令的详细:

     
    [root@localhost ~]# docker ps -al
     CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
     f44b2c28acc5        nginx:latest        "nginx -g 'daemon of…"   8 seconds ago       Up 7 seconds0.0.0.0:80->80/tcp   ecstatic_benz
     [root@localhost ~]# docker ps -al --no-trunc     这个参数就是显示详细的意思
     CONTAINER ID                                                        IMAGE               COMMAND        CREATED             STATUS              PORTS                NAMES
     f44b2c28acc50eccffb9cabba932192e58b8d9d5f20a13f34ce4a5f008e3867c   nginx:latest        "nginx -g 'daemon off;'"   19 seconds ago      Up 17 seconds       0.0.0.0:80->80/tcp   ecstatic_ben
    

      

    国内镜像网站源:

     https://www.cnblogs.com/liuguanglin/p/9397428.html
     ​
     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" >cat /etc/apt/sources.list
     升级apt,等同于yum更新源
     apt-get update
     ​
     ​
     apt-get install procps -y   ### 就是ps命令
    

      

    docker容器的网络:

     [root@localhost ~]# sysctl -a |grep ipv4|grep forward
     net.ipv4.conf.all.forwarding = 1
     net.ipv4.conf.all.mc_forwarding = 0
     net.ipv4.conf.default.forwarding = 1
     net.ipv4.conf.default.mc_forwarding = 0
     net.ipv4.conf.docker0.forwarding = 1
     net.ipv4.conf.docker0.mc_forwarding = 0
     net.ipv4.conf.ens33.forwarding = 1
     net.ipv4.conf.ens33.mc_forwarding = 0
     net.ipv4.conf.lo.forwarding = 1
     net.ipv4.conf.lo.mc_forwarding = 0
     net.ipv4.conf.vethd33a03b.forwarding = 1
     net.ipv4.conf.vethd33a03b.mc_forwarding = 0
     net.ipv4.ip_forward = 1    就是这条允许转发的命令
     net.ipv4.ip_forward_use_pmtu = 0
     sysctl: reading key "net.ipv6.conf.all.stable_secret"
     sysctl: reading key "net.ipv6.conf.default.stable_secret"
     sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
     sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
     sysctl: reading key "net.ipv6.conf.lo.stable_secret"
     sysctl: reading key "net.ipv6.conf.vethd33a03b.stable_secret"
    

      

    docker的网络访问

     指定映射(docker 会自动添加一条iptables规则来实现端口映射)
       -p hostPort:containerPort  *****
       -p ip:hostPort:containerPort  多个容器都想使用80端口
       -p ip::containerPort(随机端口) *****
       -p hostPort:containerPort:udp
       -p  10.0.0.100::53:udp
       -p 81:80 –p 443:443 可以指定多个-p
     第一种:-p hostPort:containerPort
     ifconfig ens33:0 10.0.0.100/24 up
     docker run -d -p 10.0.0.11:90:80 nginx:latest
     docker run -d -p 10.0.0.100:90:80 nginx:latest
     第二种:docker run -d -p 10.0.0.11::80 nginx:latest
     [root@localhost network-scripts]# docker ps -a
     CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
     4509226576eb        nginx:latest        "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes10.0.0.11:32768->80/tcp   affectionate_easley
     访问就是用curl 10.0.0.11:32768即可
     为什么是这个端口;
       sysctl -a |grep net.ipv4|grep range   如下图:
    

     

    docker的数据卷挂载:

     
    将zip包解压到/app/data下面
     unzip xiaoniaofeifei.zip
     docker run -d -p 80:80 -v /app/data/:/usr/share/nginx/html nginx:latest
     ​
     将文件挂载到容器中
     docker run -it -v /app/data/xiaoniaofeifei.zip:/opt/xiaoniaofeifei.zip  centos:6.9/bin/bash
     [root@3e1e6771ea2a /]# cd /opt/
     [root@3e1e6771ea2a opt]# ls
     xiaoniaofeifei.zip
    

      

    小练习:要求:基于nginx做一个容器,,监听100和200的端口,访问100的端口出现nginx默认欢迎界面,访问200的端口,出现小鸟的游戏
    提示: -p 100:100 -p 200:200 -v XXX:XXX -v XXX:XXX

     docker pull nginx:1.12
     mdkir -p /opt/xiaoniaofeifei
     unzip  xiaoniaofeifei.zip -d /opt/xiaoniaofeifei
      
     vim /opt/nginx_xiaoniao.conf
     server {
         listen       200;
         server_name  localhost;
         location / {
             root   /opt;
             index  index.html index.htm;
         }
     ​
     }
     server {
         listen       100;
         server_name  localhost;
         location / {
             root   /usr/share/nginx/html;
             index  index.html index.htm;
         }
     }
     ​
     ​
     docker run -d -p 200:200 -p 100:100  -v /opt/nginx_xiaoniao.conf:/etc/nginx/conf.d/nginx.conf -v /opt/xiaoniaofeifei:/opt nginx:1.12
    

      

    手动将容器保存成镜像:

    将yum源的地址改成

     原来的是:
     http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
     自己给了以后
     http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os
     如下:
     http://mirrors.neusoft.edu.cn/centos/6.10/os/x86_64/
     http://mirrors.nju.edu.cn/centos/6.10/os/x86_64/
     http://mirror.lzu.edu.cn/centos/6.10/os/x86_64/
     http://mirrors.tuna.tsinghua.edu.cn/centos/6.10/os/x86_64/
     http://mirrors.aliyun.com/centos/6.10/os/x86_64/
     http://mirrors.huaweicloud.com/centos/6.10/os/x86_64/
     http://mirrors.cqu.edu.cn/CentOS/6.10/os/x86_64/
     http://mirrors.163.com/centos/6.10/os/x86_64/
     http://ftp.sjtu.edu.cn/centos/6.10/os/x86_64/
     http://mirrors.njupt.edu.cn/centos/6.10/os/x86_64/
     这里是6的系统,所以
     curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
     即可:要是7的话
     curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
     ​
     
     原来的容器ID 3864d563fc54
     docker container commit 3864d563fc54  centos6.9_ssh:v1
     docker run -d -p 9090:22 centos6.9_ssh:v1 /usr/sbin/sshd -D
    

      

     

  • 相关阅读:
    Ansible快速实战指南----多机自动化执行命令、部署神器
    linux 挂载共享盘
    蓄水池抽样算法
    PCA MATLAB代码
    网口转串口
    通过Python收集MySQL MHA 部署及运行状态信息的功能实现
    Linux常用命令总结(二)
    python 学习笔记 (四)
    MySQL 学习笔记(四)
    学习ProxySQL参考到几个网址
  • 原文地址:https://www.cnblogs.com/nshgo/p/11138292.html
Copyright © 2011-2022 走看看