• 初始docker


     什么是docker?

    很多人都是使用docker但是对docker的理解其实并没有这么透彻,只知道怎么用但是不知道为什么用 什么时候去用。

    一、环境配置的难题

        软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

        用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量

        环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

    Linux 容器

    由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

    Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

    由于容器是进程级别的,相比虚拟机有很多优势。

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

    Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

    总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

     

    1、先卸载你的旧版本的docker(可以不卸载别较真 哈哈)

    CentOS安装docker

    请遵循官方安装方式!!!

    https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script

    官方教程如下,最正确安装docker姿势

    1.卸载旧版本
    sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-selinux 
                      docker-engine-selinux 
                      docker-engine
    
    2.设置存储库
    sudo yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2
    
    sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    
    3.安装docker社区版
    sudo yum install docker-ce
    4.启动关闭docker
    systemctl start docker

    2、下载docker加速器

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

    下载完成之后就重启docker然后就可以了

    然后看看你的配置是否生效了

    cat /etc/docker/daemon.json

    也可以手动进行和配置加速器:

    cat /etc/docker/daemon.json #修改这个文件为如下内容
    
    {
        "registry-mirrors": [
            "http://95822026.m.daocloud.io"
        ],
        "insecure-registries": []
    }
    ---------------------------------------------------------
    或者用这条命令
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
    
    #事后重启docker
    systemctl restart docker

    然后查看docker版本 和状态信息

    docker   version

    在启动docker的时候有时候会报错:WARNING: IPv4 forwarding is disabled. Networking will not work.

    是因为docker被禁用了 我们要去系统配置中打开设置

    我们需要在/usr/lib/sysctl.d/00-system.conf中添加

    systemctl restart network && systemctl restart docker

    查看docker所有的镜像

    docker images
    也可以
    docker image ls

     如果查看docker  镜像的时候发现下面的错误就是你的docker安装了但是 是没有启动的

    需要先启动docker

    启动docker:
    
        systemctl start docker
    
    
    
    su root # 先切换到root用户, 再执行以下命令
    
    systemctl enable docker # 开机自动启动docker
    
    systemctl start docker # 启动docker
    systemctl restart docker # 重启dokcer

    我们想下载的镜像可以直接通过pull来下载 但是下载之前也可以通过search来看看要下载的信息

    docker  search + 要查看的镜像
    
    docker  search hello-world  # 查看hello-world镜像

     就可以看到不同的版本的镜像的点赞数目

     我们最好以点赞数目最多的使用

     分层技术一层一层下载

     小技巧:

    你可以直接run一个镜像的前3位id 就可以跑它

    查看运行的docker 容器

    docker  ps  查看正在运行的docker 容器
    
    
    docker  ps -a   查看所有的运行过的容器

    docker ps -aq 查看所有的容器id

    删除docker镜像

    docker  rmi +要删除的镜像名(镜像id)
    
    
    docker  rm +要删除的容器id

    镜像是你下载下来的 容器是你启动的镜像生成的

    批量删除:

    docker ps -aq 是查看你的所有的正在运行的容器id
    然后用反引用号 把这查到的id都加进去

    docker rm `docker ps -aq`
    批量删除已经推出的容器:
      docker container prune

     

     当你删除镜像的时候可能会发生:

    Error response from daemon: conflict: unable to delete 1e1148e4cc2c (cannot be forced) - image has dependent child images

    这个是由于你的镜像有正在运行的生成的容器造成的,我们要先删除其生产的容器然后再进行镜像的删除

     当报错无法删除的时候就进行值的

    然后  docker ps -a 查出所有的容器id

    然后docker  rm 删除对应的容器  就可以 了

    如果容器很多那就要一个一个删除或者删除所有的推出额镜像:docker container prune

     然后再查看你的容器就没有了 

    运行一个ubuntu容器 

    咱们要在cenots7操作系统下,以docker下载一个ubuntu image文件,然后以image启动容器

    docker pull ubuntu
    
    或者指定版本:docker pull ubuntu:14.04

    运行这个乌班图容器!

    docker run  ubuntu
    
    
    也可以指定参数启动
    docker run - rm ubuntu

    dicker 启动的参数

    docker run就是运行容器的命令。
    参数
     -it : -i 是交互式操作,-t是终端
     --rm  :   容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
     ubuntu:14.04   这指的是镜像文件
     bash   :  指定用交互式的shell,因此需要bash命令
    
    
    
    
    
    eg:
        docker run --rm ubuntu  # 启动后删除 不留痕迹 docker  ps -a 也看不到
      docker run -it --rm ubuntu # 启动是的交互命令结束不留痕迹

    用 --rm 参数启动的和无参数的是不一样的

     

    执行了docker run -it --rm unbuntu 之后交互界面的信息都不一样了

    在这个里面查看系统都显示是ubuntu的了   cat /etc/os-release

     docker  运行centos

    下载centos后 然后用-it进行centos容器内的交互界面

    -d后台运行

    docker run -d centos  /bin/bash -c  '你要执行的shell脚本'
    
    
    docker run -d centos  /bin/bash -c 'while true;do echo hello docker66666;sleep 1;done'

    然后就会返回给我们一段执行后的启动后的id

    然后我们想要查看这个进程运行的信息

     docker exec -it  要查看的进程id  /bin/bash 
    
    
     docker exec -it  78b  /bin/bash 

    查看容器内的输出

    然后我们退出centos内的进程 到外面查看docker 的日志 因为刚才是在centos容器内  我们的docker 是安装在服务器内的 所以要到服务器的大环境内 而不是某一个docker容器内

    docker  logs  +要查看的进程id
    
    也可以在后面 加上-f 参数 可以一直查看  和tail -f 一样

     查看docker  的进程

    docker ps

    停止docker  进程

    如果我们有docker进程这个时候不想让他跑了就用stop

    docker  stop +要停止的docker进程

    重现再跑起来 要么执行最开始跑的命令 要么就执行start

    docker start  +要启动的进程

    先查看以前跑过的进程再start

    docker 自定义镜像  commit(构建自定义的镜像)

    我们在启动 的docker进程有个id  我们可以根据这个id来打包

    docker  commit + 要打包的进程id  +新起的包名

    外部访问容器

    容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射

    docker run -d -P trainning/webapp python app.py

    参数解析:
      -d 后台运行容器
      -P 随机端口映射
      -p 宿主机端口容器端口(就是可以指定端口小写的p指定端口容器)
      

    也可以通过-p参数指定映射端口

    #指定服务器的9000端口,映射到容器内的5000端口
    [root@oldboy_python ~ 16:46:13]# docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e

    docker运行一个flask web应用,暴露端口供给windows使用

    1、首先我们要先下载系统镜像 centos, 然后启动这个镜像生成容器

    2、然后进入这个镜像内安装python2的软件管理工具 easy_install

    3、安装flask

    4、编写好flask脚本

    5、退出容器产生容器id记录

    6.提交此容器记录,构建镜像

    7.查看镜像

    8.运行flask_web镜像,暴露端口访问

    9.此时在windows浏览器访问 7000端口的 flask应用

        1.docker run -it centos
        2. 安装 easy_install  命令,python2软件包管理
            yum install  python-setuptools 
        3.安装flask 
            easy_install flask
        4.编写好flask  web脚本 
        cd /home # 脚本写在home下
        然后yum install vim -y 安装vim 编辑器
        touch flask_web.py # 建立一个脚本文件编辑脚本
    from flask import Flask app = Flask(__name__)

              @app.route('/')
              def index():
                    return 'Hello This is docker'

            #此脚本当做模块导入时候,__main__里代码不执行
            #当做脚本文件直接运行的时候,执行__main__代码
            if __name__ == '__main__':
               app.run(host='0.0.0.0',port=9000)
               
        5.退出容器,产生容器id记录
            exit 
        6.提交此容器记录,构建镜像(找到你的容器内的id你进入的时候会有显示的)
            docker commit 976  s12/flask_web
        7.查看镜像
            docker images 
        8.运行flask_web镜像,暴露端口访问   启动的时候要指定python解释器
            docker run -d -p 7000:9000  s12/flask-web python /home/flask-web.py
        9.此时在windows浏览器访问 7000端口的 flask应用

    然互docker ps查看是否启动了 

    接着访问指定的7000端口就能看到内容了

    docker hub

     docker hub 顾名思义就是一个类似于我们常用的github存储代码一样这个是存储我们的  生成的容器的

    首先我们打包的镜像 直接推送是不可以的  需要先起个tag名字才能进行推送的

     打包:

    docker  tag 镜像名字   你的dockerhub名字/起的tag名字

    docker tag caicai/flask-web zyltry/caicai  # 给我的caicai/flask-web镜像在zyltry的dockerhub下起个caicai的tag

     然后直接docker images  然后把你起的tag生成的镜像名字推上去

    直接docker  push + 镜像名字

     然后 就可以在你的 docker  hub上看到你提交的信息了

    复制代码

    发布docker image到仓库

    第一种,docker hub公有镜像发布

    复制代码
    1.docker提供了一个类似于github的仓库dockerhub,
    网址https://hub.docker.com/需要注册使用
    2.注册docker id后,在linux中登录dockerhub
    docker login

    注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
    docker tag chaoyu/centos-vim zyltry163/centos-vim
    语法是: docker tag 镜像名 docker hub名字/仓库名

    3.推送docker image到dockerhub docker push 镜像名字:latest 4.在dockerhub中检查镜像 https://hub.docker.com/ 5.删除本地镜像,测试下载pull 镜像文件 docker pull 镜像名

     

    私有仓库

  • 相关阅读:
    微信redirect_uri域名与后台配置不一致,错误代码10003
    windows安装centos7子系统
    c++中的var_dump
    egret3.x升级5.2
    PHP更改自动加载的顺序
    重定向如何携带cookie
    elasticsearch和mysql排序问题
    npm错误:Error: listen EADDRNOTAVAIL
    Spring Boot WebFlux 集成 Mongodb 数据源操作
    泥瓦匠:程序猿为啥要坚持写原创技术博客?
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/10284568.html
Copyright © 2020-2023  润新知