(1)Docker仓库

(2)数据管理

(3)网络配置

(4)Dockerfile命令解释

Docker仓库

    仓库是集中存放镜像的地方。

    仓库又分为公有仓库和私有仓库。

    公有仓库---->Docker官方维护  

    私有仓库:下面演示如何搭建。

下载基础仓库:

[root@zxq ~]   docker pull registry

图片.png

图片.png

启动仓库镜像:

[root@zxq ~] docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

    默认会将仓库创建在registry容器的/tmp/registry 目录下面,-v 参数为指定仓库存放的目录

    数据仓库建立在/tmp/registry目录下,在本地启动私有仓库服务,监听端口为5000

图片.png

上传本地镜像到 registry 仓库中

首先将本地镜像标签修改:

    docekr tag [本地镜像名:image标签] [ip地址:端口号]/[镜像名]:[标签名]  //不改标签名默认为latest
一、vim /etc/docker/daemon.json
    { "insecure-registries":["192.168.1.17:5000"] }
二、systemctl restart docker //重启docker
三、docker run -d -p 5000:5000 registry //启动仓库
四、docker push 192.168.1.17:5000/centos:latest  //上传本地镜像

图片.png

查询本地仓库中的镜像:

[root@zxq ~] curl -X GET http://192.168.1.17:5000/v2/_catalog //{"repositories":["centos"]}

    浏览器:http://192.168.1.17:5000/v2/_catalog
图片.png

                                                                图片.png

从本地仓库下载镜像:

[root@zxq ~] docker pull 192.168.1.17:5000/centos

数据管理

    数据卷为独立的,可以在系统与容器,容器与容器之间共享。

    docker run -v    //-v  参数是在容器内创建一个数据卷,可创建多个数据卷 多个-v参数

建立数据卷:

    docker run -d -P --name web -v /webapp docker.io/centos:latest
    当使用 -P 标记时,Docker 会随机映射本地一个 49000~49900 的端口到内部容器开放的5000端口。
    后台运行docker镜像,将docker镜像中的/webapp目录作为数据卷,如果此目录不存在会自动创建
    --name参数用docker ps -a 能看到起的名字, Exited 表示此镜像已退出
    
    docker run -it-P --name web -v /webapp docker.io/centos:latest
    加了-P参数不会一直保留这个进程,因为端口不是永久的
    
    docker run -it -v /data:/webapp docker.io/centos /bin/bash
    将本机的/data 作为数据卷 共享给容器的/webapp 目录
    
    
加载本地的目录/data作为数据卷,到容器/webapp中
    docker run -d -P --name web3 -v /data:/webapp docker.io/centos:latest
    在目录路径后可以加权限   /data:/webapp:ro
    
挂载本地的文件作为数据卷:
    docker run --rm -it -v ~/.bash_history:/.bash_history docker.io/centos /bin/bash
    创建一个临时容器查看file_name内容,查看完了就退出了。
    在系统中,默认会在家目录中有历史命令记录  .bash_history

数据卷容器:在容器之间共享需要持续更新的文件。使用数据卷容器。(容器里的数据卷)

    数据卷容器其实就是个容器,供其他容器挂载使用。
    可以做到 备份 恢复 数据迁移
    docker run -it -v /data --name dbdata centos   // -v 指定容器卷目录 --name指定容器卷名
    docker run -it --volumes-from dbdata --name db1 centos  //将容器卷挂载到centos上并命名为db1

图片.png   

备份:
docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar cvf /backup/backup.tar /dbdata
其实数据卷容器就是一个共享的目录!!!
首先将数据卷容器dbdata(这个容器就是/dbdata目录),挂载到worker容器中(worker容器上会多出个/dbdata容器),
-v $(pwd):/backup 将物理机的当前目录挂载到,当前容器worker上,tar cvf 将/dbdata中的数据打包到,/backup
目录中,因为物理机当前目录作为数据卷挂载到/backup上所以在物理机当前目录下就会出现backup.tar
恢复:
    docker run -v /dbdata --name dbdata centos /bin/bash
    首先建立一个数据卷容器  名称为dbdata
    docker run --volumes-from dbdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar ( 这后面没有写内容!)
    因为tar xvf /backup/backup.tar 后面没有内容 所以直接就解压到当前/dbdata数据卷容器(因为刚好挂载为当前目录)

网络配置

基础配置:

    docker logs -f [image name]  //通过name查看容器操作日志
    
    映射到所有地址:    
        docker run -d -p 5000:5000 centos  //端口前无地址,默认为全地址。
    映射多个端口到所有地址:
        docker run -d -p 5000:5000 -p 3000:80 centos

