Docker alpine 添加bash+修改时区发布镜像到docker hub及阿里镜像库

本来准备用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

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

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

docker login

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

docker image push nickchou/alpine-bash:latest

push成功的截图

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

push成功后可以退出登录

docker logout

四、测试镜像

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

docker rmi nickchou/alpine-bash

重新远程拉最新镜像

docker pull nickchou/alpine-bash

分别查看alpine和nickchou/alpine-bash的时区

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

看到nickchou/alpine-bash时间后面的+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只是为了方便以后其他服务器也可以直接用,如果只有一台服务器,步骤三可以忽略

五、推送到阿里镜像库加速

5.1 选择加速的地区(如上海/杭州/北京等), 选择默认实例(个人版本),因我的服务器是买在杭州所以镜像服务也选杭州,其他地区类似
https://cr.console.aliyun.com/cn-hangzhou/instance/namespaces

公网和专有网络地址在这

5.2 每个账户可以免费创建3个空间,注意选择好 公开/私有

5.3 创建你一个仓库名称,用来推送镜像,注意仓库的地址是registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash

5.4 在之前创建好的镜像基础上再加一个tag,注意把下面的szpub空间名及后面的容器名替换为自己的
注意:szpub空间名后面最好不要再继续划分层级,如szpub/aaa/alpine-bash 这样虽然可以push成功但在仓库网页版中无法查看镜像

sudo docker tag nickchou/alpine-bash registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash

5.5 登陆阿里云镜像仓库,登录名是阿里云账号全名,密码为开通服务时设置的密码(您可以在访问凭证页面修改凭证密码)

sudo docker login --username=zhou****@163.com registry.cn-hangzhou.aliyuncs.com

查看登陆信息

cat /root/.docker/config.json

5.6 推送镜像到阿里云仓库

sudo docker push registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash:latest

网页版查看镜像,如下图

5.7 拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash

5.8 运行测试

docker run --rm registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash date -R


5.9 修改Dockerfile,相比从境外直接下载要快很多

FROM registry.cn-hangzhou.aliyuncs.com/szpub/alpine-bash
#FROM nickchou/alpine-bash
#FROM alpine
posted @ 2020-04-15 17:06  nickchou  阅读(1483)  评论(0编辑  收藏  举报