Docker开发人生的那些年

        

 

   大家好,今天小易又总结了一款保姆级开发教程,希望能给大家带来一定的帮助。也希望大家能够点赞关注或者给个评论,多多支持一下博主。

      容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处: 

                 集装箱之间相互隔离

                 长期反复使用

                 快速装载和卸载

                规格标准,在港口和船上都可以摆放

由此我们知道容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式。

  那么我们该怎么使用容器呢?这就要讲到docker了。

   docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。

  

0.本地存储缺点
  1.非常耗内存 大型项目 存储大量数据 图片 视频 音频 甚至是用户浏览的流量 数据 就需要存储
          项目部署在服务器上  
  2. cpu被占用  很多东西就会被卡住   开启node、nginx 、kafka 或者zookeeper 起就会导致cpu占用过高
            租服务器 建自己开发的项目
  3. 文件容易被丢失  
         项目或服务开不起来  关键文件丢失 开发的程序找不到指定文件就会报错
  4. 文件自己去找 太麻烦
     基于以上缺陷就利用docker帮我们去管理文件数据等
      相当于容器存储 部署 管理 扫描文件 解决上面所有本地存储的缺陷

1. docker是什么
    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
     # c语言: void test(unsigned char x, unsigned char y);
     # go语言: func test(x,y);
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

2.docker用来干什么
     Docker的应用场景
     Web 应用的自动化打包和发布。
    自动化测试和持续集成、发布。
    在服务型环境中部署和调整数据库或其他的后台应用。
    从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

3.怎么运用docker(安装和部署)
         3.1.在Windows 10上安装Docker
            官网地址: https://hub.docker.com/
            首先需要检查电脑有没有虚拟化 Hyper-V
            下载docker for windows安装包
             测试是否安装成功
                       在CMD中运行如下命令, 有显示版本号或者显示"Hello from Docker!", 则代表安装成功
                            > docker --version
                                 显示版本:Docker version 19.03.1
                           > docker run hello-world
                                     docker : Unable to find image 'hello-world:latest' locally
                                             ...
                                            latest:
                                            Pulling from library/hello-world
                                            ca4f61b1923c:
                                            Pulling fs layer
                                            ca4f61b1923c:
                                            Download complete
                                            ca4f61b1923c:
                                            Pull complete
                                            Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
                                            Status: Downloaded newer image for hello-world:latest
                                            Hello from Docker!
                                            This message shows that your installation appears to be working correctly.
                                             ...

          3.2.在centos上安装Docker
               1.linux内核版本依赖
                  >kernel version >= 3.8
                  可以使用如下命令查看
                  >uname -a | awk '{split($3, arr, "-"); print arr[1]}'
                2.如果已安装过Docker, 需要移除老版本的Docker
                      >sudo yum remove docker \ docker-client \ docker-client-latest \docker-common \docker-latest \
                               docker-latest-logrotate \docker-logrotate \docker-engine

               3.添加Docker repository yum源        
                      # 国内源, 速度更快, 推荐
                        >sudo yum-config-manager  --add-repo  https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

                      # 官方源, 服务器在国外, 安装速度慢
                        >sudo yum-config-manager  --add-repo   https://download.docker.com/linux/centos/docker-ce.repo

               4.开始安装Docker Engine
                        >sudo yum makecache fast
                        >sudo yum install docker-ce docker-ce-cli containerd.io

              5.开启Docker
                        >sudo systemctl enable docker
                        > sudo systemctl start docker
              6.验证是否安装成功
                        >  sudo docker run hello-world
                             如果出现"Hello from Docker.", 则代表运行成功
              7.如果在每次运行docker命令时, 在前面不添加sudo, 可以执行如下命令:
                        >sudo usermod -aG docker $USER
         3.3.2.在Ubuntu上安装
              1.linux内核版本依赖
                     >kernel version >= 3.8
                         可以使用如下命令查看
                     >uname -a | awk '{split($3, arr, "-"); print arr[1]}'
                         
              2.如果已安装过Docker, 需要移除老版本的Docker
                     >sudo apt-get remove docker docker-engine docker.io containerd runc
              3.使用Docker repository 来安装
                       # 更新apt包索引
                     >sudo apt-get update
                       # 为支持https
                     >sudo apt-get install  apt-transport-https \ca-certificates \curl \ gnupg-agent \ software-properties-common

                      # 添加Docker GPG秘钥
                           # 国内源
                     >curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
                           # 或者国外源
                     > curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
                          # 添加安装源
                          # 推荐国内源
                     >sudo add-apt-repository  "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  $(lsb_release -cs)  stable"
                          # 或者国外源
                     >sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable"
           4.安装Docker
                         # 更新apt包索引
                     >sudo apt-get update
                         # 安装docker
                     >sudo apt-get install docker-ce docker-ce-cli containerd.io
          5.开启Docker
                      >sudo systemctl enable docker
                      >sudo systemctl start docker
          6.验证是否安装成功
                      > sudo docker run hello-world
                       如果出现"Hello from Docker.", 则代表运行成功
          7.如果在每次运行docker命令时, 在前面不添加sudo, 可以执行如下命令:
                      >sudo usermod -aG docker $USER


