zoukankan      html  css  js  c++  java
  • Docker基础 centos安装docker

    常用工具:
    WinSCP //类型ftp软件 (windows系统用)
    SecureCRT //类型xshell (windows系统用)

    官网地址:
    https://docs.docker.com/
    去官网注册一个自己的账号

    云端docker:
    和官网的用的同一个账号登陆,可以去官网注册一个账号
    https://labs.play-with-docker.com/

    视频地址:
    https://www.bilibili.com/video/BV1jz411q7f4?p=5

    docker命令:

    # 管理docker
    systemctl enable docker //开启启动
    systemctl start docker //启动
    docker --version 或者 docker -v
    systemctl stop docker //停止
    systemctl restart docker //重启
    docker //列表所有docker命令
    docker image -h //查看image命令的帮助
    
    # 搜索镜像
    # 从网络中查找需要的镜像 
    docker search centos #镜像名称
    # 说明
    #NAME : 仓库名称                               
    #DESCRIPTION  : 镜像描述                                    
    #STARS        : 用户评价       
    #OFFICIAL     : 是否为官方       
    #AUTOMATED    : 自动构建,表示该镜像由Docker Hub自动构建流程创建的     
    
    
    # 管理本地image镜像 拉取/查看/历史/删除
    docker pull centos/mysql-57-centos7
    docker pull 镜像名称 //例:docker pull centos:7
    docker image ls //列出本地的镜像
    docker images //列出本地的镜像
    docker history 97b46f5bffb8 //看一下镜像的详情 97b46f5bffb8是IMAGE ID值 
    docker rmi image镜像名字/IMAGE ID //删除本地image镜像 (注意有运行中的容器是不能删除的)
    docker rmi `docker images -q` //删除所有镜像
    
    # 容器的管理
    OPTIONS(常用选项)
    -i, --interactive 表示运行容器
    -t, --tty 表示容器启动后会进入其命令行.加入这两个参数后,容器创建就能登录进去.即分配一个伪终端
    --name 为创建的容器命名
    -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录).可以使用多个-v做多个目录或者 文件映射.注意:最好做目录映射.在宿主机上做修改.然后共享到容器上.
    -d, --detach 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登陆容器,如果加-i -t两个参数,创建后就会自动进去容器).
    -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口.可以使用多个-p做多个端口映射
    -a, --attach list
    
    # 下载并运行镜像
    (1) 下载镜像
    docker pull ubuntu:14.04 //从官方下载ubuntu:14.04镜像,但不运行
    (2) 运行
    docker run hello-world //运行hello-world镜像(如果本地仓库里没有,会从官方下载安装后再运行)
    docker run centos  //下载并运行实例centos
    (3) 交互式方式创建容器
    docker run -it centos //交互式运行centos镜像
    docker run -itd centos  //后台运行实例centos
    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    docker run -it --name=mycentos centos:7 /bin/bash
    
    //后台运行实例 不进入容器 busybox是比centos小的linux 一直跑命令
    docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done" 
    
    # 管理本地container 查看/删除/停止/重启/启动历史中已经停止的容器(container)
    # 管理已经运行的container
    
    # 查看container
    docker container ls //查看正在运行的实例
    docker container ls -a //查看所有实例,包括已经关闭的实例
    docker container ls -aq //列出所有的记录id
    docker ps //查看正在运行的实例
    docker ps -l //查看最后一次运行的容器
    docker ps -a //查看所有实例,包括已经关闭的实例
    docker ps -aq //列出所有的记录id
    docker ps -f status=exited //查看停止的容器
    docker container ls -f "status=exited" -q //列表出所有已经退出的历史实例id
    
    # 进入容器container
    docker exec --help //这种方式针对于运行为守护进程daemon模式的容器,进入后exit退出容器进程不会终止。
    docker exec -it 0923d012374b /bin/bash // 进入后台运行的container
    docker exec -it 0923d012374b /bin/sh // 进入后台运行的container
    exit //退出运行中的centos实例 如果是exec进入container中的,不会结束进程
    
    # 删除container
    docker rm 441bf7168dee //删除指定的`CONTAINER ID`的历史记录(注意运行中的容器是不能删除的)
    docker rm $(docker container ls -aq)  //删除所有的记录
    docker rm $(docker ps -aq) //删除所有的记录
    docker rm $(docker container ls -f "status=exited -q") //删除已经退出的实例历史
    
    # container 停止/重启/启动历史中已经停止的容器(container)
    docker start 容器id //启动容器记录里已经停止的容器
    docker stop 0923d012374b //结束后台运行中的container 用容器的名字也可以
    docker stop $(docker container ls -aq) //结束后台运行中的所有container
    docker restart container-id # 重启某个容器
    
    # 批量操作容器
    
    docker 启动所有的容器
    docker start $(docker ps -aq)
    docker start $(docker container ls -aq)
    docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    docker 关闭所有的容器
    docker stop $(docker ps -aq)
    docker stop $(docker container ls -aq)
    docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    docker 删除所有的容器
    docker rm $(docker ps -aq)
    docker rm $(docker container ls -aq)
    docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    docker 删除所有的镜像
    docker rm $(docker images -qa)
    docker rmi $(docker images | awk '{print $3}' |tail -n +2)
    
    # 基于运行过的容器,再创建一个image镜像
    docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
    
    # 登陆dockerHub账号
    
    docker login
    
    # 上传本地镜像到线上仓库里
    
    docker image push wanghaima/hellogo //前缀一定是自己的dockerHub用户名字
    
    # 上传成功后就可以把本地的镜像删除了
    # 下载线上仓库镜像到本地仓库里
    
    docker image pull wanghaima/hellogo
    
    # 文件的拷贝
    docker cp #停止或者运行中的容器都可以用cp互传文件
    ## 从宿主机复制文件到容器里
    docker cp 宿主机的文件或者目录 容器:宿主机的文件或者目录
    docker cp a.txt mycentos:/usr/local
    ## 从容器里复制文件到宿主机
    docker cp 容器:宿主机的文件或者目录 宿主机的文件或者目录 
    docker cp mycentos:/usr/local/a.txt a.txt2
    
    # 目录挂载
    创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而云影响容器.
    创建容器 添加-v参数 后边为 宿主机目录:容器目录 例如:
    docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
    docker run -id -v /www/wwwroot:/www/wwwroot --name=mycentos7 centos:7
    
    #查看容器IP地址
    在没有进入容器时输入命令
    //使用docker inspect命令获取容器/镜像的元数据。
    docker inspect 容器id 
    //获取指定容器的ip
    docker inspect --format '{{ .NetworkSettings.IPAddress }}' 68f0d84be6ad
    //获取所有容器ip
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
    
    如果你共享的是多极目录,可能会出现权限不足的提示.
    这是因为centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true来解决的挂载的目录没有权限的问题
    
    vim Dockerfile //制作镜像,必需是这个文件名字,不能更改,里面的关键字尽量大写字母
    docker build -t 自己的dochub的用户名字/要生成镜像的名字 .  //点是根据当前目录里的Dockerfile去创建一个目录镜像
    docker build -t wanghaima/hellogo .
    docker run wanghaima/hellogo //docker运行刚制作的go镜像程序
    
    ip netns list //查看本机namespace的ip
    ip netns add test1 //增加namespace的ip
    ip netns delete test1 //删除namespace的ip
    

    底层技术支持

    • Namespace:做网络隔离
    • Control goups:做资源限制,例如设置占用多少内存,CPU
    • Union file systems:image和container分层

    安装go环境

    1.上传go的安装包(go1.13.linux-amd64.tar.gz,自己从官网下载)到服务器的/usr/local目录里
    2.解压到/usr/local/go
    tar -zxvf go1.13.linux-amd64.tar.gz

    3.设置go的环境变量

    vim /etc/profile

    export PATH=$PATH:/usr/local/go/bin
    export GOROOT=/usr/local/go
    export GOPATH=/home/work/go
    

    //保存并退出
    wq!

    刷新配置,使环境变量生效
    . /etc/profile

    4.新建/home/work/go文件夹作为工作目录
    /home/work/go文件夹里建三个目录

    pkg
    src
    bin
    

    /home/work/go/src/test目录里写一个go文件编译运行一下

    package main
    
    import "fmt"
    
    func main(){
       fmt.Println("hello go !")
    }
    
    
    go build main.go
    ./main
    

    打印结果:

    hello go !
    

    制作baseImage

    • baseIamge:基于系统的基础镜像

    如果想要用docker运行,方法:

    • a.从官网镜像里去拉取image镜像.
    • b.自己制作镜像.
    • c.基于image创建container之后,如在container做了一些变化后,例如安装了某个软件,可以将这些改变commit成一个新的image,也可以简写为docker commit

    一.自己制作镜像:

    1.新建一个Dockerfile

    /home/work/go/src/test目录里新建一个Dockerfile

    vim Dockerfile //必需是这个文件名字,不能更改,里面的关键字尽量大写字母

    写入

    #从头开始
    FROM scratch
    #把编译好的hellogo二进制文件加到当前根目录
    ADD hellogo /
    #运行同目录里编译好的hellogo二进制文件
    CMD ["/hellogo"]
    

    2.构建docker image
    编辑镜像并上传到自己的dockerhub仓库里
    命令格式:
    docker build -t 自己的dochub的用户名字/要生成镜像的名字 . //点是根据当前目录里的Dockerfile去创建一个目录镜像

    docker build -t wanghaima/hellgo .

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker build -t wanghaima/hellogo .
    Sending build context to Docker daemon  2.001MB
    Step 1/3 : FROM scratch
     ---> 
    Step 2/3 : ADD hellogo /
     ---> Using cache
     ---> 4393a483c25b
    Step 3/3 : CMD ["/hellogo"]
     ---> Using cache
     ---> 97b46f5bffb8
    Successfully built 97b46f5bffb8
    Successfully tagged wanghaima/hellogo:latest
    
    

    docker image ls //看一下镜像列表里在有没有刚新建的hellogo镜像

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    wanghaima/hellogo   latest              97b46f5bffb8        7 minutes ago       2MB
    hello-world         latest              fce289e99eb9        13 months ago       1.84kB
    

    docker history 97b46f5bffb8 //看一下镜像的详情 97b46f5bffb8是IMAGE ID值

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker history 97b46f5bffb8
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    97b46f5bffb8        11 minutes ago      /bin/sh -c #(nop)  CMD ["/hellogo"]             0B                  
    4393a483c25b        11 minutes ago      /bin/sh -c #(nop) ADD file:4da8154008532799e…   2MB 
    

    3.docker运行刚制作的go镜像程序
    docker run wanghaima/hellogo

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker run wanghaima/hellogo
    hello go !     
    [root@iZ2ze505h9bgsbp83ct28pZ test]# pwd
    /home/work/go/src/test
    [root@iZ2ze505h9bgsbp83ct28pZ test]# ls
    Dockerfile  hellogo  hellogo.go
    

    至此已经完成一个go的镜像制作了.并可以用docker命令跑起这个镜像了.

    container

    container是一个运行的实例

    docker container ls //查看正在运行的实例
    docker container ls -a //查看所有实例,包括已经关闭的实例
    

    下载并交互式运行实例centos
    docker run centos

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker run -it centos
    [root@383d32aab2fc /]# ls
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    
    

    另开一个窗口连接上服务器
    可以看到正在运行的centos实例

    [root@iZ2ze505h9bgsbp83ct28pZ ~]# docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    383d32aab2fc        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            zen_almeida
    

    退出(释放)在运行的实例:

    [root@383d32aab2fc /]# exit
    exit
    

    删除指定的CONTAINER IDwanghaima/test 历史记录

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
    383d32aab2fc        centos              "/bin/bash"         11 minutes ago      Exited (0) 3 minutes ago                           zen_almeida
    66c4da129e62        centos              "/bin/bash"         15 minutes ago      Exited (0) 15 minutes ago                          loving_neumann
    a563fab0f2e7        wanghaima/hellogo   "/hellogo"          About an hour ago   Exited (0) About an hour ago                       eloquent_ptolemy
    441bf7168dee        wanghaima/test      "/hellogo"          About an hour ago   Exited (0) About an hour ago                       gifted_swanson
    ea2df88fd144        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             nervous_golick
    c019b34a33d8        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             cocky_kowalevski
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container rm 441bf7168dee
    441bf7168dee
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
    383d32aab2fc        centos              "/bin/bash"         12 minutes ago      Exited (0) 4 minutes ago                           zen_almeida
    66c4da129e62        centos              "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                          loving_neumann
    a563fab0f2e7        wanghaima/hellogo   "/hellogo"          About an hour ago   Exited (0) About an hour ago                       eloquent_ptolemy
    ea2df88fd144        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             nervous_golick
    c019b34a33d8        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             cocky_kowalevski
    [root@iZ2ze505h9bgsbp83ct28pZ test]# 
    

    删除所有的contailner实例列表

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -aq //列出所有的记录id
    383d32aab2fc
    66c4da129e62
    a563fab0f2e7
    ea2df88fd144
    c019b34a33d8
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -aq)  //删除所有的记录
    383d32aab2fc
    66c4da129e62
    a563fab0f2e7
    ea2df88fd144
    c019b34a33d8
    

    删除已经退出的实例历史
    docker rm $(docker container ls -f "status=exited" -q)

    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a  //列表出所有的历史实现例
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
    9dfe4446e89f        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       hardcore_austin
    4346ebd939f0        hello-world         "/hello"            2 minutes ago        Exited (0) 2 minutes ago                            reverent_tereshkova
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -f "status=exited" -q //列表出所有已经退出的历史实例id
    9dfe4446e89f
    4346ebd939f0
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -f "status=exited -q")
    Error response from daemon: Invalid filter 'status=exited -q'
    "docker rm" requires at least 1 argument.
    See 'docker rm --help'.
    
    Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    Remove one or more containers
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -f "status=exited" -q)
    9dfe4446e89f
    4346ebd939f0
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    f02f744e125b        centos              "-it centos"        5 minutes ago       Created                                 jovial_feynman
    [root@iZ2ze505h9bgsbp83ct28pZ test]#
    

    二.基于改变后的image再创建一个新的image:

    docker container ls -a //看一下运行过的镜像历史
    docker run -it centos //进入镜像
    yum -y install lrzsz //安装上传下载软件
    exit //退出
    docker container ls -a //看一下运行过的镜像历史
    docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
    docker image ls //看一下新的镜像已经创建出来
    
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    wanghaima/hellogo   latest              97b46f5bffb8        5 hours ago         2MB
    wanghaima/test      latest              97b46f5bffb8        5 hours ago         2MB
    centos              latest              470671670cac        12 days ago         237MB
    hello-world         latest              fce289e99eb9        13 months ago       1.84kB
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker run -it centos  //进入镜像
    [root@e64b767680a7 /]# yum -y install lrzsz
    Installed:
      lrzsz-0.12.20-43.el8.x86_64                                                                            
    
    Complete!
    [root@e64b767680a7 /]# exit
    exit
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a //看一下运行过的镜像历史
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
    e64b767680a7        centos              "/bin/bash"         9 minutes ago       Exited (0) 54 seconds ago                         sleepy_ride
    e47a5aed7f3c        centos              "/bin/bash"         10 minutes ago      Exited (0) 10 minutes ago                         confident_goldberg
    d05f46e55c69        centos              "/bin/bash"         26 minutes ago      Exited (0) 24 minutes ago                         adoring_hamilton
    8c39d290b5aa        centos              "/bin/bash"         43 minutes ago      Exited (0) 43 minutes ago                         boring_pasteur
    f5213541cf7f        centos              "/bin/bash"         45 minutes ago      Exited (137) 34 minutes ago                       epic_hermann
    f02f744e125b        centos              "-it centos"        4 hours ago         Created                                           jovial_feynman
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
    sha256:30924d365cb9b8da2658efb1c1cac536125e3cbfd3a379176dd91d4487a0611e
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls //看一下新的镜像已经创建出来
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    wanghaima/centos-hbb   latest              30924d365cb9        52 seconds ago      271MB
    wanghaima/hellogo      latest              97b46f5bffb8        6 hours ago         2MB
    wanghaima/test         latest              97b46f5bffb8        6 hours ago         2MB
    centos                 latest              470671670cac        12 days ago         237MB
    hello-world            latest              fce289e99eb9        13 months ago       1.84kB
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker history centos //看一下两个镜像有什么不一样
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    470671670cac        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
    <missing>           12 days ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
    <missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:aa54047c80ba30064…   237MB               
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker history wanghaima/centos-hbb //看一下两个镜像有什么不一样
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    30924d365cb9        16 minutes ago      /bin/bash                                       33.9MB              
    470671670cac        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
    <missing>           12 days ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
    <missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:aa54047c80ba30064…   237MB 
    

    Dockerfile详解

    • FROM: 文件的开始

      FROM scratch    #从头开始制作一个最简的

      FROM centos    #使用centos为系统,若没有则位取

      FROM centos:7.0 #指点系统+版本号

    • LABEL:相当于注释或者说明信息(LABEL 后面的随便写)

      LABEL version="1.0"

      LABEL author="haima"

    • RUN:执行命令,每执行一条RUN,就多一层

      RUN yum -y update && yum -y install lrzsz

      ​ net-tools

    • WORKDIR:进入或者创建目录

      WORKDIR /root  #进入/root目录

      WORKDIR /test  #自动创建目录

      WORKDIR demo #自动创建目录

      RUN pwd    #/test/demo

    • ADD and COPY :将本地文件,添加到镜像里

      ADD可以解压缩文件 COPY不能解压

      ADD hello/

      ADD xxx.tar.gz #添加并解压到根目录

      WORKDIR /root/test #进入/root/test目录,如果没有就创建COPY hello . #最终在/root/test/hello目录

    • ENV

      ENV MYSQL_VERSION 5.6 #设置常量

      RUN apt-get -y install mysql-server="${MYSQL_VERSION}"

    • CMD and ENTRYPOINT

      • shell格式

        RUN apt-get -y install lrzsz

        CMD echo "hello docker"

        ENTRYPOINT echo "hello docker" #和上面一行一样,都 是执行一条cmd命令

        #shell格式
        FROM centos
        ENV name Docker
        ENTRYPOINT echo "hello $name"
        

        制作镜像 vim Dockerfile

        docker build -t centos-entry-shell .
        
        docker image ls
        
        docker run centos-entry-shell 
        
        
      • exec格式

        RUN ["apt-get","-y","install","lrzsz"]

        #exec格式
        FROM centos
        ENV name Docker
        #ENTRYPOINT ["/bin/echo","hello $name"] #不会替换常量
        ENTRYPOINT ["/bin/bash","-c","echo hello $name"] #不会替换常量
        

        制作镜像 vim Dockerfile

        docker build -t centos-entry-exec .
        
        docker image ls
        
        docker run centos-entry-exec
        
        

    CMD and ENTRYPOINT的区别

    • 若docker指定了其他命令,CMD会被忽略
    • 若定义了多个CMD,只会执行最后一个


    分享docker image

    不建议分享image,自己的电脑可能会有病毒等等问题

    1. 注册账号

     在https://hub.docker.com 网站上注册一个账号,dockerHub也是用同一个账户

    image名字一定要以自己的docker hub的用户名开头

    1. 登陆
    [root@iZ2ze505h9bgsbp83ct28pZ test]# docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: wanghaima
    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
    
    
    1. 上传本地镜像到线上仓库里

    docker image push wanghaima/hellogo //前缀一定是自己的dockerHub用户名字

    上传成功后就可以把本地的镜像删除了

    1. 下载线上仓库镜像到本地仓库里

    docker image pull wanghaima/hellogo

    分享Dockerfile

    建议分享Dockerfile,用户可以自己编译,更加安全

    创建线上仓库

    docker仓库要和自己的github仓库关联上.

    在本地搭建docker registry私有仓库

    github是公有的,也可以创建自己的私有仓库

    1.在官网搜索registry

    打开第一个镜像
    https://hub.docker.com/_/registry

    2.下载仓库的image镜像

    [root@iZ2ze505h9bgsbp83ct28pZ docker]# docker run -d -p 5000:5000 --restart always --name registry registry:2 //下载仓库的image镜像
    Unable to find image 'registry:2' locally
    2: Pulling from library/registry
    486039affc0a: Pull complete 
    ba51a3b098e6: Pull complete 
    8bb4c43d6c8e: Pull complete 
    6f5f453e5f2d: Pull complete 
    42bc10b72f42: Pull complete 
    Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
    Status: Downloaded newer image for registry:2
    81e2c3f5a1674c3e3a6da85027a0087644643fd228da2601a6761d6fc2230eb6
    [root@iZ2ze505h9bgsbp83ct28pZ docker]# docker image ls //看下载的registry镜像
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    wanghaima/centos-hbb   latest              30924d365cb9        13 hours ago        271MB
    wanghaima/hellogo      latest              97b46f5bffb8        19 hours ago        2MB
    wanghaima/test         latest              97b46f5bffb8        19 hours ago        2MB
    registry               2                   708bc6af7e5e        6 days ago          25.8MB
    centos                 latest              470671670cac        12 days ago         237MB
    hello-world            latest              fce289e99eb9        13 months ago       1.84kB
    [root@iZ2ze505h9bgsbp83ct28pZ docker]# docker ps //查看运行的进程 registry已经跑起来了
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    81e2c3f5a167        registry:2          "/entrypoint.sh /etc…"   37 minutes ago      Up 17 minutes       0.0.0.0:5000->5000/tcp   registry
    
    
    

    3.另一台服务器(下面简称B)就可以talnet连接这台安装了registry仓库的docker服务器(下面简单A ip:192.168.16.185)了

    telnet 192.168.16.185 5000 //连接
    quit 退出
    

    4.B服务器编译一个image //要以A服务器的ip地址为前綴

    docker build -t 192.168.16.185:5000/centos .
    

    5.B服务器deamon.json里添加信任A服务器ip地址

    vim /etc/docker/deamon.json
    加入`"insecure-registries":["192.168.16.185:5000"],`

    {
    "registry-mirrors": [
    "https://kfwkfulq.mirror.aliyuncs.com",
    "https://2lqq34jg.mirror.aliyuncs.com",
    "https://pee6w651.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com"
    ],
    "insecure-registries":["192.168.16.185:5000"],
    "dns": ["8.8.8.8","8.8.4.4"]
    }
    

    6.B服务器push镜像到A服务器里
    docker push 192.168.16.185:5000/centos

    此时已经push成功了

    7.在浏览器里可以查一下

    `192.168.16.185:5000/v2/_catalog`

    8.B服务器里删除本地的刚push的镜像,再从A服务器里pull下来试试

    docker rmi 192.168.16.185:5000/centos //删除本地image镜像
    docker image ls //查看镜像是否被删除
    docker pull 192.168.16.185:5000/centos //拉取A服务器上的镜像
    docker image ls //查看镜像是下载回来
    

    docker的网络

    1.网络分类
    - 单机
    -Bridge Network //同一个内网里的机子可以相互访问
    -Host Network //容器之间可以相互访问
    -None Network //单机网络
    - 多机
    -Overlay Network //集群网络

    2.linux的网络命名空间
    命名空间是docker底层重要的概念

    
    [root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns add test1
    [root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns list
    test1
    [root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns delete test1
    [root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns list
    

    ip netns add test1
    ip netns delete test1
    ip netns list
    ip netns exec test1 ip a
    ip netns exec test1 ip link set dev lo up
    ip netns exec test1 ip a
    ip netns add test2
    ip netns list
    ip link add veth-test1 type veth peer veth-test2 //指定veth对
    ip link //看本机的所有的网卡
    
    ip link set veth-test1 netns test1 //把veth对加入test1的namespace空间里
    ip netns exec test1 ip link //看test1的namespace空间里ip的状态
    ip link set veth0 netns test2 //把veth0对加入test2的namespace空间里
    ip netns exec test2 ip link //看test2的namespace空间里ip的状态
    
    

    端口映射

    docker run --name web2 -d -p 80:80 nginx  //端口映射 容器里的商品映射给本机
    
  • 相关阅读:
    一、模板的渲染
    十六、ajax上传图片 mvc
    十五、API请求接口-远程服务器返回错误: (400) 错误的请求错误
    九、操作(在结果中搜索+查询该表,单独几个字段查询,通过子查询方式查询)
    一、Vue分页实现
    【2019-10-29】除非你变成你自己
    【2019-10-28】美好在于细节心态
    【2019-10-27】理智是罗盘,感情是大风
    【2019-10-26】日积月累的小惠生者
    【2019-10-25】从错误和失败中获得经验
  • 原文地址:https://www.cnblogs.com/haima/p/12242073.html
Copyright © 2011-2022 走看看