docker build steps
- 編輯dockerfile文件
- 由于本次鏡像的有些依賴自己也有依賴查刻,為了保持鏡像的精簡(jiǎn)性番宁,這里采用分步制作,所謂分步赖阻,就是把依賴在第一個(gè)鏡像內(nèi)編譯完成之后蝶押,復(fù)制給第二個(gè)鏡像,這樣第二個(gè)鏡像內(nèi)就不會(huì)有編譯工具等不需要的東西了火欧。
# first step
FROM python:2.7-alpine as builder # 每個(gè)FROM就是制作一個(gè)指定的基礎(chǔ)鏡像
# construct the virtualenv
ADD requirements.txt requirements.txt # 把項(xiàng)目需要的依賴映射到docker鏡像中
# RUN命令是運(yùn)行指定命令棋电,就是在鏡像內(nèi)的終端執(zhí)行命令
# sed:為直接修改文件,這里是修改了鏡像內(nèi)的源地址
# && \ :是把多個(gè)命令放在一行執(zhí)行
# apk: 安裝軟件 苇侵,由于有些依賴需要編譯赶盔,這里還需要下載安裝包-dev(-dev是開(kāi)發(fā)者在編輯項(xiàng)目時(shí)需要的東西,安裝-dev結(jié)尾的軟件之后會(huì)自動(dòng)把它的依賴安裝好)
# 最后是為了安裝虛擬環(huán)境和安裝requirements的包
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk --no-cache add alpine-sdk libxml2-dev linux-headers libxslt-dev && \
pip install virtualenv && \
virtualenv /.venv && \
/.venv/bin/pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# second step
FROM python:2.7-alpine # 同樣制作一個(gè)指定的基礎(chǔ)鏡像
COPY --from=builder /.venv /.venv # 把第一個(gè)鏡像的虛擬環(huán)境copy過(guò)來(lái)
ADD ./src /fastone-cwl # 把項(xiàng)目映射到鏡像內(nèi)
# sed:為直接修改文件榆浓,這里是修改了鏡像內(nèi)的源地址
# find —— add :此步為檢測(cè)復(fù)制來(lái)的虛擬環(huán)境中的路徑于未,對(duì)比缺少哪些包,會(huì)自動(dòng)安裝對(duì)應(yīng)的包
# 在第一步中額外安裝的包需要在add后面添加,-dev結(jié)尾的就可以舍棄了
# ln -s: 軟連接烘浦,把cwl-runner放在bin目錄下抖坪,可直接執(zhí)行
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
find /.venv/ -name *.so | \
xargs scanelf -n | \
awk 'NR>1 {print $2}' | \
tr ',' '\n' | \
sort | \
uniq | grep -v libpython | \
while read so; do echo so:$so; done | \
xargs apk --no-cache add nodejs && \
ln -s /fastone-cwl/cwl-runner /usr/bin
- 由于我們用的虛擬環(huán)境,所以寫(xiě)好文件之后需要切換環(huán)境闷叉,這里要改cwl-runner中python在shell的位置
#!/usr/bin/env python # 修改這個(gè)
import sys
sys.path.append('..')
from fastone_cwl.cwl_runner import main
sys.exit(main(sys.argv[1:]))
**************************************************************************
**************************************************************************
#!/.venv/bin/python
import sys
sys.path.append('..')
from fastone_cwl.cwl_runner import main
sys.exit(main(sys.argv[1:]))
- 執(zhí)行build命令
docker build -t r.fastonetech.com:5000/fastone-cwl .
- build過(guò)程中可能會(huì)出現(xiàn)錯(cuò)誤擦俐,必要時(shí)根據(jù)錯(cuò)誤log修改dockerfile
- 這里報(bào)錯(cuò)就是少了libxml2 libxml2-dev兩個(gè)包
- 運(yùn)行image
docker run r.fastonetech.com:5000/fastone-cwl cwl-runner
- 上傳鏡像
docker push r.fastonetech.com:5000/fastone-cwl
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者