Docker的核心思想就是将应用给整合进Container内运行,让这个Container可以部属在任何机器上,这个过程被称是Docker化 (Dockerizing)。应用Docker化分成下面几个步骤:
在项目的根目录撰写Dockerfile,配合我们之前的文章,我们先来建立一个简单的Dockerfile吧。
FROM httpd:2.4
LABEL maintainer="Lufor"
ENV Apple="Good Apple"
RUN echo ${Apple}
COPY . /usr/local/apache2/htdocs/
docker build -t web:latest .
docker run -d -p 8083:80 --name Web_dockerfile web:latest
写好Dockerfile後运行docker build,-t <ImageName>:<tag>
代表tag新建立出来的imagea名称,後面的.
代表当前目录下的Dockerfile。照上述执行完後会出现一个新的images叫做web:lastest
,随後运行这个images就能使用这个Container应用了。
具体Dockerfile该如何写呢? 有很多指令,以建立一个Flask Server为例子:
# use Python Image
FROM python:3.7-slim
#Set working dir (切换目录)
WORKDIR /app
# Copy current direction into container /app
COPY . .
#install the need of package in requirement
RUN pip install -r requirements.txt
#Make port 3000 available to the world outside
EXPOSE 3000
#Define environment (Name变数内容为World)
ENV NAME World
#RUN app.py when launch
CMD ["python","app.py"]
以下容我慢慢详解一些常用的指令,方便你未来阅读後可以撰写出Dockerfile
FROM
FROM是起手式,指定我们的基础Image由什麽构成,本地端没找到就会去远端找LABEL <key>=<Value> <key>=<Value> ...
LABEL代表了建构出来的image的MetaData,宣示了这个专案的负责人,可以透过docker image inspect <ImageName>
查看WORKDIR <path>
切换目录,未来进入Container内默认就是进入该WORKDIRCOPY <SRC> <TGT>
复制档案,将你的专案复制进Image内,未来RUN时就能直接使用。如上面Flask Server的例子,由於我们已经切换WORKDIR,所以目标目录为.
ENV <key>=<Value> <key>=<Value> ...
订定系统环境变数,方便未来专案可以抓取,dockerfile的ENV可以在run container时被-e <key> <value>
取代。ARG <key>=<Value> <key>=<Value> ...
一样是环境变数,注意!!,只存在於Build阶段,在Container内不会出现。RUN <指令1> && <指令2> && ...
在初始化时会执行的指令VOLUME <TGT_PATH>
or VOLUME <SRC_PATH> <TGT_PATH>
指定内部持久层,Container删除後资料不删除,详细可以见前几天的文章EXPOSE <PROT>
Container要对外开的PORTCMD ["executable","param1","param2"]
一样是执行,但是通常用於阻塞式指令,放在最後一个指令。以上大致就是常用的Dockerfile写法,Dockerfile可以说是Docker的精华,未来几天会模拟建立前後端专案,让看到的人能更熟悉Dockerfile。
【前言】 这两天的文章都是 web3.js 的学习笔记,大部分内容都来自他们的官方文件!之後还会有...
接下来的天数,预计要来实作上面已经教学的 sass 方法,毕竟学习是一回事,真正拿来实作则是另一回事...
做好了指标的收集,接下来还有一个很重要的步骤 --- 数据的视觉化,关於这方面的功能虽然 Prome...
宣告变数的资料型别--物件 1.数值( Number ) 2.字串( String ) 3.布林值(...
Day 26: LeetCode Hard+Medium LeetCode 212. Word Se...