zoukankan      html  css  js  c++  java
  • docker仓库和dockerfile

     通过Dockerfile创建镜像

    Dockerfile

      •  Dockerfile语法格式

        –  FROM:基础镜像   

        –  MAINTAINER:镜像创建者信息

        –  COPY:复制文件到镜像(所有文件复制场合)

        –  ENTRYPOINT:容器启动时执行的命令(CMD的内容将会作为参数传递给NENTRYPOINT)

        –  VOLUME:卷

        –  USER:指定当前用户(要事先创建目录)

        –  EXPOSE:开放的端口

        –  ENV:设置变量

        –  HEALTHCHECK:健康性检查

        –  ADD:复制文件到镜像(仅在需要自动解压缩的场合使用)

        –  RUN:制作镜像时执行的命令,可以有多个

        –  WORKDIR:定义容器默认工作目录(要事先创建目录)

        –  CMD:容器启动时执行的命令,仅可以有一条CMD

     

    看容器内端口起没起:# docker top ed39b0c55906

    ctrl+z  bg  后台运行并查看

     

    排错:如果在启动容器的时候,提示iptables的相关问题,无法启动容器,可以执行以下操作:

    (1)查看iptables是否正常

    [root@room8pc30 ~]# iptables -t nat -nL  # 如果只看到有限的4个CHAIN,里面又没有规则,说明iptables有误

    (2)关闭docker

    [root@room8pc30 ~]# systemctl stop docker.service

    (3)清空nat表

    [root@room8pc30 ~]# iptables -t nat -F

    (4)删除docker0网络

    [root@room8pc30 ~]# ifconfig docker0 down

    [root@room8pc30 ~]# brctl delbr docker0

    (5)启动docker

    [root@room8pc30 ~]# systemctl start docker.service

    (6)查看iptables,如果发现多出了很多规则,意味着已经恢复默认配置

    [root@room8pc30 ~]# iptables -t nat -nL

     

    镜像优化:

    1、每个容器只运行一个进程

    2、不要假定容器能够久远保持启动状态

    3、使用.dockerignore文件将不需要的文件进行排除。

    4、不要完全自己制作镜像,应该使用官方提供的镜像

    5、尽量减少镜像的层数。如不要运行多个RUN,而是将多个命令放到一个RUN中执行

     

    运行最小的镜像

    # docker run busybox echo Hello World

     

    通过centos 基础境像制作一个新的镜像
    配置yum
    安装ifconfig
    安装openssh-server httpd
    设置sshd和httpd在运行容器时默认开启
    通过root(密码123456)和ssh服务 可以远程连接容器
    可以远程访问web
    多台web共享数据 局域网内共享
    物理机:
    #mkdir /chroot
    #yum -y install nfs-utils
    #vim /etc/exports
    /chroot 192.168.4.0/24(rw)
    #systemctl start nfs

     

    #ls -R/abc:
    Dockerfile rh7.repo(yum仓库)   run.sh

     

    #vim Dockerfile
    FROM centos
    MAINTAINER wangshu wangshu78123@163.com
    RUN rm -rf /etc/yum.repos.d/*
    ADD rh7.repo /etc/yum.repos.d/rh7.repo
    RUN yum clean all
    RUN yum repolist all
    RUN yum -y install net-tools psmisc httpd openssh-server
    RUN echo 123456 | passwd --stdin root
    EXPOSE 22
    EXPOSE 80
    ADD run.sh /usr/sbin/run.sh
    CMD ["/usr/sbin/run.sh"]

     

    #vim run.sh
    #!/bin/bash
    EnvironmentFile=/etc/sysconfig/sshd
    /usr/sbin/sshd-keygen &>/dev/null
    /usr/sbin/sshd
    EnvironmentFile=/etc/sysconfig/httpd
    /usr/sbin/httpd -DFOREGROUND

     

    #chmod 755 run.sh
    #echo aaa > /chroot/index.html
    #docker build -t myos .
    #docker run -d -p 80:80 -p 10022:22 -v /chroot:/var/www/html myos

     

     

    3  私有仓库

    自定义镜像仓库和docker hub

    registry基本概念

    •  共享镜像的一台服务器(镜像化的一台服务器)

    创建私有仓库

    方法1

    [root@s62 simple6]# vim /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd --insecure-registry=192.168.122.2:5000  --registry-mirror=http://aad0405c.m.daocloud.io

    方法2  

    #cat /etc/docker/daemon.json

    {
    "insecure-registries" : ["192.168.2.10:5000"]
    }

    [root@s62 simple6]# systemctl daemon-reload(重载配置文件)

    [root@s62 simple6]# systemctl restart docker

    [root@s62 simple6]# docker run -id -p 5000:5000 registry    //启动容器映射端口

    [root@s62 simple6]# docker tag a:label 192.168.122.2:5000/a:label   //打标签 /镜像a

    [root@s62 simple6]# docker push 192.168.122.2:5000/a:label  上传

    [root@s62 simple6]# docker rmi 192.168.122.2:5000/a:label   //先删除本地镜像

    [root@s62 simple6]# docker run -itd  192.168.122.2:5000/a:label

    [root@s62 simple6]# firefox  http://192.168.122.2:5000/v2/_catalog   //查看远程镜像

    [root@s62 simple6]#firefox  http://192.168.122.2:5000/v2/_catalog /镜像名/tags/list  //查看镜像标签

     

     

    部署Harbor私有镜像仓库

    环境要求与准备

    Harbor以容器的形式进行部署, 因此可以被部署到任何支持Docker的Linux发行版, 并且具备如下环境:

    • Python2.7+
    • Docker Engine 1.10+
    • Docker Compose 1.6.0+

    这里使用CentOS7.3的系统, Python2.7系统自带了, 剩下的就是安装Docker和Compose:

    [root@harbor01 ~]# yum install docker -y
    [root@harbor01 ~]# yum -y install epel-release
    [root@harbor01 ~]# yum install python-pip -y
    [root@harbor01 ~]# pip install docker-compose (pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose)
    # 查看安装完成的Docker和Compose的版本
    [root@harbor01 ~]# docker version
    [root@harbor01 ~]#docker-compose --version

    下载harbor包

    wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz

    openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout /data/cert/server.key -out /data/cert/server.crt

    Common Name (eg, your name or your server's hostname) []: harbor.wangshu.cn   //域名

     cd  harbor/ && ./prepare

    ./install.sh

    启动Harbor 
    解压完过后再harbor目录下有一个install.sh, 执行它来进行安装

    
    
    [root@harbor01 harbor]# ./install.sh
    [root@harbor01 harbor]# docker-compose ps
           Name                     Command               State                                Ports
    ------------------------------------------------------------------------------------------------------------------------------
    harbor-adminserver   /harbor/start.sh                 Up
    harbor-db            /usr/local/bin/docker-entr ...   Up      3306/tcp
    harbor-jobservice    /harbor/start.sh                 Up
    harbor-log           /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp
    harbor-ui            /harbor/start.sh                 Up
    nginx                nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
    registry             /entrypoint.sh serve /etc/ ...   Up      5000/tcp
    
    

    然后访问: https://harbor.wangshu.cn

    访问harbor报错502 Bad Gateway

    #tail -100 /var/log/harbor/adminserver.log


    #tail -100 /var/log/harbor/jobservice.log

     

    原因是我们指定的secretkey_path 路径创建的文件没有权限

    还原设置secretkey_path的路径为/data

    切换harbor的安装目录执行以下操作

    [root@localhost harbor]#docker-compose down

    [root@localhost harbor]#rm -rf /data/secretkey

    [root@localhost harbor]#./prepare

    [root@localhost harbor]#docker-compose up –d

    登录时报错:

    Error response from daemon: Get https://registry.niudingfeng.com/v1/users/: x509: certificate signed by unknown authority

    此种情况多发生在自签名的证书,报错含义是签发证书机构未经认证,无法识别。

    把harbor上的server.crt上传到任意docker上

    chmod 644 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

    cat server.crt >>/etc/pki/tls/certs/ca-bundle.crt

    chmod 444 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

    systemctl restart docker

    证书是docker的daemon需要用到的,重启docker服务:

    注意:

    docker client解析不了域名的必须要加hosts

  • 相关阅读:
    C#随机数字生成的一种方法
    SqlServer2012自增主键跳跃增长的问题解决方案
    Mysql5.7初始化成空密码或随机密码的方式
    StyleCop的常见错误
    数据库同步相关的SQL语句
    Linux Shell角本中的条件判断
    Linux(CentOS)中使用Mono+jexus部署Asp.net4.5网站
    Mina.Net实现的UDP多路广播
    Linux CentOS 6.6安装JDK1.7
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/wwchihiro/p/9250568.html
Copyright © 2011-2022 走看看