当前位置:   article > 正文

doctor容器创建与操作_centos doctor操作

centos doctor操作

docker是什么?

是一种轻量级的“虚拟机”
在linux容器里运行应用的开源工具

docker使用场景

打包应用程序简化部署、可脱离底层硬件任意迁移

和虚拟机的区别

           虚拟机                             容器
  • 1

资源 资源多 资源少
开启时间 30-60s 毫秒
安全 系统安全 内核共享
弹性扩展 执行时间长 执行时间短

docker核心概念

镜像:一个面向docker容器引擎的只读模板
容器:从镜像创建的运行实例
仓库:集中保存镜像的地方

docker安装

安装依赖包

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
device-mapper存储驱动程序需要device-mapper-persistent-data lvm2
device-mapper时内核种逻辑卷管理的通用设备映射机制
  • 1
  • 2

设置阿里云镜像源

[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    安装docker-ce
    这里如果是本地源会出现问题这里有解决
    问题
    错误:软件包:containerd.io-1.3.7-3.1.el7.x86_64 (docker-ce-stable)
    需要:container-selinux >= 2:2.74
    错误:软件包:3:docker-ce-19.03.13-3.el7.x86_64 (docker-ce-stable)
    需要:container-selinux >= 2:2.74
    您可以尝试添加 --skip-broken 选项来解决该问题
    您可以尝试执行:rpm -Va --nofiles --nodigest

    解决
    wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm
    rpm -ivh container-selinux-2.107-1.el7_6.noarch.rpm --nodeps --force
    然后再次安装docker
    yum -y install docker-ce
    然后systemctl start启动服务

    做阿里云容器镜像服务加速地址
    先cd /etc/docker
    然后写入

    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://wnd6z0yl.mirror.aliyuncs.com"]
    }
    EOF
    之后重载系统参数,重启服务
    [root@localhost docker]# systemctl daemon-reload
    [root@localhost docker]# systemctl restart docker
    添加路由转发功能,网络优化
    [root@localhost docker]# vi /etc/sysctl.conf 
    net.ipv4.ip_forward=1
    刷入刚刚修改的参数
    [root@localhost docker]# sysctl -p
    net.ipv4.ip_forward = 1
    然后重启网络
    [root@localhost docker]# systemctl restart network
    重启docker
    [root@localhost docker]# systemctl restart docker
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    docker就安装完成了

    docker操作命令

    镜像命令

    查看版本

    [root@localhost docker]# docker version
      Version:          19.03.13
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.13.15
    
    搜
    • 1
    • 2
    • 3
    • 4
    • 5

    索上传的共享镜像

    [root@localhost docker]# docker search nginx
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                              Official build of Nginx.                        13981               [OK]                
    jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1906                                    [OK]
    • 1
    • 2
    • 3
    • 4
    • 5

    载镜像

    [root@localhost docker]# docker pull nginx

      查看下载镜像信息

      [root@localhost docker]# docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      nginx               latest              c39a868aad02        3 days ago          133MB
      • 1
      • 2

      获取镜像详细信息

      [root@localhost docker]# docker inspect c39a868aad02 

        添加新的标签

        [root@localhost docker]# docker tag nginx:latest nginx:web
        [root@localhost docker]# docker images
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        nginx               latest              c39a868aad02        3 days ago          133MB
        nginx               web                 c39a868aad02        3 days ago          133MB
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

        删除镜像

        [root@localhost docker]# docker rmi nginx:web
        Untagged: nginx:web
        [root@localhost docker]# docker images
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        nginx               latest              c39a868aad02        3 days ago          133MB
        #如果用id删除不是最后一个id删除不掉会报错
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7

        镜像导出

        [root@localhost docker]# docker save -o /opt/nginx nginx:latest
        [root@localhost docker]# ls -lh /opt
        总用量 131M
        drwx--x--x  4 root root   28 11月  9 19:10 containerd
        -rw-------  1 root root 131M 11月  9 19:44 nginx
        drwxr-xr-x. 2 root root    6 3月  26 2015 rh
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7

        载入镜像

        [root@localhost docker]# docker load < /opt/nginx
        Loaded image: nginx:latest
        • 1

        docker容器命令

        创建容器

        [root@localhost docker]# docker create -it nginx

          -i:让容器标准输入保持打开,-t:让Docker分配一个伪终端

          查看容器状态

          [root@localhost docker]# docker ps -a
          -a:列出所有容器,包括未运行的容器
          CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
          a2b43ec21404        nginx               "/docker-entrypoint.…"   38 seconds ago       Created                                 dazzling_black
          
          
          • 1
          • 2
          • 3
          • 4
          • 5

          启动容器

          [root@localhost docker]# docker start a2b43ec21404

            进入容器

            [root@localhost docker]# docker exec -it a2b43ec21404 /bin/bash
            root@a2b43ec21404:/# 
            • 1

            退出容器

            root@a2b43ec21404:/# exit
            exit
            • 1

            终止容器运行

            [root@localhost ~]# docker stop a2b43ec21404 

              正常关闭时返回值0,强制关闭时非0值

              一次性运算用完即删(会先提示没有该容器然后下载,完成后ls然后关闭)
              报错
              ERRO[0000] error waiting for container: context canceled
              等待容器的错误:上下文已取消
              解决方法
              查看格式错误

              [root@localhost ~]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
              bin
              boot
              dev
              
              
              • 1
              • 2
              • 3
              • 4
              • 5

              删除容器

              [root@localhost ~]# docker rm 24a60af986c1 

                批量删除容器

                [root@localhost ~]# docker ps -a | awk '{print "docker rm " $1}' | bash
                Error: No such container: CONTAINER #第一个删不掉的
                30b3a332da60
                fe56b0acfae8
                786310d4b7f5
                0e66c7ab32cd
                a2b43ec21404
                ebfc16f6c8b6
                
                • 1
                • 2
                • 3
                • 4
                • 5
                • 6
                • 7
                • 8

                容器运行时不能删除镜像
                镜像在容器里不能删除镜像需要先删除容器才能删除镜像

                docker镜像服务

                基于容器现有的镜像创建
                基于模板创建镜像服务
                基于dockerfile创建常用基础服务

                将容器里运行程序及环境打包生成镜像

                [root@localhost ~]# docker commit -m aaa -a aaa -p c456e73b9b53 nginx:test
                sha256:fd453b642e6d74acf0840fc0ce7baab0450401cf58c48ada23f9db58df50da36
                • 1

                -m:说明信息,-a:作者信息,-p:生成过程中停止容器运行

                通过导入操作系统模板文件生成镜像

                [root@localhost ~]# wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
                --2020-11-09 20:15:50--  http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
                正在解析主机 download.openvz.org (download.openvz.org)... 185.231.241.69
                正在连接 download.openvz.org (download.openvz.org)|185.231.241.69|:80... 已连接。
                已发出 HTTP 请求,正在等待回应... 200 OK
                
                
                • 1
                • 2
                • 3
                • 4
                • 5
                • 6

                ※基于dockerfile创建

                dockerfile时由一组指令组成文件
                四部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行指令
                dockerfile每行支持一条指令每条指令可携带多个参数,支持使用#开头注释

                dockerfile操作指令

                FROM 镜像 :指定新镜像所基于的镜像,第一条指令必须位FROM指令,每创建一个镜像就需要一条FROM指令
                MAINTAINER 名字:说明维护人信息
                RUN命令:在所基于的镜像上执行命令,并提交新的镜像中。在容器中执行的命令
                CMD[运行的程序,参数1,参数2]:指定启动容器时才会执行的指令,如果指定多条只会执行最后一条
                EXPOSE:容器对外暴露的端口,并不是映射端口
                ENV 环境变量 变量值:设定环境变量,会被后面RUN使用
                ADD 源文件/目录 目标文件/目录:将源文件复制到目标文件,源文件要与dockerfile位于相同目录中或一个URL,将宿主机文件放入容器中
                COPY 源文件/目录 目标文件/目录:容器内部的文件复制
                VOLUME [目录]:数据卷容器,宿主机共享目录出来能够给容器使用,在容器中创建挂载点
                USER 用户名/UID:指定容器运行时的用户
                WORKDIR 路径:为后续RUN、CMD、ENTRYPOINT指定工作目录,相当于容器内的cd
                ONBUILD:指定生成的镜像作为一个基础镜像时所需要运行时的命令
                HEATHCECK:健康检查

                示例,apache创建
                需要创建目录把所有需要丢入容器内的文件放入
                [root@localhost ~]# mkdir apache
                [root@localhost ~]# cd apache/
                创建文件
                [root@localhost apache]# vi Dockerfile
                FROM centos:7#基于基础镜像
                MAINTAINER yuheng#维护镜像信息
                RUN yum -y update#更新yum仓库
                RUN yum -y install httpd#安装apache
                EXPOSE 80#开放对外端口80,容器端口
                ADD index.html /var/www/html/index.html#把宿主机html文件复制到容器中生成一个首页
                ADD run.sh /run.sh#将宿主机执行脚本放入容器
                RUN chmod 755 /run.sh#给一个执行权限
                CMD ["/run.sh"]#当容器启动时执行脚本

                接下来在apache文件夹中创建放入的两个文件
                [root@localhost apache]# vi run.sh
                #!/bin/bash
                rm -rf /run/httpd/*#如果有apche清空然后执行
                exec /usr/sbin/apachectl -D FOREGROUND#强制执行启动apache

                [root@localhost apache]# vi index.html

                test

                #测试页面

                之后就可以构建镜像了
                [root@localhost apache]# docker build -t httpd:centos .
                #创建过程中一条指令开一次容器,开完之后丢弃。
                … …
                Removing intermediate container b02d34cb20fa
                —> 9959f64340d8
                Successfully built 9959f64340d8
                Successfully tagged httpd:centos

                容器端口开放了80宿主机需要做映射进行访问,这里映射的是666端口
                [root@localhost apache]# docker run -d -p 666:80 httpd:centos
                7478bc7705412b5f903b2b6d4284458e4bc3390c1dc4f363983db86ca0812936
                7478bc770541 httpd:centos “/run.sh” 38 seconds ago Up 37 seconds 0.0.0.0:666->80/tcp gifted_lamport
                之后网页测试访问20.0.0.40:666,测试成功就完成了
                进入查看镜像会有两个,因为是基于基础镜像创建的自定义镜像

                本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
                推荐阅读
                相关标签
                  

                闽ICP备14008679号