docker容器

作者: 酷酷的伟 | 来源:发表于2019-10-06 06:38 被阅读0次

    docker快速入门01
    docker快速入门02
    KVM和Docker的对比

    docker常用命令

    systemctl start docker    ---启动容器服务
    systemctl enable docker   ---容器服务开机自启
    docker version            ---查看docker的版本
    ctrl pq                   ---静悄悄的离开容器(容器不停)
    docker run -d -p 80:80 nginx    ---启动带nginx镜像的容器
    run                       ---创建并运行一个容器
    -d                        ---放在后台
    -p                        ---指定端口映射(访问外网)
    -P                        ---随机分配端口
    nginx                     ---docker镜像的名字
    docker search             ---搜索镜像
    docker pull               ---从配置的镜像网站拉取镜像
    docker image ls           ---查看拥有的镜像
    docker images             ---查看拥有的镜像
    docker image save -o docker_busybox1.29.tar.gz busybox:1.29   ---把镜像导到当前目录下并取名加版本号加文件后缀
    docker image rm busybox:1.29 ---删除镜像(加具体版本否则删最新)
    docker image load -i docker_busybox1.29.tar.gz  ---导入镜像
    docker image build        ---制作镜像
    docker image history      ---查看镜像制作的历史
    docker run -it --name  centos:6.9 /bin/bash   ---运行并进入一个容器并指定名称分配容器的初始命令
    -it                       ---分配交互式终端
    --name                    ---指定容器的名字
    /bin/bash                 ---覆盖容器的初始命令
    docker container ls -a    ---查看所有容器的状态(不加-a查看运行中的容器)
    docker start 容器名字或ID ---启动容器
    docker stop 容器名字或ID  ---停止容器
    docker kill 容器名字或ID  ---杀掉容器
    docker container ls -a -l ---只显示最近的一个容器
    docker container rm       ---删除一个容器
    docker stop $(docker ps -a -q)  ---批量删除未运行的容器
    docker ps -a              ---显示所有容器(包括未运行的)
    docker ps -a -q           ---只显示所有容器的ID
    docker exec -it 容器名字或ID /bin/bash  ---进入一个容器
    docker commit 容器ID 新镜像名称    ---手动制作容器
    docker image build -t centos6.9_nginx:v2 /opt/dockerfile/nginx   ---自动构建镜像命令(在当前目录下可用 . 表示)
    -t           ---给镜像创建名称
    docker run -it --workdir /tmp centos6.9   ---指定容器工作目录
    docker inspect             ---查看(容器、镜像、卷)属性
    
    

    什么是容器?

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

    kvm虚拟机,linux,系统文件

    image

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

    容器和虚拟化的区别

    linux容器技术,容器虚拟化和kvm虚拟化的区别
    
    kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
    
    #linux开机启动流程:
    bios开机硬件自检
    根据bios设置的优先启动项boot  网卡 硬盘 u盘 光驱
    读取mbr引导 2T  UEFI(gpt分区)    mbr硬盘分区信息,内核加载路径, 
    加载内核
    启动第一个进程/sbin/init  systemd
    系统初始化完成
    运行服务(nginx,httpd,mysql)
    
    #容器启动流程:
    共用宿主机内核:
    第一个进程直接启动服务(nginx,httpd,mysql)
    
    容器和虚拟机的区别:
    容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
    虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
    
    容器是linux内核独有的技术
    
    

    性能好,速度快,损耗少 ,秒级启动,只能在linux上运行

    容器技术的发展过程:

    chroot技术
    参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
    练习1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令(cp,ls)
    https://linux.cn/article-8313-1.html
    ls

    docker安装

    Docker提供了两个版本:社区版(CE)和企业版(EE)。
    操作系统要求
    以Centos7为例,且Docker要求操作系统必须为64位,且centos内核版本为3.1及以上。
    查看系统内核版本信息:
    uname -r
    ​
    0 准备
    卸载旧版本:
    yum remove docker docker-common docker-selinux docker-engine
    ​yum remove docker-ce
    ​
    卸载后将保留/var/lib/docker的内容(镜像、容器、存储卷和网络等)。
    rm -rf /var/lib/docker
    ​
    安装依赖软件包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    ​
    # 安装前可查看device-mapper-persistent-data 和 lvm2 是否已经安装
    rpm -qa | grep device-mapper-persistent-data
    rpm -qa | grep lvm2
    ​
    ​
    安装Base源
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    ​
    下载docker源
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    ​
    把docker官网地址改为清华源
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    ​
    更新yum软件包索引
    yum makecache fast
    ​
    二、安装
    安装最新版本docker-ce
    yum install docker-ce -y
    ​
    #安装指定版本docker-ce可使用以下命令查看
    yum list docker-ce.x86_64  --showduplicates | sort -r
    ​
    # 安装完成之后可以使用命令查看
    docker version
    

    在docker上装一个nginx

    软件包下载链接: 提取码: mnsw

    wget http://192.168.37.202/linux59/docker_nginx1.15.tar.gz
    ls
    docker load -i docker_nginx1.15.tar.gz 
    docker run -d -p 80:80 nginx
    
    
    image
    docker run -d -p 80:80 nginx
    run(创建并运行一个容器)
    -d 放在后台
    -p 端口映射
    nginx docker镜像的名字
    
    

    docker的镜像管理

    配置镜像加速

    这里使用阿里云的免费镜像加速服务,也可以使用其他如时速云、网易云等。
    注册登录开通阿里云容器镜像服务
    查看控制台,找到镜像加速器并复制自己的加速器地址
    加入以下配置
    # 填写自己的加速器地址
    {
        "registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"]
    }
    ​
    docker仓库加速如下:
    找到/etc/docker目录下的daemon.json文件,没有则创建/etc/docker目录后直接vi daemon.json编辑
    vi /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }   
    ​或者阿里云docker加速
    { 
    "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
     }
    经过多次测试,发现还是阿里云的好用,所以强烈推荐这款
    
    
    通知systemd重载此配置文件
    systemctl daemon-reload
    ​
    重启docker服务
    systemctl restart docker
    
    搜索镜像:
    docker search
    [root@docker01 ~]# docker search  centos
    [root@docker01 ~]# docker search  nginx
    
    

    官方docker镜像下载地址

    hub.docker.com

    image.png
    image

    拉取镜像

    获取镜像
    ​   docker pull(push)
    
    [root@docker01 ~]# docker pull busybox
    [root@docker01 ~]# docker pull busybox:1.29
    
    

    查看镜像

    [root@docker01 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              19485c79a9bb        9 hours ago         1.22MB
    busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
    nginx               latest              be1f31be9a87        11 months ago       109MB
    
    

    删除镜像

    [root@docker01 ~]# docker image rm busybox:1.29 
    [root@docker01 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              19485c79a9bb        9 hours ago         1.22MB
    nginx               latest              be1f31be9a87        11 months ago       109MB
    
    

    导出镜像

    [root@docker01 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              19485c79a9bb        9 hours ago         1.22MB
    busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
    nginx               latest              be1f31be9a87        11 months ago       109MB
    
    [root@docker01 ~]# docker image save -o docker_busybox1.29.tar.gz busybox:1.29 
    
    [root@docker01 ~]# ll
    total 205572
    -rw-------. 1 root root      1392 Apr 19 12:22 anaconda-ks.cfg
    -rw-------  1 root root   1378816 Sep  5 12:08 docker_busybox1.29.tar.gz
    
    

    导入镜像

    [root@docker01 ~]# docker image  load -i docker_busybox1.29.tar.gz 
    23bc2b70b201: Loading layer   1.37MB/1.37MB
    Loaded image: busybox:1.29
    
    [root@docker01 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              19485c79a9bb        9 hours ago         1.22MB
    busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
    nginx               latest              be1f31be9a87        11 months ago       109MB
    
    

    导入需要用到的镜像

    导入镜像的下载链接: 提取码: db3x

    [root@docker01 ~]# ll
    -rw-r--r--  1 root root   5853184 Sep  5 12:15 docker_alpine.tar.gz
    -rw-r--r--  1 root root   1424896 Sep  5 12:15 docker_busybox.tar.gz
    -rw-r--r--  1 root root 202872320 Sep  5 12:16 docker_centos6.9.tar.gz
    -rw-r--r--  1 root root  74210304 Sep  5 12:15 docker_k8s_dns.tar.gz
    
    [root@docker01 ~]# for i in `find /root/* -type f -name "docker*"`;do docker image load -i $i;done
    
    [root@docker01 ~]# docker image ls
    
    
    image.png

    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   分配交互式的终端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 <--no-trunc 全部显示>)
    
    ​
    进入正在运行的容器(目的,调试,排错)
    *** docker exec  (会分配一个新的终端tty)
            docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    ​
        docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
        docker attach(使用同一个终端)  偷偷离开的快捷键ctrl+p,ctrl+q
            docker attach [OPTIONS] CONTAINER
        nsenter(安装yum install -y util-linux 弃用)
    ​
    删除容器
        docker container rm <centos6>
    批量删除容器
        docker rm -f `docker ps -a -q`
    
    

    总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

    业务在容器中运行:初始命令,夯住,启动服务

    image image.png

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

    docker0:172.17.0.1   jumpserver:172.17.0.2   nginx:172.17.0.3
    
    指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    ​   -p hostPort:containerPort
    ​   -p ip:hostPort:containerPort  多个容器都想使用8080端口
    ​   -p ip::containerPort(随机端口)
    ​   -p hostPort:containerPort/udp
    ​   -p  10.0.0.100::53/udp   使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
    ​   -p 81:80 –p 443:443 可以指定多个-p
    
    随机映射
    ​   docker run -P (随机端口)
    
    通过iptables来实现的端口映射
    
    

    docker的数据卷管理

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

    小鸟飞飞飞_基础版练习

    小游戏软件包下载链接 提取码: jyqy

    第一种方法:

    执行下面操作:小游戏的软件包下载后上传后将代码放到容器中
    
    docker run -d -p 80:80 nginx:latest 
    docker exec -it <ID_当前一台容器可tab键补全名字> /bin/bash
    cd /opt/
    mkdir xiaoniao
    cd xiaoniao/
    wget http://192.168.37.202/linux59/xiaoniaofeifei.zip
    unzip xiaoniaofeifei.zip 
    ls
    cd ..
    docker container cp xiaoniao <容器名字或_ID>:/usr/share/nginx/html
    
    进入到nginx容器中查看站点目录:
    docker exec -it <容器名字或_ID> /bin/bash
    cd /usr/share/nginx/html/
    ls xiaoniao/
    
    
    image

    第二种方法:

    批量删除掉容器,用容器的数据复制方法把代码放到容器中:
    最后接的是nginx的镜像,需提前上传好
    
    docker container rm  -f  `docker ps -a -q`
    docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
    
    
    image.png

    第三种方法

    删除容器,没有根目录开始的就代表的是创建一个卷
    
    [root@docker01 opt]# docker container rm -f `docker ps -a -q`
    [root@docker01 opt]# docker run -d -p 80:80 -v xiaoniao:/usr/share/nginx/html nginx:latest
    [root@docker01 opt]# docker volume ls   #卷的资源查看方式
    DRIVER              VOLUME NAME
    local               xiaoniao
    
    查看卷的详细信息
    [root@docker01 opt]# docker volume inspect xiaoniao 
    [
        {
            "CreatedAt": "2019-09-05T20:11:26+08:00",   创建时间
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/xiaoniao/_data", 挂载点
            "Name": "xiaoniao",
            "Options": null,
            "Scope": "local"
        }
    ]
    [root@docker01 opt]# cd /var/lib/docker/volumes/xiaoniao/_data
    [root@docker01 _data]# ls
    50x.html  index.html
    [root@docker01 _data]# echo '123456ABCDEFG' >index.html 
    
    
    image.png
    如果卷里面有数据,把卷数据的挂载到容器中
    再次清除容器,并创建新容器
    
    [root@docker01 _data]# ls
    50x.html  index.html
    [root@docker01 _data]# docker container rm -f `docker ps -a -q`
    
    

    内容没有改变,还是之前的数据

    修改标题名字

    image image image

    小鸟飞飞飞_加强版练习

    基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
    -p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx
    基于nginx多端口的多站点。

    第一种方法:宿主机上修改

    #宿主机上添加一个nginx配置文件xiaoniao.conf,端口为81,站点目录为/opt
    #记得打开nginx配置文件中的 include调用
    #检查语法后重启nginx,查看80和81端口是否启动
    
    [root@docker01 conf.d]# cat /etc/nginx/conf.d/xiaoniao.conf
    server {
            listen       81;
            server_name  _;
            root         /opt;
            index index.html index.htm;
    }
    [root@docker01 conf.d]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    [root@docker01 conf.d]# systemctl restart nginx
    [root@docker01 conf.d]# netstat -lntup|grep nginx
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19770/nginx: master 
    tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      19770/nginx: master 
    
    #删除旧容器,杀死当前nginx进程
    #创建新容器,将小鸟飞飞飞的nginx配置文件复制到容器的nginx配置文件下
    
    [root@docker01 opt]# pkill -9 nginx 
    [root@docker01 opt]# docker container rm -f `docker ps -a -q`   
    [root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /opt/xiaoniao:/opt nginx:latest
    
    

    10.0.0.11:80

    image

    10.0.0.11:81

    image.png

    第二种方法:进入容器修改

    #创建新容器,把代码复制到容器中后 进入容器
    
    [root@docker01 opt]# docker container rm -f `docker ps -a -q`
    [root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
    [root@docker01 opt]# docker exec  -it silly_napier /bin/bash
    
    #在容器中生成xiaoniao.conf的nginx配置文件
    echo 'server {
            listen       81;
            server_name  _;
            root         /opt;
            index index.html index.htm;
    }' >/etc/nginx/conf.d/xiaoniao.conf
    
    root@cde61c762776:/etc/nginx/conf.d# ls
    default.conf  xiaoniao.conf
    
    #退出容器在宿主机上重启nginx容器 浏览器访问查看是否成功
    [root@docker01 opt]# docker restart silly_napier
    silly_napier
    
    
    image.png
    image.png

    第三种方法:在容器中使用apt-get工具下载vim工具

    Debian系统优化源的链接

    #删除旧容器,创建新的nginx容器,把代码复制到容器中,并进入容器
    
    [root@docker01 opt]# docker container rm -f `docker ps -a -q`
    [root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
    [root@docker01 opt]# docker exec -it magical_engelbart /bin/bash
    root@70e72068d2d0:/# 
    
    #查看容器的版本—Debian,和当前的源的命令
    
    root@70e72068d2d0:/# cat /etc/os-release 
    root@70e72068d2d0:/# cat /etc/apt/sources.list
    
    #执行下面的命令,优化Debian的源
    root@70e72068d2d0:/# echo 'deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
    deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
    deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
    deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
    deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
    deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
    deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
    deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list
    
    #更新缓存
    root@70e72068d2d0:/# apt-get update
    
    #使用apt-get下载 vim
    root@70e72068d2d0:/# apt-get install vim -y
    
    #添加xiaoniao.conf的配置文件
    root@70e72068d2d0:/# vim /etc/nginx/conf.d/xiaoniao.conf
    server {
            listen       81;
            server_name  _;
            root         /opt;
            index index.html index.htm;
    }
    
    #和之前的步骤相同,退出容器,在宿主机上重启nginx容器 
    #浏览器访问查看是否成功
    [root@docker01 opt]# docker restart silly_napier
    silly_napier
    
    
    image image

    apt-get 常用的命令

    apt-cache search packagename 搜索包
    apt-cache show packagename 获取包的相关信息,如说明、大小、版本等
    apt-get install packagename 安装包
    apt-get install packagename --reinstall 重新安装包
    apt-get -f install 修复安装”-f = –fix-missing”
    apt-get remove packagename 删除包
    apt-get remove packagename --purge 删除包,包括删除配置文件等
    apt-get update 更新源
    apt-get upgrade 更新已安装的包
    apt-get dist-upgrade 升级系统
    apt-get dselect-upgrade 使用 dselect 升级
    apt-cache depends packagename 了解使用依赖
    apt-cache rdepends packagename 是查看该包被哪些包依赖
    apt-get build-dep packagename 安装相关的编译环境
    apt-get source packagename 下载该包的源代码
    apt-get clean 清理无用的包
    apt-get autoclean 清理无用的包
    apt-get check 检查是否有损坏的依赖
    
    

    Debian操作系统常用命令

    资料链接

    有些需要下载
    apt-get install <软件名> -y
    
    iproute     # ip addr
    wget        # 下载软件
    curl        # curl工具
    ethtool     # 查看网卡状态
    
    一、通用命令: 1\. date :print or set the system date and time
        2\. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z 等)
        3\. passwd: print or set the system date and time (用 passwd -h 查看)
        4\. logout, login: 登录 shell 的登录和注销命令
        5\. pwd: print or set the system date and time
        6\. more, less, head tail: 显示或部分显示文件内容.
        7\. lp/lpstat/cancel, lpr/lpq/lprm: 打印文件.
        8\. 更改文件权限: chmod u+x...
        9\. 删除非空目录:rm -fr dir
        10.拷贝目录: cp -R dir
    
    二、ubuntu 常用命令:
    1\. dpkg: package manager for Debian
        * 安装: dpkg -i package
        * 卸载: dpkg -r package
        * 卸载并删除配置文件: dpkg -P |--purge package
        * 如果安装一个包时。说依赖某些库。可以先 #apt-get install somelib...
        * 查看软件包安装内容 :dpkg -L package
        * 另外 dpkg 还有 dselect 和 aptitude 两个 frontend.
    
    2\. apt
        * 安装: apt-get install packs
        * apt-get update : 更新源
        * apt-get upgrade: 升级系统。
        * apt-get dist-upgrade: 智能升级。安装新软件包,删除废弃的软件包
        * apt-get -f install : -f == --fix broken 修复依赖
        * apt-get autoremove: 自动删除无用的软件
        * apt-get remove packages :删除软件
        * apt-get remove package --purge 删除包并清除配置文件
        * 清除所以删除包的残余配置文件: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P
        * 安装软件时候包的临时存放目录 : /var/cache/apt/archives
        * 清除该目录: apt-get clean
        * 清除该目录的旧版本的软件缓存: apt-get autoclean
        * 查询软件 some 的依赖包: apt-cache depends some
        * 查询软件 some 被哪些包依赖: apt-get rdepends some
        * 搜索软件: apt-cache search name|regexp
        * 查看一个软件的编译依赖库: apt-cache showsrc packagename|grep Build-Depends
        * 下载软件的源代码 : apt-get source packagename (注: sources.list 中应该有 deb-src 源)
        * 安装软件包源码的同时, 安装其编译环境 :apt-get build-dep packagename (有 deb-src 源)
        * 如何将本地光盘加入安装源列表: apt-cdrom add
    
    3\. 系统命令:
        * 查看内核版本: uname -a
        * 查看 ubuntu 版本: cat /etc/issue * 查看网卡状态 : ethtool eth0
        * 查看内存,cpu 的信息: cat /proc/meminfo ; cat /proc/cpuinfo
        (/proc 下面的有很多系统信息)
        * 打印文件系统空间使用情况: df -h
        * 查看硬盘分区情况: fdisk -l
        * 产看文件大小: du -h filename;
        * 查看目录大小: du -hs dirname ; du -h dirname 是查看目录下所有文件的大小
        * 查看内存的使用: free -m|-g|-k
        * 查看进程: ps -e 或 ps -aux -->显示用户
        * 杀掉进程: kill pid
        * 强制杀掉: killall -9 processname
    
    4\. 网络相关:
        * 配置 ADSL: sudo pppoeconf
        * ADSL 手工拨号: sudo pon dsl-provider
        * 激活 ADSL : sudo /etc/ppp/pppoe_on_boot
        * 断开 ADSL: sudo poff 
        * 根据 IP 查网卡地址: arping IP 地址
        * 产看本地网络信息(包括 ip 等): ifconfig | ifconfig eth0
        * 查看路由信息: netstat -r
        * 关闭网卡: sudo ifconfig eth0 down
        * 启用网卡: sudo ifconfig eth0 up
        * 添加一个服务: sudo update-rc.d 服务名 defaults 99
        * 删除一个服务: sudo update-rc.d 服务名 remove
        * 临时重启一个服务: /etc/init.d/服务名 restart
        * 临时关闭一个服务: /etc/init.d/服务名 stop
        * 临时启动一个服务: /etc/init.d/服务名 start
        * 控制台下显示中文: sudo apt-get install zhcon
        * 查找某个文件: whereis filename 或 find 目录 -name 文件名
        *通过 ssh 传输文件
        scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
        scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
    
    5\. 压缩:
        *解压缩 a.tar.gz
        #tar zxvf a.tar.gz
        *解压缩 a.tar.bz2 #tar jxvf a.tar.bz2
        *压缩 aaa bbb 目录为 xxx.tar.gz
        #tar zcvf xxx.tar.gz aaa bbb
        *压缩 aaa bbb 目录为 xxx.tar.bz2
        #tar jcvf xxx.tar.bz2 aaa bbb
    
    6\. Nautilus:
        特殊 URI 地址
        * computer:/// - 全部挂载的设备和网络
        * network:/// - 浏览可用的网络
        * burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
        * smb:/// - 可用的 windows/samba 网络资源
        * x-nautilus-desktop:/// - 桌面项目和图标
        * file:/// - 本地文件
        * trash:/// - 本地回收站目录
        * ftp:// - FTP 文件夹
        * ssh:// - SSH 文件夹
        * fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
        * themes:/// - 系统主题文件夹
        * 显示隐藏文件: Ctrl+h
        * 显示地址栏: Ctrl+l
        * 查看已安装字体: 在 nautilus 的地址栏里输入”fonts:///“,就可以查看本机所有的 fonts`  
    
    Vi Etc/network/interfaces · 在 Debian 及其衍生版本中,hostname 都可以通过一下方式修改。众所周知,Linux 的一切都
    是存在于文件当中的,事实上 UNIX 是这种哲学的创立者。Debian 中 hostname 存在于以下文
    件。
    /etc/hostname
    
    

    10.挑战-搭建Ghost博客系统

    image

    资料链接
    https://iiong.com/gost-blog-install-notes/
    https://blog.csdn.net/qq_35974759/article/details/84858358

    手动将容器保存为镜像

    docker commit 容器id或者容器的名字   新的镜像名字[:版本号可选]
    
    1):基于容器制作镜像
    docker run -it centos:6.9 
    ######
    yum install httpd
    yum install openssh-server
    /etc/init.d/sshd start
    
    vi /init.sh
    #!/bin/bash
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    
    chmod +x /init.sh
    
    2)将容器提交为镜像
    docker commit oldboy centos6-ssh-httpd:v1
    
    3)测试镜像功能是否可用
    
    手动制作的镜像,传输时间长
    镜像初始命令
    
    制作一个kodexplorer网盘docker镜像。nginx + php-fpm(httpd + php)
    
    

    手动制作容器步骤

    手动创建一个centos6的镜像并创建一台容器

    #创建一台基础容器,81端口映射到80端口 下载nginx
    
    docker run -it -p 81:80 centos:6.9 /bin/bash
    ifconfig
    
    #做端口映射,在容器中下载nginx
    
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum install nginx -y
    
    

    在宿主机上手动制作镜像
    使用创建的镜像镜像创建容器

    #查看创建的centos6.9基础容器的ID
    #创建镜像 centos6.9_nginx v1版本
    #删除当前所有容器
    #查看宿主机中的镜像,是否有刚刚创建的镜像
    #利用新建的镜像创建容器,将82端口映射到80端口
    
    docker ps -a
    docker container commit 84265c434784 centos6.9_nginx:v1
    docker container rm -f `docker ps -a -q`
    docker image ls
    docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'
    
    

    访问10.0.0.11:82是否成功

    image

    容器搭建_扫雷小游戏

    tomcat环境

    思路

    1:启动centos6 基础容器
    yum  install  tomcat
    
    2:在容器中书写脚本文件
    vi   /init.sh
    #!/bin/bash
    service  tomcat start
    tail   -f   /var/log/tomcat/catalina.out
    
    3:把容器提交为镜像
    docker  commit   4a8871d37633   centos6.9_tomcat7:v1
    
    4:启动容器
    docker  run  -d   -p 8081:8080    -v    /opt/saolei:/var/lib/tomcat/webapps/ROOT                      centos6.9_tomcat7:v1   /bin/bash    /init.sh
    
    
    image

    具体操作步骤

    扫雷软件包下载链接_提取码: 29tu

    生产环境中,一般把源代码直接封装到镜像中,一运行容器就可以用,就不用 < -v > 挂载了

    #启动centos6基础容器,下载tomcat
    docker run -it -p 80:80 centos:6.9 /bin/bash
    
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum install tomcat -y
    
    在容器中书写脚本
    vi /init.sh
    #!/bin/bash
    service tomcat start
    tail -f /var/log/tomcat/catalina.out
    
    #把容器提交为镜像
    docker commit <容器ID> centos6.9_tomcat7:v1
    
    #将扫雷代码放到/opt目录下
    [root@docker01 ~]# ll /opt/saolei/
    total 12
    drwxr-xr-x 2 root root  161 Dec  3  2009 imgs
    -rw-r--r-- 1 root root 9250 Dec  1  2009 saolei.jsp
    
    #启动容器,为了夯住,后面要执行之前写的脚本文件
    #如果宿主机有tomcat的环境记得修改端口映射或把宿主机的环境杀掉
    pkill -9 java
    docker run -d -p 8080:8080 -v /opt/saolei:/var/lib/tomcat/webapps/ROOT centos6.9_tomcat7:v1 /bin/bash /init.sh
    
    #浏览器访问就可以玩了
    
    
    image

    容器搭建_可道云

    可道云的站点包下载链接_提取码: svg2

    #删除索引容器
    docker container rm -f `docker ps -a -q`
    
    ================================================
    
    #新建一个基础容器
    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
    
    #hosts劫持
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    
    #安装php-fpm
    yum install -y php-fpm php-gd php-mbstring
    
    #在容器中修改php配置文件
    [root@de6c450c9fe9 /]# grep  'nginx' /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    
    #在容器中修改nginx配置文件,设置站点目录为 /code
    [root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   /code;
                index  index.php index.html index.htm;
            }
            location ~ \.php$ {
                root           /code;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    }
    
    mkdir /code
    
    #在容器中下载wget和unzip命令用来下载可道云的文件
    #可道云的站点包在上面提供的下载路径可以下载使用
    #解压到站点目录下后,修改站点目录的权限为nginx
    yum install -y  wget unzip
    wget http://192.168.37.202/linux59/kodexplorer4.40.zip
    mv kodexplorer4.40.zip  code/
    cd code/
    unzip kodexplorer4.40.zip 
    chown -R nginx.nginx .
    
    #启动php和nginx
    service php-fpm restart
    service nginx restart
    
    

    浏览器访问查看

    image
    #把可道云做一个镜像
    docker commit <容器ID> kod:v1
    
    #新建一个可道云的容器
    docker run -d -p 81:80 kod:v1 service php-fpm nginx start
    
    #登录方式保证历史命令存在
    docker start <容器ID>
    docker attach <容器ID>
    
    #保证容器夯住,在容器中书写脚本
    vi /init.sh
    #!/bin/bash
    service php-fpm start
    nginx -g 'daemon off;'
    
    #将php-fpm和nginx关闭掉
    service php-fpm stop 
    service nginx stop 
    
    #测试脚本是否可用
    sh /init.sh
    
    #再次做镜像v2
    docker commit <容器ID> kod:v2
    
    #利用镜像v2运行一个新的容器
    docker run -d -p 81:80 kod:v2 /bin/bash /init.sh
    
    
    image.png

    完成

    容器搭建_phpwind论坛

    phpwind论坛站点包下载链接_提取码: fw6p

    #新建一个基础容器,80端口映射,80端口,
    #与上一个项目的可道云的81端口不要冲突
    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
    
    #在容器中执行,hosts本地劫持
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    
    #下载php环境和需要用的的命令
    yum install -y wget unzip php-fpm php-gd php-mbstring php-mysql vim 
    
    #拉取phpwind论坛的站点包,上面已有下载链接
    wget http://192.168.37.202/linux59/phpwind_UTF8_8.7.1.zip
    
    #创建站点目录,解压后并修改权限为nginx
    mkdir /code
    mv phpwind_UTF8_8.7.1.zip code/
    cd /code
    unzip phpwind_UTF8_8.7.1.zip
    chown -R nginx.nginx .
    
    #修改php-fpm配置文件
    [root@2fc2234b814b code]# grep  'nginx' /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    
    #在容器中修改nginx配置文件,设置站点目录为 /code/upload
    [root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   /code/upload;
                index  index.php index.html index.htm;
            }
            location ~ \.php$ {
                root           /code/upload;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /code/upload$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    }
    
    #启动php-fpm和nginx服务
    service php-fpm restart
    service nginx restart
    
    #安装数据库并启动
    yum install -y mysql-libs mysql-server
    service mysqld restart
    
    #进入数据库创库,删除空表
    #为数据库创建密码
    [root@2fc2234b814b code]# mysqladmin -uroot -p password 123456
    [root@2fc2234b814b code]# mysql -uroot -p123456
    #删除空表
    mysql> select user,host from mysql.user;
    mysql>  drop user ''@'2fc2234b814b';
    mysql>  drop user ''@'localhost';
    mysql> flush privileges;
    
    #创建phpwind库
    mysql> create database phpwind charset utf8;
    mysql> show databases;
    
    #调整时区
    [root@2fc2234b814b code]# /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    [root@2fc2234b814b code]# date
    Fri Sep  6 15:26:33 CST 2019
    
    #重启服务
    service php-fpm restart
    service nginx restart
    service mysqld restart
    
    

    浏览器访问查看

    image.png
    image image image image image.png

    dockerfile自动构建docker镜像

    image

    类似ansible剧本,大小几kb
    手动做镜像:大小几百M+
    dockerfile 支持自定义容器的初始命令
    dockerfile主要组成部分:

    ​ 基础镜像信息 FROM centos:6.9
    ​ 制作镜像操作指令 RUN yum install openssh-server -y
    ​ 容器启动时执行初始命令 CMD ["/bin/bash"]

    dockerfile常用指令:

    FROM  这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    LABLE      描述,标签
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
    dockerfile其他指令: 
    COPY 复制文件(不会解压)rootfs.tar.gz
    ENV  环境变量
    ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
    
    

    测试——FROM & RUN

    
    #手动制作一次docker镜像(收集命令)
    
    #编写dockerfile文件
    [root@docker01 nginx]# mkdir -p /opt/dockerfile/nginx
    [root@docker01 nginx]# cd /opt/dockerfile/nginx
    [root@docker01 nginx]# vim dockerfile
    FROM centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum install nginx -y
    CMD  ["nginx","-g","daemon off;"]
    
    #docker build自动构建docker镜像
    [root@docker01 nginx]# docker image build -t centos6.9_nginx:v2 --network=host /opt/dockerfile/nginx
    .....
    Successfully built 05342d047d21
    Successfully tagged centos6.9_nginx:v2
    
    #测试镜像可不可以使用
    docker run -d -p 88:80 centos6.9_nginx:v2
    
    
    image.png
    FROM centos:6.9 加载镜像
    RUN  启动一个临时容器, curl产生文件变化。保留文件变化,提交为临时镜像,删除临时容器
    RUN  启动一个临时容器,yum install,提交为临时镜像,删除临时容器
    
    dockerfile RUN ==  docker run 
    
    

    加速的一种方法就是把执行的命令放到一行 && \

    [root@docker01 nginx]# vim dockerfile 
    FROM centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo && \
     curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo && \
     yum install nginx php -y
    CMD  ["nginx","-g","daemon off;"]
    
    

    测试——ADD

    #创建目录
    cd dockerfile/
    mkdir saolei
    [root@docker01 saolei]# pwd
    /opt/dockerfile/saolei
    
    #添加自动创建镜像的配置文件
    [root@docker01 saolei]# vim dockerfile
    FROM  centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum  install  tomcat  -y
    
    RUN  cd /var/lib/tomcat/webapps/ && \
    curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz && \
    tar xf saolei.tar.gz && \
    mv saolei ROOT
    
    ADD  init.sh /init.sh
    CMD  ["/bin/bash","/init.sh"]
    
    #添加脚本文件
    [root@docker01 saolei]# vim init.sh
    #!/bin/bash
    service  tomcat start
    tail   -f   /var/log/tomcat/catalina.out
    
    #docker build自动构建docker镜像
    docker build -t centos6.9_tomcat7:v2  --network=host .
    
    #测试镜像可不可以使用
    docker run -d -p 8080:8080 centos6.9_tomcat7:v2
    docker ps -a -l
    
    

    浏览器访问10.0.0.11:8080

    image

    测试——EXPOSE

    #将站点包下载到saolei/下
    [root@docker01 saolei]# curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz
    [root@docker01 saolei]# vim dockerfile 
    FROM  centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum  install  tomcat  -y
    
    RUN  cd /var/lib/tomcat/webapps/ 
    ADD  saolei.tar.gz .
    RUN  mv saolei ROOT
    
    ADD  init.sh /init.sh
    
    EXPOSE 8080 
    
    CMD  ["/bin/bash","/init.sh"]
    
    #docker build自动构建docker镜像
    [root@docker01 saolei]# docker build -t centos6.9_tomcat7:v5  --network=host .
    
    

    docker常用指令

    image
    docker volume ls
    
    docker run -d -p 88:80 --volumes-from 0017aae5b068  kod:v6
    
    

    docker镜像的分层(kvm 链接克隆,写时复制的特性)

    image
    镜像分层的好处:复用,节省磁盘空间,相同的内容只需加载一份到内存。
    修改dockerfile之后,再次构建速度快
    
    dockerfile 优化:
    
    1:尽可能选择体积小linux,alpine
    
    2:尽可能合并RUN指令,清理无用的文件(yum缓存,源码包)
    
    3:修改dockerfile,把变化的内容尽可能放在dockerfile结尾
    
    4: 使用.dockerignore,减少不必要的文件ADD .   /html
    
    
    image image image
    image image

    容器间的互联(--link 是单方向的!)

    hosts解析

    image
    
    [root@docker01 kod]# docker run -d  --name nginx centos6.9_nginx:v1 nginx -g 'daemon off;'
    [root@docker01 kod]# docker exec -it nginx /bin/bash
    [root@fef3cf194be8 /]# hostname -I
    172.17.0.2 
    [root@docker01 kod]# docker run -it --link nginx:web centos6.9_nginx:v1 /bin/bash
    [root@969c228864f2 /]# ping web
    PING web (172.17.0.2) 56(84) bytes of data.
    64 bytes from web (172.17.0.2): icmp_seq=1 ttl=64 time=0.118 ms
    64 bytes from web (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms
    ^C
    --- web ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1288ms
    rtt min/avg/max/mdev = 0.118/0.119/0.120/0.001 ms
    [root@969c228864f2 /]# cat /etc/hosts
    127.0.0.1   localhost
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2  web fef3cf194be8 nginx
    
    

    docker部署zabbix监控

    上传需要的tar包

    image
    #上传后校验md5值
    ls *.tar.gz|xargs md5sum
    
    for n in `ls *.tar.gz`;do docker load -i $n  ;done
    
    docker run --name mysql-server -it \
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          -d mysql:5.7 \
          --character-set-server=utf8 --collation-server=utf8_bin
    
    docker run --name zabbix-java-gateway -t \
          -d zabbix/zabbix-java-gateway:latest
    
    docker run --name zabbix-server-mysql -t \
          -e DB_SERVER_HOST="mysql-server" \
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
          --link mysql-server:mysql \
          --link zabbix-java-gateway:zabbix-java-gateway \
          -p 10051:10051 \
          -d zabbix/zabbix-server-mysql:latest
    
    docker run --name zabbix-web-nginx-mysql -t \
          -e DB_SERVER_HOST="mysql-server" \
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          --link mysql-server:mysql \
          --link zabbix-server-mysql:zabbix-server \
          -p 80:80 \
          -d zabbix/zabbix-web-nginx-mysql:latest
    
    #zabbix的默认监控密码
    Admin:zabbix
    
    
    image.png

    监控服务

    zabbix-agent客户端软件包下载链接_提取码: y7ri

    开启另外一台docker宿主机 10.0.0.12

    image image image
    上传zabbix-agent的软件包:
    [root@docker02 ~]# hostname -I
    10.0.0.12 172.17.0.1 
    [root@docker02 ~]# ls zabbix-agent-3.2.0-1.el7.x86_64.rpm 
    zabbix-agent-3.2.0-1.el7.x86_64.rpm
    
    安装zabbix-agent客户端:
    [root@docker02 ~]# rpm -ivh zabbix-agent-3.2.0-1.el7.x86_64.rpm
    warning: zabbix-agent-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:zabbix-agent-3.2.0-1.el7         ################################# [100%]
    
    修改zabbix-agent.conf配置文件中指定的服务端IP:
    [root@docker02 ~]# egrep '^Server' /etc/zabbix/zabbix_agentd.conf 
    Server=10.0.0.11
    ServerActive=127.0.0.1
    
    重启zabbix-agent服务
    [root@docker02 ~]# systemctl restart zabbix-agent.service 
    
    在10.0.0.11 上重启docker的zabbix服务端容器,数据能够加速被监控上
    [root@docker01 ~]# docker restart zabbix-server-mysql 
    zabbix-server-mysql
    
    
    image

    docker registry(私有仓库)

    强哥的文档—docker私有仓库registry的使用

    docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry
    
    上传镜像到私有仓库:
    a:给镜像打标签
    docker  tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
    b:上传镜像
    docker push 10.0.0.11:5000/centos6-sshd:v3
    
    如果遇到报错:
    The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
    Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
    
    解决方法:
    vim  /etc/docker/daemon.json
    {
      "insecure-registries": ["10.0.0.11:5000"]
    }
    systemctl restart docker
    
    

    普通的registry

    registry软件包下载链接_提取码: fy19

    在10.0.0.11上导入私有仓库的配置文件
    [root@docker01 opt]# docker load -i registry.tar.gz 
    [root@docker01 opt]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry
    a958c7b6817dc8d38ba175c12e8a2452668a9b68b1fe9846e46004ee26646608
    
    #上传镜像到私有仓库
    [root@docker02 ~]# docker pull daocloud.io/huangzhichong/alpine-cn:latest
    [root@docker02 ~]# docker images
    REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
    nginx                                 latest              be1f31be9a87        11 months ago       109MB
    daocloud.io/huangzhichong/alpine-cn   latest              e8289dcc1d4b        2 years ago         3.98MB
    
    给镜像打标签:
    [root@docker02 ~]# docker tag e8289dcc1d4b 10.0.0.11:5000/alpine:latest
    [root@docker02 ~]# docker images
    REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
    nginx                                 latest              be1f31be9a87        11 months ago       109MB
    10.0.0.11:5000/alpine                 latest              e8289dcc1d4b        2 years ago         3.98MB
    daocloud.io/huangzhichong/alpine-cn   latest              e8289dcc1d4b        2 years ago         3.98MB
    
    上传镜像:
    [root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest 
    The push refers to repository [10.0.0.11:5000/alpine]
    Get https://10.0.0.11:5000/v2/: dial tcp 10.0.0.11:5000: connect: connection refused
    
    第一次报错后添加下面的配置:
    [root@docker02 ~]# vim  /etc/docker/daemon.json
    {
      "insecure-registries": ["10.0.0.11:5000"]
    }
    
    重启docker
    [root@docker02 ~]# systemctl restart docker
    
    再次上传镜像成功
    [root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest 
    The push refers to repository [10.0.0.11:5000/alpine]
    78cd8c87ab42: Pushed 
    60ab55d3379d: Pushed 
    latest: digest: sha256:d438c876bc7cbfe7732ca1c9a689cc3c24e15f2492ba6270d55f0a8984f96078 size: 735
    
    #再上传一个nginx的镜像
    打标签
    [root@docker02 ~]# docker tag be1f31be9a87 10.0.0.11:5000/nginx:latest
    
    上传镜像
    [root@docker02 ~]# docker push 10.0.0.11:5000/nginx
    The push refers to repository [10.0.0.11:5000/nginx]
    92b86b4e7957: Pushed 
    94ad191a291b: Pushed 
    8b15606a9e3e: Pushed 
    latest: digest: sha256:204a9a8e65061b10b92ad361dd6f406248404fe60efd5d6a8f2595f18bb37aad size: 948
    
    

    带basic认证的registry

    yum install httpd-tools -y
    mkdir /opt/registry-var/auth/ -p
    htpasswd  -Bbn oldboy 123456  >> /opt/registry-var/auth/htpasswd
    
    docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/   -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 
    
    
    #账号密码为oldboy 123456
    
    [root@docker02 ~]# docker login 10.0.0.11:5000
    Username: oldboy
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    [root@docker02 ~]# cat /root/.docker/config.json 
    {
        "auths": {
            "10.0.0.11:5000": {
                "auth": "b2xkYm95OjEyMzQ1Ng=="
            }
        },
        "HttpHeaders": {
            "User-Agent": "Docker-Client/19.03.1 (linux)"
        }
    }[root@docker02 ~]# 
    
    

    删除仓库的镜像

    docker-compose(单机版的容器编排工具)

    ansible剧本

    yum install -y docker-compose(需要epel源)

    cd my_wordpress/
    vi docker-compose.yml

    version: '3'
    ​
    services:
       db:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    ​
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         volumes:
           - web_data:/var/www/html
         ports:
           - "80:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data:
        web_data:
    
    

    启动

    docker-compose up
    

    后台启动

    docker-compose up -d
    

    重启docker服务,容器全部退出的解决办法

    方法一:docker run  --restart=always
    
    方法二:"live-restore": true
    docker server配置文件/etc/docker/daemon.json参考
    {
     "registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
     "insecure-registries":["10.0.0.11:5000"],
     "live-restore": true
    }
    
    #harbor 企业级容器 docker-compose down
    
    

    Docker Machine安装docker服务

    Docker Machine 二进制  10.0.0.11
    10.0.0.12 免密码登陆  从docker的官网下载二进制的包,去安装docker
    10.0.0.13 免密码登陆
    
    ansible:
    shell
    
    

    Docker网络类型(插件形式)

    Docker:网络模式详解
    Docker网络模式测试

    image

    查看容器的详细信息(可以查看网络类型Networks)

    docker container inspect 容器ID
    
    [root@controller ~]#   docker network ls
    NAME                DRIVER              SCOPE
    bridge              bridge              local
    host                host                local
    none                null                local
    
    
    None: 不为容器配置任何网络功能, --net=none
    Container: 与另一个运行中的容器共享 Network Namespace,--net=container:containerID(K8S)
    Host: 与宿主机共享 Network Namespace,--network=host 性能最高
    Bridge: Docker设计的NAT网络模型 默认类型
    [root@docker01 ~]# docker run --help|grep -i '\-n'
          --name string                    Assign a name to the container
          --network network                Connect a container to a network
          --network-alias list             Add network-scoped alias for the
          --no-healthcheck                 Disable any container-specified
    
    

    host(主机)

    与宿主机共用一个网络 --network=host`

    image
    [root@docker01 ~]# docker run --network=host -d centos6.9_nginx:v2 
    47fcdc6d02a2fcaf96f94c01dd8c4e30f8d18f4554ecd041a5b92291dee3e72e
    [root@docker01 ~]# docker inspect 47fcdc6d02a2  |grep -i network
                "NetworkMode": "host",
            "NetworkSettings": {
                "Networks": {
                        "NetworkID": "5755f7d4fc1e6e3b78efa629294ddc7f86a93a7d7863e
    [root@docker01 /]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1/nginx             
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
    tcp        0      0 :::5000                     :::*                        LISTEN      -                   
    tcp        0      0 :::80                       :::*                        LISTEN      1/nginx             
    tcp        0      0 :::22                       :::*                        LISTEN      -                   
    udp        0      0 127.0.0.1:323               0.0.0.0:*                               -                   
    udp        0      0 ::1:323                     :::*                                    -     
    
    
    image.png

    bridge(桥接式网络)(默认)

    image

    启动容器时,首先会在主机上创建一个docker0的虚拟网桥,相当于交换机,同时自动分配一对网卡设备,一半在容器(eth0),一半在宿主机,并且还关联到了docker0,从而进行连接。 每创建一个容器启动时自动分配地址以后会生成iptables规则,iptables -t nat -vnL 查看postrouting ,从任何接口进来,只要不从docker0跳出去,源地址任何网络地址,无论到达任何主机,都要做地址伪装,自动选择主机物理源地址

    image
    [root@docker01 ~]# yum install bridge-utils -y
    [root@docker01 ~]# docker run --network=bridge -d centos6.9_nginx:v2
    [root@docker01 ~]# brctl show
    bridge name bridge id       STP enabled interfaces
    docker0     8000.0242dffbd98d   no      vetha7e18ee
    [root@docker01 ~]# brctl show
    bridge name bridge id       STP enabled interfaces
    docker0     8000.0242dffbd98d   no      veth4e42c2f
                                vetha30a6de
    
    

    Container(K8S会常用)

    与另一个运行得容器共用一个网络Network Namespace --network=container:容器ID

    默认先起一个容器:
    docker run -d phpwind:v1
    随便启一个容器共用phpwind:v1的网络
    docker run -it --network container:2735c9b78546 nginx
    这时nginx容器和phpwind的ip都是相同的 ,同样谁先占用80端口就是谁的
    
    ##查看网络类型
    docker inspect nginx容器ID |grep -i network
      NetworkMode
    
    

    none (空)

    不为容器配置任何网络功能 --network=none 不使用任何网络类型

    docker run --network=none -d phpwind:v1 /bin/bash
    
    没有网络适合联系使用,只有基础命令
    
    

    Docker跨主机容器之间的通信macvlan

    image
    默认一个物理网卡,只有一个物理mac地址,虚拟多个mac地址
    
    ##创建macvlan网络
    docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
    ##设置eth0的网卡为混杂模式
    ip link set eth1 promisc on
    ##创建使用macvlan网络的容器
    docker run -it --network macvlan_1 --ip=10.0.0.200 busybox
    
    

    练习1:docker跨主机容器间的通信flannel

    [root@docker01 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
    [root@docker01 ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    e088d87e361f        bridge              bridge              local
    e7638e062d74        macvlan_1           macvlan             local
    [root@docker01 ~]# docker run -it --network macvlan_1 alpine:latest 
    / # 
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:01  
              inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
    
    [root@docker01 ~]# docker run -it --network macvlan_1 --ip 10.0.0.100 alpine:latest 
    / # 
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:64  
              inet addr:10.0.0.100  Bcast:10.0.0.255  Mask:255.255.255.0
    
    
    [root@docker01 ~]# docker stats --no-stream 
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    e1b597321916        laughing_nobel      0.00%               192KiB / 1.934GiB   0.01%               0B / 0B             0B / 0B             1
    af48e50366d1        confident_hypatia   0.00%               188KiB / 1.934GiB   0.01%               0B / 0B             0B / 0B  
    
    

    Dcoker跨主机容器通信之overlay

    image.png

    准备 overlay 网络实验环境

    docker_progrium_consul.tar.gz镜像包下载链接_提取码: uk8p

    设置容器的主机名

    consul:kv类型的存储数据库(key:value)

    docker01上:

    [root@docker01 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
    [root@docker01 ~]# docker load -i docker_progrium_consul.tar.gz
    [root@docker01 ~]# vim  /etc/docker/daemon.json
    {
      "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
      "cluster-store": "consul://10.0.0.11:8500",
      "cluster-advertise": "10.0.0.11:2376"
    }
    
    [root@docker01 ~]# vim /usr/lib/systemd/system/docker.service
    ...
    ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
    
    [root@docker01 ~]# systemctl daemon-reload 
    [root@docker01 ~]# systemctl restart docker
    
    

    docker02上:

    [root@docker02 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
    [root@docker02 ~]# docker load -i docker_progrium_consul.tar.gz
    [root@docker02 ~]# vim  /etc/docker/daemon.json
    {
      "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
      "cluster-store": "consul://10.0.0.11:8500",
      "cluster-advertise": "10.0.0.12:2376"
    }
    
    [root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
    ...
    ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
    
    

    docker01上创建容器:

    [root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
    
    

    浏览器访问10.0.0.11:8500

    image.png

    创建overlay网络

    [root@docker01 ~]# docker network create -d overlay --subnet 172.16.2.0/24 --gateway 172.16.2.254  ol1
    [root@docker01 ~]# docker network ls
    b2de7ebcc1f6        ol1                 overlay             global
    
    #docker02上查看
    [root@docker02 ~]# docker network ls
    b2de7ebcc1f6        ol1                 overlay             global
    
    

    启动容器测试

    [root@docker01 ~]# docker run -it --network ol1 --name test01  busybox:latest
    
    [root@docker02 ~]# docker run -it --network ol1 --name test02  busybox:latest 
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:02:02  
              inet addr:172.16.2.2  Bcast:172.16.2.255  Mask:255.255.255.0
    / # ping 172.16.2.1
    64 bytes from 172.16.2.1: seq=0 ttl=64 time=1.665 ms
    64 bytes from 172.16.2.1: seq=1 ttl=64 time=0.399 ms
    
    #每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
    
    

    搭建zabbix监控测试环境

    docker01上:

    # 添加--network ol1的网络环境
    上面已添加
    
    docker run --name mysql-server -t --network ol1\
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          -d mysql:5.7 \
          --character-set-server=utf8 --collation-server=utf8_bin
    
    docker run --name zabbix-java-gateway -t --network ol1\
          -d zabbix/zabbix-java-gateway:latest
    
    docker run --name zabbix-server-mysql -t --network ol1\
          -e DB_SERVER_HOST="mysql-server" \
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
          --link mysql-server:mysql \
          --link zabbix-java-gateway:zabbix-java-gateway \
          -p 10051:10051 \
          -d zabbix/zabbix-server-mysql:latest
    
    

    docker02上:

    #上传zabbix-web-nginx-mysql.tar.gz的镜像并导入镜像
    [root@docker02 ~]# ls zabbix-web-nginx-mysql.tar.gz 
    zabbix-web-nginx-mysql.tar.gz
    [root@docker02 ~]# docker load  -i zabbix-web-nginx-mysql.tar.gz
    
    #在docker02上添加zabbix-web-nginx-mysql容器
    docker run --name zabbix-web-nginx-mysql -t --network ol1\
          -e DB_SERVER_HOST="mysql-server" \
          -e MYSQL_DATABASE="zabbix" \
          -e MYSQL_USER="zabbix" \
          -e MYSQL_PASSWORD="zabbix_pwd" \
          -e MYSQL_ROOT_PASSWORD="root_pwd" \
          --link mysql-server:mysql \
          --link zabbix-server-mysql:zabbix-server \
          -p 80:80 \
          -d zabbix/zabbix-web-nginx-mysql:latest
    
    

    浏览器访问10.0.0.12

    image.png
    image.png

    官方下载模板_cadvisor

    官方下载模板_InfluxDB Docker

    导入模板

    image image image image

    另外一种

    image

    相关文章

      网友评论

        本文标题:docker容器

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