zoukankan      html  css  js  c++  java
  • Docker alpine 添加bash+修改时区发布镜像到docker.io

    本来准备用scratch来运行golang程序的,运行是可以但是遇到了时区的问题,且scratch是一个空镜像也不方便做定制化
    alpine是精简版镜像(约5.6M),默认不带bash和timezone,但提供是包管理工具apk。也正是由于其精简性便于在alpine的基础上做定制化

    测试看下alpine里的时间

    docker pull alpine拉取镜像,再执行docker run --rm alpine date -R 查看alpine里的时间
    看到时间后面的+0000就说明alpine默认是格林威治时间

    解决办法在alpine基础上安装bash并配置好时区,然后打包成新的镜像,新镜像约12.5M(比alpine大7M左右),然后基于定制化的alpine基础上再build自己想要的镜像来解决时间问题
    步骤如下:

    一、创建Dockerfile

    vi Dockerfile
    

    复制以下内容保存退出

    FROM alpine
    
    #更新Alpine的软件源为国内源,提高下载速度
    RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories
    
    RUN apk update 
            && apk upgrade 
            && apk add --no-cache bash 
            bash-doc 
            bash-completion 
            && rm -rf /var/cache/apk/* 
            && /bin/bash
    # 设置时区为上海
    RUN apk -U add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
        && echo "Asia/Shanghai" > /etc/timezone 
        && apk del tzdata
    

    二、根据创建好的Dockerfile Build镜像

    创建好Dockerfile后直接build,注意在镜像名称前面要加上你的dockerid(我的dockerid是nickchou),不然后面没法push

    docker build -t nickchou/alpine-bash .
    

    看到successfully就说明执行成功了

    build好之后查看build成功后的镜像

    docker images
    

    三、把本地镜像alpinecst上传到hub.docker.com,便于跨服务器使用,不用每台服务器build

    先登录docker,然后填写账号密码(没有账号可以去注册一个 https://hub.docker.com/

    docker login
    

    显示Login Succeeded说明登录成功,然后把刚build的本地镜像push到官方

    docker image push nickchou/alpinecst:latest
    

    push成功的截图

    登录自己的账户也可以看到镜像

    push成功后可以退出登录

    docker logout
    

    四、测试镜像

    先删除本地镜像,如果本地没有build的话跳过

    docker rmi nickchou/alpine-bash
    

    重新远程拉最新镜像

    docker pull nickchou/alpine-bash
    

    分别查看alpine和nickchou/alpinecst的时区

    docker run --rm  alpine date -R
    docker run --rm nickchou/alpine-bash date -R
    

    看到nickchou/alpinecst时间后面的+0800就说明已经是东八区了

    接着测试容器的bash(-rm指的是容器运行完成后删除),退出容器按Ctrl+P+Q 或者exit

    docker run -it --rm nickchou/alpine-bash
    

    小结 :现在就可以基于这个镜像去发布golang等就不存在时区和没法docker exec -it的问题了,在Dockerfile第一行改为 FROM nickchou/alpine-bash就可以用现成的了,当然你也可以自己打包一个。
    步骤三里面的发布docker.io只是为了方便以后其他服务器也可以直接用,如果只有一台服务器,步骤三可以忽略

  • 相关阅读:
    Metadata Lock原理5
    Seconds_Behind_Master
    Metadata Lock原理4
    MySQL Troubleshoting:Waiting on query cache mutex 腾讯数据库工程师:幕南风
    Metadata Lock原理2
    Metadata Lock原理1
    Online DDL与pt-online-schema-change
    Solaris 安装JDK
    RAID 概述
    4K Block Size的Device和 Aligned IO
  • 原文地址:https://www.cnblogs.com/nickchou/p/12705831.html
Copyright © 2011-2022 走看看