构建openstark train版本YUM源的Docker容器镜像

一、准备基础环境
1、同步rpm包

yum -y install reposync createrepo yum-utils 
mkdir /etc/yum.repo/bak 
mv /etc/yum.repo/*.repo /etc/yum.repo/bak

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum -y install centos-release-openstack-train
mkdir ~/rpm
#同步完18G
reposync -p ~/rpm

2、打包rpm包

cd ~/rpm/
tar -zcvf base.tar.gz base
tar -zcvf centos-ceph-nautilus.tar.gz centos-ceph-nautilus
tar -zcvf centos-nfs-ganesha28.tar.gz centos-nfs-ganesha28
tar -zcvf centos-openstack-train.tar.gz centos-openstack-train
tar -zcvf centos-qemu-ev.tar.gz centos-qemu-ev
tar -zcvf extras.tar.gz extras
tar -zcvf updates.tar.gz updates

3、安装docker

yum -y install device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce

systemctl restart docker && systemctl enable docker

二、编写Dockerfile
1、工作目录结构和文件如下:

/root/build/
├── config
│   ├── docker-env.sh
│   ├── nginx.conf
│   └── openstark.repo
├── Dockerfile
├── repo
│   ├── CentOS-Base.repo
│   ├── CentOS-Ceph-Nautilus.repo
│   ├── CentOS-NFS-Ganesha-28.repo
│   ├── CentOS-OpenStack-train.repo
│   ├── CentOS-QEMU-EV.repo
│   └── CentOS-Storage-common.repo
└── source
    ├── base.tar.gz
    ├── centos-ceph-nautilus.tar.gz
    ├── centos-nfs-ganesha28.tar.gz
    ├── centos-openstack-train.tar.gz
    ├── centos-qemu-ev.tar.gz
    ├── extras.tar.gz
    ├── nginx-1.19.1.tar.gz
    └── updates.tar.gz

3 directories, 18 files

2、准备构建镜像需要的文件

mkdir ~/build
mkdir ~/build/{source,config,repo}
mv ~/rpm/*.tar.gz ~/build/source/
cp /etc/yum.repos.d/*.repo ~/build/repo/
rm -rf ~/build/repo/docker-ce.repo
wget https://nginx.org/download/nginx-1.19.1.tar.gz -P ~/build/source/
cat ~/build/config/docker-env.sh
#!/bin/sh
init_config(){

    yum -y update
    yum -y install make gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel createrepo
}

install_sf(){

    cd /opt/repo/nginx-1.19.1
    ./configure --prefix=/usr/local/nginx
    make -j 8 && make install
    wait
    rm -rf /usr/local/nginx/conf/nginx.conf
    mv /opt/repo/nginx.conf /usr/local/nginx/conf/nginx.conf
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    /usr/local/nginx/sbin/nginx -t
    /usr/local/nginx/sbin/nginx -s reload

    rm -rf /opt/repo/base/repodata/ && \
    rm -rf /opt/repo/updates/repodata/ && \
    rm -rf /opt/repo/extras/repodata/ && \
    rm -rf /opt/repo/centos-ceph-nautilus/repodata/ && \
    rm -rf /opt/repo/centos-nfs-ganesha28/repodata/ && \
    rm -rf /opt/repo/centos-openstack-train/repodata/ && \
    rm -rf /opt/repo/centos-qemu-ev/repodata/

    createrepo /opt/repo/centos-qemu-ev && \
    createrepo /opt/repo/centos-openstack-train && \
    createrepo /opt/repo/centos-nfs-ganesha28 && \
    createrepo /opt/repo/centos-ceph-nautilus && \
    createrepo /opt/repo/extras && \
    createrepo /opt/repo/updates && \
    createrepo /opt/repo/base

    mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
    mv /tmp/*.repo /etc/yum.repos.d/
    yum clean all
    yum makecache
}

clean_env(){

    rm -rf /opt/repo/nginx-1.19.1
    rm -rf /tmp/
    rm -rf /root/anaconda-ks.cfg
    echo > /var/log/wtmp
    echo > /var/log/btmp
    echo>/var/log/lastlog
    echo > /var/log/secure
    echo > /var/log/messages
    echo>/var/log/syslog
    echo>/var/log/yum.log
    echo > ~/.bash_history
    yum clean all
}

main(){

    init_config && \
    install_sf && \
    clean_env

}

main

cat ~/build/config/nginx.conf

#user  nobody;
worker_processes auto;
worker_rlimit_nofile 65535;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  20480;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
          root /opt/repo;
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/base {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/updates {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/extras {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/centos-openstack-train {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/centos-qemu-ev {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/centos-ceph-nautilus {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }
        location /opt/repo/centos-nfs-ganesha28 {
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}
cat ~/build/config/openstark.repo

[base]
name=CentOS-$releasever - Base
baseurl=http://ip:port/base/
gpgcheck=0
enabled=1

[updates]
name=CentOS-$releasever - Updates
baseurl=http://ip:port/updates/
gpgcheck=0
enabled=1

[extras]
name=CentOS-$releasever - Extras
baseurl=http://ip:port/extras/
gpgcheck=0
enabled=1

[centos-openstack-train]
name=CentOS-7 - OpenStack train
baseurl=http://ip:port/centos-openstack-train/
gpgcheck=0
enabled=1

[centos-qemu-ev]
name=CentOS-$releasever - QEMU EV
baseurl=http://ip:port/centos-qemu-ev/
gpgcheck=0
enabled=1

[centos-ceph-nautilus]
name=CentOS-7 - Ceph Nautilus
baseurl=http://ip:port/centos-ceph-nautilus/
gpgcheck=0
enabled=1

[centos-nfs-ganesha28]
name=CentOS-7 - NFS Ganesha 2.8
baseurl=http://ip:port/centos-nfs-ganesha28/
gpgcheck=0
enabled=1
#建议rpm包分多层添加进镜像,单层镜像不超10G
cat ~/build/Dockerfile
FROM centos:centos7.8.2003
MAINTAINER duanshuaixing "duanshuaixing@gmail.com"
ADD ./source/base.tar.gz /opt/repo/
ADD ./source/updates.tar.gz /opt/repo/
ADD ./source/extras.tar.gz /opt/repo/
ADD ./source/centos-ceph-nautilus.tar.gz /opt/repo/
ADD ./source/centos-nfs-ganesha28.tar.gz /opt/repo/
ADD ./source/centos-openstack-train.tar.gz /opt/repo/
ADD ./source/centos-qemu-ev.tar.gz /opt/repo/
ADD ./source/nginx-1.19.1.tar.gz /opt/repo/

ADD ./config/* /opt/repo/
ADD ./repo/* /tmp/
RUN /opt/repo/docker-env.sh
WORKDIR /opt/repo
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

3、构建镜像

cd ~/build
docker build -t yum-el7:openstark-train .
docker tag yum-el7:openstark-train registry.baidubce.com/tools/yum:openstark-train

docker push registry.baidubce.com/tools/yum:openstark-train

4、这个镜像仓库是公共的,需要的朋友可以直接下载

docker pull registry.baidubce.com/tools/yum:openstark-train
#容器暴露到宿主机的端口根据实际情况修改,本次测试为8888端口
docker run -itd --restart=always --name openstark-train -p8888:80 registry.baidubce.com/tools/yum:openstark-train

5、更新包

docekr exec -it openstark-train bash
reposync /opt/repo/

6、删除容器和镜像

docker rm -f openstark-train
docker rmi -f registry.baidubce.com/tools/yum:openstark-train
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值