容器使用沙箱機制,互相隔離,優勢在于讓各個部署在容器的裡的應用互不影響,獨立運作,提供更高的安全性。
編寫Dockerfile檔案
FROM python:3.6.8
RUN mkdir /code \
&&apt-get update \
COPY app /code
COPY requirements.txt /code
RUN pip install -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /code
CMD [“/bin/bash”,“run.sh”]
FROM:作用是指定一個基礎鏡像來進行建構流程。比如上面指定了python3.6.8作為基礎鏡像,後續的一切操作都會以這個鏡像作為基礎來進行定制,如果不存在,會從官網下載下傳。FROM必須是Dockerfile首個指令。
RUN :Dockerfile執行指令最核心的部分,在建構鏡像的過程中執行參數。
COPY:複制檔案。COPY
WORKDIR:工作目錄,若不存在,會自動幫你建立。
CMD:容器啟動指令,Docker 不是虛拟機,容器就是程序。既然是程序,那麼在啟動容器的時候,需要指定所運作的程式及參數。 CMD 指令就是用于指定預設的容器主程序的啟動指令。如果docker run指定了指令參數,這裡的cmd将不會起作用。例如docker run -it -name redis docker.io/redis /bin/bash,啟動容器不會執行dockerfile中的cmd,因為docker run已經指定了指令參數/bin/bash。
建構鏡像
docker bulid -t pythonweb .
指令建構一個名字為 pythonweb 的鏡像,建構完成後傳回一個鏡像id xxx 。
-t:用來指定image的名字
.:工作目錄,若不存在,小圓點 “.” 代表目前目錄
運作容器
docker run -it -p 5000:5000 -v /opt/code/pythonweb:/code –name pyweb –privileged=true pythonweb
-p:把容器的5000端口映射到主控端6500
-v:主機的目錄/opt/code/pythonweb映射到容器的目錄/code
–name:給容器起個名字pyweb,pythonweb是剛剛建構的鏡像
–privileged=true:執行容器内檔案需要的權限