4.docker相关命令(常用的)
          4.1.容器生命周期管理命令
               run命令  =>创建一个新的容器并运行。  
               # 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。  
                     >docker run --name mynginx -d nginx:latest  
               # 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。  
                    >docker run -p 80:80 -v /data:/data -d nginx:latest  
               # 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。  
                    >docker run -it nginx:latest /bin/bash  

              start/stop/restart命令  =>docker start : 启动一个或多个已经被停止的容器。docker stop : 停止一个运行中的容器。docker restart : 重启容器。
               # 启动一个或多个已被停止的容器mynginx  
                   >docker start mynginx  
               # 停止运行中的容器mynginx  
                  >docker stop mynginx  
               # 重启容器mynginx  
                  >docker restart mynginx  

             kill命令  =>杀掉一个运行中的容器。可选参数:-s : 发送什么信号到容器,默认 KILL
               # 根据容器名字杀掉容器  
                 >docker kill tomcat7  
               # 根据容器ID杀掉容器  
                 >docker kill 65d4a94f7a39  

             rm命令 => 删除一个或多个容器。
              # 强制删除容器 db01、db02:  
                 >docker rm -f db01 db02  
              # 删除容器 nginx01, 并删除容器挂载的数据卷:  
                 >docker rm -v nginx01  
              # 删除所有已经停止的容器:  
                 >docker rm $(docker ps -a -q)  

            create创建命令  =>创建一个新的容器但不启动它。
              # 使用docker镜像nginx:latest创建一个容器,并将容器命名为mynginx  
                 >docker create --name mynginx nginx:latest 

            exec命令  =>在运行的容器中执行命令。可选参数:-d : 分离模式: 在后台运行 -i : 即使没有附加也保持STDIN 打开 -t : 分配一个伪终端
              # 在容器 mynginx 中以交互模式执行容器内 /root/nginx.sh 脚本  
                 >docker exec -it mynginx /bin/sh /root/nginx.sh  
              # 在容器 mynginx 中开启一个交互模式的终端  
                 >docker exec -i -t  mynginx /bin/bash  
              # 也可以通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器。  
                 >docker ps -a   
                      tips: docker exec -it 9df70f9a0714 /bin/bash  
           pause/unpause命令  =>docker pause :暂停容器中所有的进程。 docker unpause :恢复容器中所有的进程。
              # 暂停数据库容器db01提供服务。  
                 >docker pause db01  
              # 恢复数据库容器 db01 提供服务  
                 >docker unpause db0  

      4.2.容器操作命令
           ps命令 =>列出容器。可选参数:
              # 列出所有在运行的容器信息。  
                 >docker ps  
              # 列出最近创建的5个容器信息。  
                 >docker ps -n 5  
              # 列出所有创建的容器ID。  
                 >docker ps -a -q  
           补充说明:
                容器的7种状态:created(已创建)、restarting(重启中)、running(运行中)、
                                        removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)。
          
          inspect命令  =>获取容器/镜像的元数据。可选参数:
              # 获取镜像mysql:5.7的元信息。  
                  >docker inspect mysql:5.7  
              # 获取正在运行的容器mymysql的 IP。  
                  >docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql  

          top命令  =>查看容器中运行的进程信息,支持 ps 命令参数。
              # 查看容器mymysql的进程信息。  
                  >docker top mymysql  
              # 查看所有运行容器的进程信息。  
                  >for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done  

         events命令  =>获取实时事件。参数说明:
             # 显示docker 2016年7月1日后的所有事件。  
                  >docker events  --since="1467302400"  
             # 显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件。  
                  >docker events -f "image"="mysql:5.6" --since="1467302400"  

         logs命令  =>获取容器的日志。参数说明:
            # 跟踪查看容器mynginx的日志输出。  
                  >docker logs -f mynginx  
            # 查看容器mynginx从2016年7月1日后的最新10条日志。  
                  >docker logs --since="2016-07-01" --tail=10 mynginx  

         export命令  =>将文件系统作为一个tar归档文件导出到STDOUT。参数说明:
            # 将id为a404c6c174a2的容器按日期保存为tar文件。  
                  >docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2  
         port命令  =>列出指定的容器的端口映射。
            # 查看容器mynginx的端口映射情况。  
                  >docker port mymysql  

     4.3.容器rootfs命令
         commit命令 =>从容器创建一个新的镜像。参数说明:
            # 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。  
                  >docker commit -a "guodong" -m "my db" a404c6c174a2  mymysql:v1   

        cp命令  =>用于容器与主机之间的数据拷贝。参数说明:
            # 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。  
                  >docker cp /www/runoob 96f7f14e99ab:/www/  
           # 将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。  
                  >docker cp /www/runoob 96f7f14e99ab:/www  
           # 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。  
                  >docker cp  96f7f14e99ab:/www /tmp/  
       
        diff命令  =>检查容器里文件结构的更改。
           # 查看容器mymysql的文件结构更改。  
                  >docker diff mymysql  

      4.4.镜像仓库命令
         login/logout命令 =>docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 
                                       Docker Hubdocker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub参数说明:
           # 登陆到Docker Hub  
                  >docker login -u 用户名 -p 密码  
          # 登出Docker Hub  
                  >docker logout  

       pull命令  =>从镜像仓库中拉取或者更新指定镜像。参数说明:
          # 从Docker Hub下载java最新版镜像。  
                  >docker pull java  
          # 从Docker Hub下载REPOSITORY为java的所有镜像。  
                  >docker pull -a java  

       push命令  =>将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。参数说明:
         # 上传本地镜像myapache:v1到镜像仓库中。  
                  >docker push myapache:v1  

       search命令  =>从Docker Hub查找镜像。参数说明:
        # 从 Docker Hub 查找所有镜像名包含 java,并且收藏数大于 10 的镜像  
                  >docker search -f stars=10 java  
    
    4.5.本地镜像管理命令
      images命令  =>列出本地镜像。参数说明:
        # 查看本地镜像列表。  
                >docker images  
        # 列出本地镜像中REPOSITORY为ubuntu的镜像列表。  
                >docker images  ubuntu   

     rmi命令  =>删除本地一个或多个镜像。参数说明:
        # 强制删除本地镜像 guodong/ubuntu:v4。  
               >docker rmi -f guodong/ubuntu:v4

    tag命令  =>标记本地镜像,将其归入某一仓库。
        # 将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。  
               >docker tag ubuntu:15.10 runoob/ubuntu:v3  

    build命令  =>用于使用 Dockerfile 创建镜像。参数说明:
        # 使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1  
                >docker build -t runoob/ubuntu:v1 .   
        # 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像  
                >docker build github.com/creack/docker-firefox  
        # 通过 -f Dockerfile文件的位置 创建镜像  
                 >docker build -f /path/to/a/Dockerfile .  

    history命令  =>查看指定镜像的创建历史。参数说明:
        # 查看本地镜像 guodong/ubuntu:v3 的创建历史。  
                 >docker history guodong/ubuntu:v3  

    save命令 =>将指定镜像保存成 tar 归档文件。参数说明:
       # 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档  
                 >docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3  

    load命令  =>导入使用 docker save 命令导出的镜像。参数说明:
       # 导入镜像  
                  >docker load --input fedora.tar

    import命令   =>从归档文件中创建镜像。参数说明:
       # 从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4  
                  >docker import  my_ubuntu_v3.tar runoob/ubuntu:v4    


5. docker容器优点
     5.1、快速,一致地交付您的应用程序
         您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
         他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
         当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
         测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。 

    5.2、响应式部署和扩展
          Docker 是基于容器的平台,允许高度可移植的工作负载。
          Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
          Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

     5.3、在同一硬件上运行更多工作负载
         Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。
         Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯我aier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值