K8S云管平台开发实践 - Dockerfile

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wjs7740/article/details/78840016

历经大半年,自研的k8s云管理平台终于算是完成了一阶段的开发目标。最近打算整理一下开发中遇到的各种问题和坑。温故而知新,也许能有新的收获。
想到哪写哪,也因为最近测试阶段,主要工作放在将传统应用转化为Docker容器应用,所以第一篇我打算写下Dockerfile。

如何使用Dockerfile将传统应用快速改造为容器镜像

1. 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 指令都只能有一个,如果多个则只执行最后一个;另外注意有三个参数

2. build镜像

# 在Dockerfile同级目录下
sudo docker build -t jason/webdemo .

成功后显示Successfully,同时返回镜像ID,如图:
这里写图片描述

3.push镜像到harbor

docker tag imageid tagname(docker-hub:80/workflow/k8scmp)
docker push tagname(docker-hub:80/workflow/k8scmp)

4.运行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)
展开阅读全文

没有更多推荐了,返回首页