zoukankan      html  css  js  c++  java
  • CentOS 7 安装 docker 并搭建私有仓库

    转载过来,慢慢消化

    CentOS 7 x64 docker 使用
    
    CentOS 7 安装 docker
    
    yum search docker  查看是否 有docker包
    yum info docker  版本为1.3.2
    yum -y install docker 安装docker
    
    docker --version
    Docker version 1.3.2, build 39fa2fa/1.3.2
    
    关闭 firewalld  与 Selinux
    
    service docker start 启动
    
    systemctl enable docker 设置开机启动
    
    
    打开 Linux 内核 转发 添加:
    
    vi /etc/sysctl.conf
    
    net.ipv4.ip_forward = 1 
    
    保存 运行 sysctl -p 生效
    
    
    修改docker 环境变量 docker 容器存储路径 ( 默认路径为 /var/lib/docker
    
    docker info    查看环境变量
    
    vi /etc/sysconfig/docker
    
    将
    OPTIONS=--selinux-enabled -H fd://
    
    修改为如下
    
    OPTIONS=--selinux-enabled --graph=/opt/docker/images -H fd://
    
    重启docker    
    
    systemctl restart docker.service
    
    docker info  查看是否已经变更
    
    
    获取CentOS 镜像
    
    docker pull centos:latest    下载最新版本的镜像
    或者
    docker pull centos:centos6   下载centos6镜像等
    
    
    查看安装镜像的情况
    
    docker images
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    centos              7                   8efe422e6104        2 weeks ago         224 MB
    centos              centos7             8efe422e6104        2 weeks ago         224 MB
    centos              latest              8efe422e6104        2 weeks ago         224 MB
    
    
    在docker下运行 shell bash
    
    docker run -i -t <IMAGE ID>  /bin/bash      //<IMAGE ID> 通过docker images命令获取,这里为510cf09a7986
    
    docker run -i -t 8efe422e6104 /bin/bash   
    
    docker run -i -t <IMAGE ID>  /bin/bash    //此方式运行的容器,退出后容器就会自动关闭, 此方式是创建一个新的容器.
    
    docker run -i -t -v /opt/software:/opt/software <IMAGE ID> /bin/bash    //-v 为挂载本地目录, 第一个/opt/software 为本地目录 : 后面为容器目录,目录不存在会自动创建
    
    
    执行以后切换到 
    
    [root@8efe422e6104 /]#
    
    在容器下安装 ssh  passwd  
    
    yum -y install tar unzip openssh-server passwd lrzsz bzip2 
    
    安装完毕以后 修改root 密码
    
    passwd  
    
    
    修改 时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    修改字符编码  echo 'LANG="en_US.UTF-8"' >> /etc/locale.conf
    -------------------------------------------------------------------------------
    centos 7 启动sshd 提示如下:
    
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    
    
    创建key
    
    ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
    
    ssh-keygen -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key
    
    -------------------------------------------------------------------------------
    
    
    然后再 安 装jdk 和 tomcat !!  
    
    
    安装过程与物理机安装过程相同 安装完毕以后
    
    
    返回 物理机  
    
    
    docker ps -a  可查看运行的docker shell 
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS               
    c6291c68a800        centos:7            "/bin/bash"         3 hours ago         Exited (0) 3 minutes ago        
    
    
    
    docker commit <CONTAINER ID> <name>      //修改镜像IMAGE名称
    
    
    docker commit c6291c68a800 tomcat     //将此镜像的名称保存为 tomcat
    
    
    docker images
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    tomcat-1            latest              983e0f7ea1fd        37 minutes ago      779.8 MB
    
    docker ps -a
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  
    ed1efc2c7d01        tomcat:latest     "/bin/bash"         9 minutes ago       Exited (0) 3 minutes ago     
    
    
    docker start <CONTAINER ID>         //<CONTAINER ID> 通过docker ps -a命令获取 启动此容器
    
    docker attach <CONTAINER ID>        //返回到此容器中
    
    docker start -i <CONTAINER ID>      // 启动此容器后连接到此容器中
    
    
    启动容器的SSH 并映射端口
    
    docker run -d -p 50001:22 <IMAGE ID> /usr/sbin/sshd -D    //<IMAGE ID> 为docker images 获取 需要获取tomcat的IMAGE ID
    
    ssh -p 50001 127.0.0.1    进入容器
    
    启动tomcat    查看容器ip
    
    返回物理机
    
    curl -I 容器ip:8080  查看是否正常 
    
    
    -------------------------------------------------------------------------------------------------------
    其他运行命令
    
    查看 docker 运行日志
    
    docker logs -f <CONTAINER ID>        
    
    删除某个容器
    docker rm  <CONTAINER ID>                //<CONTAINER ID> 通过docker ps -a命令获取
    
    
    删除所有容器
    docker rm `docker ps -a -q`
    
    停止所有容器
    docker stop `docker ps -a -q`
    
    
    删除某个镜像
    docker rmi <IMAGE ID >                  //<IMAGE ID> 通过docker images命令获取
    
    导出某个镜像
    docker save <IMAGE ID> > /tmp/myimage.tar
    
    导入某个镜像
    docker load < /tmp/myimage.tar
    -------------------------------------------------------------------------------------------------------------------------------
    
    
    
    
    -------------------------------------------------------------------------------------------------------------------------------------
    docker 设置独立IP 并映射端口          ( 必须开启 Linux 内核转发 net.ipv4.ip_forward )
    
    物理机 单网卡 绑定多IP ..  如 em1   绑定 em1:1     
    
    (CentOS 7  绑定网卡  必须有 DEVICE=em1:1  这种名称)
        
    
    em1  ip 为 172.24.0.11       绑定em1:1  IP 为 172.24.0.100     em1:2  IP 为 172.24.0.101  以SSH 端口 为例操作如下
    
    物理机 不能与容器端口冲突, 容器与容器之间可以。  
    
    修改 172.24.0.11 的SSH 端口为 999    映射 IP 172.24.0.100  与  172.24.0.101 端口
    
    docker run -h="web1" --name web1 -d -p 172.24.0.100:22:22 <images ID> /etc/rc.local
    
    docker run -h="web2" --name web2 -d -p 172.24.0.101:22:22 <images ID> /etc/rc.local
    
    
    -------------------------------------------------------------------------------------------------------------------------------------
    
    
    
    
    docker 自建私有仓库
    
    首先创建存储 镜像的目录 
    
    mkdir -p /opt/registry
    
    默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下.
    
    
    执行
    docker pull registry                 #安装docker私有仓库
    
    启动 registry
    docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/registry:/tmp/registry -p 5000:5000 registry
    
    --------------------------------------------------------------------------
     可用 http://ip:5000    来访问 
    ---------------------------------------------------
     提示如下 表示启动完成
    ""docker-registry server""
    ----------------------------------------------------
    
    在客户机上面:
    #docker images
    dev                    latest              a7efdd5c0690        5 days ago          989.2 MB
    
    
    #docker tag a7efdd5c0690 172.24.0.14:5000/dev  
    
    #docker images
    dev                    latest              a7efdd5c0690        5 days ago          989.2 MB
    172.24.0.14:5000/dev   latest              a7efdd5c0690        5 days ago          989.2 MB
    
    
    
    
    
    
    #docker push 172.24.0.14:5000/dev
    -------------------------------------------------------------------------------------------------------------------------------------------------
    提示如下:
    2015/03/16 15:34:35 Error: Invalid registry endpoint https://172.24.0.12:5000/v1/: Get https://172.24.0.12:5000/v1/_ping: dial tcp 172.24.0.12:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 172.24.0.12:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.24.0.12:5000/ca.crt
    -------------------------------------------------------------------------------------------------------------------------------------------------
    
    解决办法 禁用https 验证
    vi /etc/sysconfig/docker
    
    在 OPTIONS=--selinux-enabled 后面添加  --insecure-registry 172.24.0.14:5000  
    
    然后重启 docker !! 
    
    
    在次运行
    #docker push 172.24.0.14:5000/dev
    
    
    提示如下 为成功
    ----------------------------------------------------------------------------------------------------------------------
    The push refers to a repository [172.24.0.14:5000/dev] (len: 1)
    Sending image list
    Pushing repository 172.24.0.14:5000/dev (1 tags)
    511136ea3c5a: Image successfully pushed 
    5b12ef8fd570: Image successfully pushed 
    88f9454e60dd: Image successfully pushed 
    a7efdd5c0690: Image successfully pushed 
    Pushing tag for rev [a7efdd5c0690] on {http://172.24.0.14:5000/v1/repositories/dev/tags/latest}
    -------------------------------------------------------------------------------------------------------------------------
    
    
    
    私有仓库查询方法
    curl http://172.24.0.14:5000/v1/search
    
    如下所示  有 dev 表示 上传成功
    --------------------------------------------------------------------------------------------------------------------------
    {"num_results": 1, "query": "", "results": [{"description": "", "name": "library/dev"}]}
    --------------------------------------------------------------------------------------------------------------------------
    
    
    在其他客户机上访问和下载私有仓库的镜像
    docker pull 172.24.0.14:5000/dev
    
    
    ----------------------------------------------------------------------------------------------------------------------------
    docker pull 172.24.0.14:5000/dev
    Pulling repository 172.24.0.14:5000/dev
    88f9454e60dd: Download complete 
    511136ea3c5a: Download complete 
    5b12ef8fd570: Download complete 
    Status: Image is up to date for 172.24.0.14:5000/dev:latest
    ----------------------------------------------------------------------------------------------------------------------------
    
    
    
    docker 使用 crontab 服务
    
    
    yum 安装 crontab
    
    yum -y install cronie
    
    启动服务
    
    /usr/sbin/crond
    
    
    crontab -e   添加服务
    
    
    
    
    
    
    
    
    
    docker 下使用 logrotate 服务 切割日志
    
    安装 logrotate 服务
    
    yum -y install logrotate
    
    创建 切割规则 
    
    
    cd /etc/logrotate.d
    
    
    vi  nginx
    
    ------------------------------------------------------------------
    
    /opt/local/nginx/logs/*.log
    {
    daily                 #每天轮询一次
    create 644 upload upload
    dateext               #使用日期作为轮转后的日志文件的后缀
    delaycompress         #推迟压缩
    rotate 7              #一次将存储7个归档日志。对于第8个归档,时间最久的归档将被删除。
    sharedscripts         #只为整个日志组运行一次的脚本
    postrotate            #引入在轮换过日志之后要运行的脚本
        if [ -f /opt/local/nginx/nginx.pid ]; then
            kill -USR1 `cat /opt/local/nginx/nginx.pid`
        fi
    endscript
    }
    
    -------------------------------------------------------------------
    
    
    ps:  docker 下不默认没有crond 必须启动crond 才能自动轮询
    
    
    yum -y install cronie
    
    启动服务
    
    /usr/sbin/crond
    
    
    
    logrotate 的启动脚本为
    
    /etc/cron.daily/logrotate
    
  • 相关阅读:
    二叉树计算叶子节点的计算问题
    操作系统中有关读者写者问题
    Java中关于CountDownLatch的使用
    Java中关于CyclicBarrier的使用
    将毫秒 换算成(天 时 分 秒 毫秒)
    数据库訪问技术之JDBC
    窥探开发人员与用户
    Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类
    高速排序,归并排序,堆排序python实现
    svn 批量加入没有加入版本号控制的文件命令
  • 原文地址:https://www.cnblogs.com/wtf0215-golang/p/5409184.html
Copyright © 2011-2022 走看看