美文网首页MySQL
Docker容器管理技术-基础应用

Docker容器管理技术-基础应用

作者: MySQL_oldguo | 来源:发表于2019-07-25 08:23 被阅读0次

    1. Docker的前世今生

    1.1 什么是容器?

    百度百科解释(引用于百度百科图片):

    image.png
    image.png
    容器是一种基础工具;泛指可以容纳其他物品的工具。可以部分或者完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,容器可以保护内容物。
    人类使用容器的历史,至少有数十万乃至百万年。
    例如:瓶、罐、箱、篮、桶、杯。。。
    NO!NO!NO!跑题了,并非我们今天要研究的主要话题!(-:
    

    1.2 什么是Linux的容器(LXC--LinuX Container)?

    1.2.1 主机虚拟化与容器的区别

    image.png

    1.2.2 容器发展之路

        容器技术最早出现在FreeBSD上叫做 jail,将一个进程放入jail中运行,不管这个进程在其中发生怎样的错误都不会影响到系统上其他进程的运行。
        后来,jail技术在Linux中的实现叫做vserver,vserver所实现的功能体现为chroot以及namespaces实现资源的隔离。
        容器技术出现的主要目的是为了"资源隔离"
    
    image.png image.png
    Linux在内核中通过namespaces,原生支持6种资源隔离,并且直接通过系统调用对外进行输出。
    另外,仅靠namespaces,就可以完成容器的功能吗?
    对,我们还需要靠CCgroups 控制每个namespace中的资源分配。
    
    
    image.png image.png

    1.2.4 LXC到Docker的历史

    LXC,将原来需要手工编码实现的容器技术,进行了封装。实现了,更加方便、快速的容器创建及管理的技术。通过固有“模板”,安装并启动容器。将远程的程序包下载到本地,安装并创建好我们需要的容器。
    确实,LXC已经很大程度上降低了容器管理的难度,但是依然使用一些弊端。有些时候可能需要自定制模板,以及使用LXC中自带的模板,以及大规模创建及复制依然比较麻烦。所以,很难大规模的应用。
    所以,出现了Docker技术。Docker是在LXC基础上,使用GoLang二次开发的封装版。
    

    2. Docker安装部署

    2.0、环境准备

    curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    

    2.1 安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum list docker-ce.x86_64 --showduplicates | sort -r
    

    2.2 安装docker-ce

    yum install -y --setopt=obsoletes=0 \
    docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
    

    2.3 启动Docker服务

    systemctl daemon-reload
    systemctl restart docker
    docker version
    docker  info
    

    2.4 配置镜像加速

    阿里云Docker-hub
    
    https://cr.console.aliyun.com/cn-hangzhou/mirrors
    mkdir -p /etc/docker
    
    tee /etc/docker/daemon.json <<-'EOF'
    {
       "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
    }
    EOF   
              
    或者:
    vim   /etc/docker/daemon.json
    
        {
             "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
        }
    

    3. Doocker体系结构

    image.png

    4. Docker的镜像基础管理

    4.1 获取镜像

    docker search centos
    docker pull centos:6.9
    docker pull centos:7.5.1804
    docker pull nginx
    

    4.2 查询镜像

    docker images
    docker images -q 
    docker inspect ID/name:tag
    

    4.3 删除镜像

    docker rmi  IID 
    docker rmi `docker images -q`
    docker rmi $(docker images -q)
    

    4.4 导入导出镜像

    [root@docker ~]# docker image save nginx >/opt/nginx.tar.gz
    [root@docker ~]# docker image load -i /opt/nginx.tar.gz
    

    5. Docker容器基础管理

    5.1 容器体验

    docker run -it --name="test_vim"  3fe2fe0dab2e /bin/bash
    docker run -d -p 8080:80 --name="discuz" nginx:1.14
    

    5.1 容器的多类启动方式

    交互式启动

     [root@docker ~]# docker run -it --name "testcentos" centos:6.9 /bin/bash
    主要是针对于工具类的容器,一旦exit容器,容器就自动关闭
    

    守护式启动

    1.交互式启动容器+Ctrl+p+q
    [root@docker ~]# docker run  -it --name "testnginx" nginx /bin/bash
    加ctrl+p+q
    [root@docker ~]# docker attach testnginx
    2.死循环
    docker run  --name testnginx1  -d nginx /bin/sh -c "while true ;do echo hello world; sleep 1;done"
    3.服务前台运行
    sshd -D  
    nginx -g ""
    

    5.2docker容器的网络访问

    指定映射(docker 会自动添加一条iptables规则来实现端口映射)
        -p hostPort:containerPort
        -p ip:hostPort:containerPort 
        -p ip::containerPort(随机端口)
        -p hostPort:containerPort/udp
        -p 81:80 –p 443:443
    
    随机映射
        docker run -P 80(随机端口)
    

    5.3 容器的其他管理

    docker ps -a  -q -l
    docker top testxx
    docker inspect
    docker attach 容器ID|容器名称(工具类)配合ctrl+p+q
    docker exec  -i -t  容器ID|容器名称 /bin/bash(服务类),一般是做服务类容器调试用
    [root@docker ~]# docker exec -it  centos6.9   /bin/bash
    [root@oldboy docker]# docker logs testxx
    [root@oldboy docker]# docker logs -t testxx
    [root@oldboy docker]# docker logs -tf testxx
    [root@oldboy docker]# docker logs -tf  --tail 10 testxx
    [root@oldboy docker]# docker logs -tf  --tail 0 testxx
    
    

    6. Docker容器持久化存储——volume卷管理

    6.1 启动挂载数据卷

    [root@docker httpd]# docker run -d -p 8083:80 --name "http8083" -v /opt/Volume/httpd:/usr/local/apache2/htdocs httpd
    733eefea35456e47e71775b502e0376aff24b55612fe3030c8690d22870e8f29
    [root@docker httpd]# docker run -d -p 8084:80 --name "http8084" -v /opt/Volume/httpd:/usr/local/apache2/htdocs httpd
    47d3059e9aa8af3322665815748c065ba6ad26d6f81fa60b61261873889deb40
    
    [root@docker httpd]# curl 10.0.0.110:8083
    test volume
    [root@docker httpd]# curl 10.0.0.110:8084
    test volume
    

    6.2 数据卷容器

    docker run -it  --name "httpd_volumes" -v /opt/Volume/httpd_volume/conf:/usr/local/apache2/conf -v /opt/Volume/httpd_volume/html:/usr/local/apache2/htdocs centos:6.9 /bin/bash
    ctrl p q
    拷贝数据到数据卷中
    /opt/Volume/httpd_volume/html
    /opt/Volume/httpd_volume/conf
    docker  cp  DOCKERNAME:/opt/a.txt  /opt
    使用数据卷容器
    docker run -d  -p 8085:80 --volumes-from  httpd_volumes --name "http8085"  httpd
    docker run -d  -p 8086:80 --volumes-from  httpd_volumes --name "http8086"  httpd
    

    6.3 使用数据卷容器进行备份(了解一下)

    docker run --volumes-from  httpd_volumes --name "httpd_volumesbak" --rm  -v /backup:/backup:rw  centos:6.9   tar cvf /backup/conf.tar /usr/local/apache2/conf
    
    docker run --volumes-from  centosv1 --name "centosrestore" --rm  -v /backup:/backup:rw  centos   tar xvf  /backup/conf.tar
    

    7. Docker镜像制作

    7.1 基于容器制作镜像

     ssh例子:
     [root@docker ~]# docker rm -f `docker ps -qa`
     [root@docker ~]# docker run -it --name "oldguo_sshv1" centos:6.9 /bin/bash
    [root@df8386465269 /]# passwd
     mv /etc/yum.repos.d/*.repo /tmp
     echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.110/pub/centos6\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    yum makecache fast && yum install openssh-server -y
     /etc/init.d/sshd start     ----->重要:ssh第一次启动时,需要生成秘钥,生成pam验证配置文件
     /etc/init.d/sshd stop
     "hang" 运行sshd,并丢到后台
     /usr/sbin/sshd -D
    docker commit oldguo_sshv1 oldguo/sshd:v1
    练习:   
     nginx 手工制作镜像
     nginx -g "daemon off;"
    

    7.2 基于Dockerfile构建简易镜像

    7.2.1 基本功能介绍

    FROM
    Syntax:
              FROM <repo>:[:<tag>]
              or
              FROM  <repo>@<ImageID>
    
    LABEL
              Syntax:
              LABEL DEV="oldguo <22654481@qq.com>"
    
    RUN
    
    CMD
    
    ENTRYPOINT
    

    7.2.2 高级功能

    EXPOSE
    ADD
    COPY
    VOLUME
    USER
    ENV
    WORKDIR
    ONBUILD
    

    7.2.3 案例书写

    例子: centos 6.9+SSH 
    [root@docker test]# cat dockerfile 
    FROM centos:6.9
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum makecache fast && yum install openssh-server -y
    RUN echo "123456"|passwd --stdin root
    RUN /etc/init.d/sshd start
    EXPOSE 22
    CMD ["/usr/sbin/sshd","-D"]
    [root@docker test]# 
    

    小练习

    1. httpd: dockerfile
    apache2 -D FOREGROUND
    2.双服务   sshd+httpd     
    cat  opt/Dockerfile/app/ssh_httpd
    [root@docker ssh_httpd]# cat Dockerfile 
    FROM centos:6.9
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.110/pub/centos6\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum makecache fast && yum install openssh-server -y
    RUN yum install -y httpd
    RUN echo "123456"|passwd --stdin root
    RUN /etc/init.d/sshd start
    EXPOSE 22
    EXPOSE 80
    ADD ssh_httpd.sh /opt/ssh_httpd.sh
    CMD ["/bin/bash","/opt/ssh_httpd.sh"]
    VOLUME /var/www/html
    [root@docker ssh_httpd]# cat ssh_httpd.sh 
    #!/bin/bash
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    

    双服务 sshd+httpd +volumns

    mkdir  -p /opt/Dockerfile/app/ssh_httpd_vol
    
    [root@docker ssh_httpd]# vim Dockerfile 
    FROM centos:6.9
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.110/pub/centos6\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum makecache fast && yum install openssh-server -y
    RUN yum install -y httpd
    RUN echo "123456"|passwd --stdin root
    RUN /etc/init.d/sshd start
    EXPOSE 22
    EXPOSE 80
    ADD ssh_httpd.sh /opt/ssh_httpd.sh
    VOLUME /var/www/html
    CMD ["/bin/bash","/opt/ssh_httpd.sh"]
    
    [root@docker ssh_httpd]# cat ssh_httpd.sh 
    #!/bin/bash
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    
    docker build -t "oldguo/ssh_httpd_vol:v1" .
    

    centos7.5+sshd

    方法1:
     ## Centos7.5
    [root@docker sshd]# cat dockerfile 
    FROM centos:7.5.1804
    FROM centos:7.5.1804
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum install -y openssh-server
    RUN yum install -y openssh-clients
    RUN yum install -y sed
    RUN yum install net-tools* -y
    RUN yum install iproute-* -y
    RUN yum install NetworkManager -y
    RUN mkdir /var/run/sshd
    RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
    RUN sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
    RUN echo 'root:123456' | chpasswd
    RUN /usr/bin/ssh-keygen -A
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    
    方法二:
    ##制作支持systemd的7.5镜像
    https://forums.docker.com/t/any-simple-and-safe-way-to-start-services-on-centos7-systemd/5695/10
    https://access.redhat.com/articles/754933
    
    FROM centos:7.5.1804
    ENV container docker
    RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
    systemd-tmpfiles-setup.service ] || rm -f $i; done); \
    rm -f /lib/systemd/system/multi-user.target.wants/*;\
    rm -f /etc/systemd/system/*.wants/*;\
    rm -f /lib/systemd/system/local-fs.target.wants/*; \
    rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
    rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
    rm -f /lib/systemd/system/basic.target.wants/*;\
    rm -f /lib/systemd/system/anaconda.target.wants/*;
    VOLUME [ "/sys/fs/cgroup" ]
    CMD ["/usr/sbin/init"]
    
    FROM oldguo/centos7.5:v1
    RUN mv /etc/yum.repos.d/*.repo /tmp
    RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
    RUN yum makecache fast
    RUN yum install -y openssh-server
    RUN yum install -y openssh-clients
    RUN yum install -y sed
    RUN yum install net-tools* -y
    RUN yum install iproute-* -y
    RUN yum install NetworkManager -y
    RUN echo 'root:123456' | chpasswd
    RUN systemctl enable sshd
    EXPOSE 22
    CMD ["/usr/sbin/init"]
    
    测试
    docker run -tid --privileged=true --name testssh -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 2022:22 test:v1
    

    9. Docker构建私有registry

    9.1 启动registry

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

    9.2 修改配置文件

    {
      "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
       "insecure-registries": ["10.0.0.100:5000"]
    }
    
    [root@docker docker]# systemctl  restart docker
    

    9.3 制作本地镜像并push到

    [root@docker ~]# docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
    [root@docker ~]# docker images
    [root@docker ~]# docker push 10.0.0.100:5000/oldguo/nginx:v1
    

    9.4 异地进行pull镜像

    [root@docker ~]# docker pull  10.0.0.100:5000/oldguo/nginx:v1
    

    9.5 本地仓库加安全认证

    生成密码:
    yum install httpd-tools -y
    mkdir /opt/registry-auth/ -p
    htpasswd  -Bbn oldguo 123 > /opt/registry-auth/htpasswd
    

    9.6 重新启动带有秘钥功能的registry容器

    docker rm -f `docker ps -aq`
    docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry  --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 
    

    9.7 push镜像,需要进行login

    [root@oldboy ~]# docker login 10.0.0.100:5000
    Username: oldguo  
    Password: 
    

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

    方法一:docker run --restart=always

    方法二:"live-restore": true
    docker server配置文件/etc/docker/daemon.json参考
    {
    .....
    ......
    "live-restore": true
    }

    11. habor实现图形化register

    第一步:安装docker和docker-compose
    yum install -y docker-compose 
    第二步:下载harbor-offline-installer-vxxx.tgz
    第三步:上传到/opt,并解压
    第四步:修改harbor.cfg配置文件
    hostname = 10.0.0.11
    harbor_admin_password = 123456
    第五步:执行install.sh
    
    

    相关文章

      网友评论

        本文标题:Docker容器管理技术-基础应用

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