图片.png   

    映射指定地址的指定端口:

        docker run -d -p 127.0.0.1:5000:5000 centos
    映射到指定地址的任意端口:
        docker run -d -p 127.0.0.1::5000 centos  //物理主机会随机分配一个端口,映射到容器主机上的5000端口
    映射UDP端口:
        docker run -d -p 127.0.0.1:5000:5000/udp centos  //使用udp标签指定udp端口

图片.png

    查看端口映射配置:

        docker port [image name] 5000

图片.png

查看容器所有变量:

        docker inspect [image name | ID]

容器间的通信:
    删除已经使用过的镜像名,直接docker rm -f [image name | ID] //-f参数强制删除
    执行 docker run 的时候加参数 --rm ,当容器运行结束后容器会自动删除,--rm 与 -d 不能同时使用

   

    docker run -it -d --name db centos  /bin/bash //创建一个名为 db 的容器
    docker rm -f web //删除name为web的容器
    docker run -it -d -P --name web --link db:db centos /bin/bash  //name:alias  前面是容器名,后面为容器别名
    docker ps //显示 web/db 表示db和web容器已经建立连接

图片.png

查看容器环境变量:env

    docker run --rm --name web001 --link db:db centos env

图片.png   

显示以DB_开头的环境变量是供web/db连接使用

    
 
    docker run -t -i --rm --link db:db centos /bin/bash   //docker 会自动添加其他docker容器的解析内容到hosts文件中。

图片.png

[root@zxq ~]# yum install -y inetutils-ping //安装ping工具包

    ping db

图片.png   

    
    
    
    
    
    
Dockerfile命令解释   
Dockerfile:DokcerPool社区提供Docekrfile规范,参考编写。
    
    FROM:
        FROM <image> 或 <image>:<tag>
    第一条指令必须是FROM,来指定基础镜像,如果在一个Dockerfile中创建多个镜像,FROM可以多次使用,但是
每个镜像只能使用一次。
    
    MAINTIANER:
        MAINTIANER <name>  //指定维护者信息
        
    RUN:
        RUN <command> 或者 RUN ["executable","param1","param2"]
        前者是直接在shell终端执行的,后者是在其他终端执行   RUN ["/bin/bash","-c","echo hello"]
        每一条的RUN指令都在当前基础镜像上执行命令,命令长时可以用换行符 \
    
    CMD:
        CMD ["executable","param1","param2"]
        CMD command param1 param2    //在 /bin/sh 中执行
        每个Dockerfile只能有一条CMD命令被运行,如果有多条命令,只有最后一条会被执行。
    
    EXPOSE:
        EXPOSE <port> [<port>]
        EXPOSE 22 80 443
        暴露容器的端口号,一般供互联系统使用。在启动容器时-P参数会随机分配本地端口到指定的容器端口,
        -p 指定本地端口到指定的容器端口   -P不是永久生效 -p永久生效
    
    ENV:
        ENV <key> <value>
        ENV zabbix /usr/local/zabbix/
        ENV PATH $zabbix/bin:$PATH
    
    ADD:
        ADD <src> <dest>
        将src复制到容器的dest,src一般在Dockerfile目录下为一个相对目录,也可以是一个URL,如果是tar文件
        会自动解压为一个目录。
    
    COPY:
        COPY <src> <dest>
        复制本地主机<src>到容器<dest>中,一般为Dockerfile目录下的相对目录,当目标路径不存在时,自动创建。
        
    ENTERYPOINT:
        ENTERYPOINT ["executable","param1","param2"] //在其他终端中执行
        ENTERYPOINT command param1 param2 //在shell中执行
    
    VOLUME:
        VOLUME ["/data"]
        创建一个挂载点,可以在本地挂载,也可以被其他容器挂载。
        
    USER:
        USER daemon
        指定运行容器的用户名或UID,在此命令后的RUN或者其他命令,所执行的指令也是USER指定的用户执行的。
        RUN groupadd -r usergroup && useradd -r -g usergroup user1
        USER user1
        如果需要临时获取root权限,建议使用gosu,不建议使用sudo。
        
    WORKDIR:
        WORKDIR /path/to/workdir
        为后面的RUN CMD ENTRYPOINT 等指令指定工作目录
        WORKDIR /a
        WORKDIR b
        WORKDIR c
        RUN pwd
        最终目录为 /a/b/c
        
    ONBUILD:
        ONBUILD [INSTRUCTION]
        当使用这条命令生成了当前镜像,在下一个Dockerfile中如果使用了有ONBUILD命令生成的镜像时,
        在这个Dockerfile中就会执行上一个基础镜像中的ONBUILD指令(此Dockerfile将上一个镜像作为了基础镜像)