赞
踩
历经大半年,自研的k8s云管理平台终于算是完成了一阶段的开发目标。最近打算整理一下开发中遇到的各种问题和坑。温故而知新,也许能有新的收获。
想到哪写哪,也因为最近测试阶段,主要工作放在将传统应用转化为Docker容器应用,所以第一篇我打算写下Dockerfile。
如何使用Dockerfile将传统应用快速改造为容器镜像
一般来说,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动指令
##########################################################
# Dockerfile to run a flask-based web application# Based on an jsk:8 image
##########################################################
# Set the base image to use to centos
FROM codenvy/jdk8
# Set the file maintainer
MAINTAINER jasonwang,wjs7740@163.com
# Set env varibles used in this Dockerfile (add a unique prefix, such as DOCKYARD)
# Local directory with project source
ENV DOCKYARD_SRC=k8scmp
# Directory in Container for all project files
ENV DOCKYARD_SRCHOME=/opt
# Directory in container for project source files
ENV DOCKYARD_SRCPROJ=/opt/jar
# set container user:root
USER root
# Copy application source code to SRCDIR
COPY $DOCKYARD_SRC $DOCKYARD_SRCPROJ
# Create application subdirectories
WORKDIR $DOCKYARD_SRCPROJ
RUN mkdir log
VOLUME ['$DOCKYARD_SRCPROJ/log/']
# Sync container time
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Port to expose
EXPOSE 8000
WORKDIR $DOCKYARD_SRCPROJ
# set start script
ENTRYPOINT["python","manage.py","runserver -p 8000"]
挑其中重要的说一说:
a) RUN、ENV、EXPOSE为镜像操作指令。每运行一条指令,镜像就添加新的一层;CMD是用来指定运行容器是的指令
b) USER root:指定登录容器的用户,最好设置为root,否则执行某些命令是可能会有问题
c) 设置时区:看基础镜像的时区,如果不设置,可能某些情况会是伦敦时间,日志输出会早八小时
d) CMD\ENTRYPOINT 指令都只能有一个,如果多个则只执行最后一个;另外注意有三个参数
# 在Dockerfile同级目录下
sudo docker build -t jason/webdemo .
成功后显示Successfully,同时返回镜像ID,如图:
docker tag imageid tagname(docker-hub:80/workflow/k8scmp)
docker push tagname(docker-hub:80/workflow/k8scmp)
sudo docker run -d --restart=always \
-p 8000:8000 \
--add-host docker-hub:182.xxx.xx.xxx \
--name k8scmp \
tagname(docker-hub:80/workflow/k8scmp)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。