17網(wǎng)站一起做網(wǎng)店不發(fā)貨網(wǎng)上售賣平臺(tái)有哪些
作者簡(jiǎn)介: 辭七七,目前大一,正在學(xué)習(xí)C/C++,Java,Python等
作者主頁: 七七的個(gè)人主頁
文章收錄專欄: 七七的閑談
歡迎大家點(diǎn)贊 👍 收藏 ? 加關(guān)注哦!💖💖
前言
Docker 是一個(gè)
開源的應(yīng)用容器引擎
,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux或Windows
操作系統(tǒng)的機(jī)器上,也可以實(shí)現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
利用Dockerfile制作個(gè)人的鏡像文件
- 1. Dockerfile簡(jiǎn)介
- 2. Dockerfile相關(guān)指令
- 3. Dockerfile編寫
- 4. requirements.txt
- 5. build構(gòu)建鏡像文件
- 6. run運(yùn)行容器
1. Dockerfile簡(jiǎn)介
Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本。此文章為恒川學(xué)習(xí)筆記了解。
簡(jiǎn)單來說,Dockerfile就是把我們安裝環(huán)境的每個(gè)步驟和指令,放到一個(gè)文件,最后一鍵執(zhí)行,最后做成一個(gè)你想要的環(huán)境。
Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本。
Docker構(gòu)建三步曲:
- 編寫dockerfile文件
- docker build 構(gòu)建image鏡像文件
- docker run 運(yùn)行容器
2. Dockerfile相關(guān)指令
Dockerfile 是一個(gè)包含創(chuàng)建鏡像所有命令的文本文件,通過docker build命令可以根據(jù) Dockerfile 的內(nèi)容構(gòu)建鏡像,
在介紹如何構(gòu)建之前先介紹下 Dockerfile 的基本語法結(jié)構(gòu)。
Dockerfile 有以下指令選項(xiàng):
- FROM 基礎(chǔ)鏡像,當(dāng)前新鏡像是基于哪個(gè)鏡像的
- MAINTAINER 鏡像維護(hù)者的姓名和郵箱地址
- RUN 容器構(gòu)建時(shí)需要運(yùn)行的命令
- CMD 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令。
dockerfile中可以有多個(gè)CMD指令,但只有最后一個(gè)生效,CMD會(huì)被docker run之后的參數(shù)替換。 - EXPOSE 當(dāng)前容器對(duì)外暴露的端口號(hào)
- ENV 用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量
- ADD 將宿主機(jī)目錄下的文件拷貝到鏡像里面并且ADD命令會(huì)自動(dòng)處理URL和解壓tar壓縮包
- COPY COPY:類似ADD,拷貝文件和目錄到鏡像中,但是它只是拷貝,不會(huì)自動(dòng)處理URL和解壓tar壓縮包。
- ENTRYPOINT 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令。
- ENTRYPOIT的目的和CMD一樣,都是在指定容器啟動(dòng)程序及參數(shù)。
- VOLUME 容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
- USER 指定運(yùn)行容器時(shí)的用戶名或UID,后續(xù)的 RUN 也會(huì)使用指定用戶
- WORKDIR 指定在容器創(chuàng)建后,終端默認(rèn)登錄進(jìn)來工作目錄,一個(gè)落腳點(diǎn)
- ONBUILD 當(dāng)構(gòu)建一個(gè)被繼承的Dockerfile時(shí)運(yùn)行命令,父鏡像在被子繼承后,父鏡像的onbuild被觸發(fā)。
3. Dockerfile編寫
在當(dāng)前目錄新建一個(gè)文件夾docker-run, cd進(jìn)入到文件夾,touch新建一個(gè)Dockerfile,然后vi打開文件,開始編輯
[root@yoyo ~]# mkdir docker-run
[root@yoyo ~]# cd docker-run/
[root@yoyo docker-run]# touch Dockerfile
[root@yoyo docker-run]# vi Dockerfile
編輯內(nèi)容如下:
# 更新pip
RUN pip install --upgrade pip # 工作目錄
WORKDIR /code
ADD . /code# pip安裝依賴包
RUN pip install -r requirements.txt# 傳遞參數(shù)
ENTRYPOINT ["pytest"]# 默認(rèn)顯示help幫助信息
CMD ["--help"]
4. requirements.txt
requirements.txt是python的相關(guān)依賴包, 可以通過freeze命令生成
pip3 freeze >requirements.txt
[root@yoyo docker-run]# cat requirements.txt
APScheduler==3.5.3
asn1crypto==0.24.0
atomicwrites==1.3.0
attrs==18.2.0
backports.csv==1.0.7
bcrypt==3.1.7
beautifulsoup4==4.7.1
cached-property==1.5.1
certifi==2018.11.29
cffi==1.12.3
chardet==3.0.4
cryptography==2.7
DBUtils==1.3
defusedxml==0.5.0
diff-match-patch==20181111
Django==2.1.4
django-bootstrap3==11.0.0
django-crispy-forms==1.7.2
django-formtools==2.1
django-import-export==1.2.0
django-ranged-response==0.2.0
django-reversion==3.0.3
django-simple-captcha==0.5.10
django-stdimage==4.0.1
docker==3.7.3
docker-compose==1.24.1
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
et-xmlfile==1.0.1
future==0.17.1
httplib2==0.12.1
idna==2.7
jdcal==1.4
jsonschema==2.6.0
more-itertools==6.0.0
mysqlclient==1.4.2.post1
odfpy==1.4.0
openpyxl==2.6.1
paramiko==2.6.0
Pillow==5.4.1
pluggy==0.6.0
progressbar2==3.39.3
py==1.7.0
pycparser==2.19
pymssql==2.1.4
PyMySQL==0.9.3
PyNaCl==1.3.0
pytest==3.6.3
python-utils==2.3.0
pytz==2018.7
PyYAML==3.13
requests==2.20.1
six==1.12.0
soupsieve==1.7.3
tablib==0.13.0
texttable==0.9.1
tzlocal==1.5.1
urllib3==1.24.1
websocket-client==0.56.0
xlrd==1.2.0
xlwt==1.3.0
5. build構(gòu)建鏡像文件
docker build 命令用于使用 Dockerfile 創(chuàng)建鏡像。OPTIONS說明:
- -f :指定要使用的Dockerfile路徑;
- -pull :嘗試去更新鏡像的新版本;
- -quiet, -q :安靜模式,成功后只輸出鏡像 ID;
- -tag, -t: 鏡像的名字及標(biāo)簽,通常 name:tag 或者 name 格式;可以在一次構(gòu)建中為一個(gè)鏡像設(shè)置多個(gè)標(biāo)簽。
-t參數(shù)設(shè)置鏡像名稱yoyo_pytes和tag標(biāo)簽名稱v1,注意最后面有個(gè)點(diǎn).
docker build -t yoyo_pytest:v1 .
[root@yoyo docker-run]# docker build -t yoyo_pytest:v1 .
Sending build context to Docker daemon 11.78kB
Step 1/8 : FROM python:3.6---> cfcdf565ff94
Step 2/8 : MAINTAINER yoyo <283340479@qq.com>---> Using cache---> f523b919fcf9
Step 3/8 : RUN pip install --upgrade pip---> Using cache---> 3399b50dab4e
Step 4/8 : WORKDIR /code---> Using cache---> 7223a20e17fd
Step 5/8 : ADD . /code---> 650b554ccd6c
Step 6/8 : RUN pip install -r requirements.txt---> Running in 0e49d444f7d8
運(yùn)行過程中可以看到按步驟運(yùn)行,如:Step 1/8
運(yùn)行完成后,可以通過docker images查看生成的鏡像
[root@yoyo docker-run]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yoyo_pytest v1 6b4267ce7ac4 21 seconds ago 1.02GB
[root@yoyo docker-run]#
6. run運(yùn)行容器
在當(dāng)前目錄新建一個(gè)test_h.py文件,寫入pytest測(cè)試腳本
import pytest
def test_one():print("正在執(zhí)行----test_one")x = "this"assert 'h' in xdef test_two():print("正在執(zhí)行----test_two")x = "hello"assert xdef test_three():print("正在執(zhí)行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_h.py"])
使用docker run運(yùn)行容器
- -it -t讓docker分配一個(gè)偽終端并綁定到容器的標(biāo)準(zhǔn)輸入上, -i則讓容器的標(biāo)準(zhǔn)輸入保持打開.
- -rm 容器退出時(shí),自動(dòng)清除容器。
- -rm選項(xiàng)不能與-d同時(shí)使用
- -v 將容器的工作目錄/code掛載到宿主機(jī)的$PWD,也就是當(dāng)前目錄
- yoyo_pytest:v1 容器名稱和tag名稱
- test_h.py 后面跟著需要執(zhí)行的腳本名稱
[root@yoyo docker-run]# docker run -it --rm -v "$PWD":/code yoyo_pytest:v1 test_h.py -s
================================================================== test session starts ==================================================================
platform linux -- Python 3.6.9, pytest-3.6.3, py-1.7.0, pluggy-0.6.0
rootdir: /code, inifile:
collected 3 items test_h.py 正在執(zhí)行----test_one
.正在執(zhí)行----test_two
.正在執(zhí)行----test_three
.===============================================================
3 passed in 0.01 seconds
關(guān)于【Docker】用Dockerfile制作個(gè)人的鏡像文件的詳解,七七就先分享到這里了,如果你認(rèn)為這篇文章對(duì)你有幫助,請(qǐng)給七七點(diǎn)個(gè)贊吧,如果發(fā)現(xiàn)什么問題,歡迎評(píng)論區(qū)留言!!💕💕