使用 docker 統(tǒng)一開發(fā)、測試、發(fā)布環(huán)境颊糜。* 示例項目地址哩治。
docker 的在線和離線安裝
-
在線安裝
-
離線安裝
官網(wǎng)下載對應平臺的安裝包。
-
核心概念
- 鏡像衬鱼,類似于虛擬機/操作系統(tǒng)鏡像业筏,可以理解為面向Docker引擎的只讀模版。是創(chuàng)建docker容器的基礎鸟赫,可以看作面向?qū)ο笾械念悺?/li>
- 容器蒜胖,通過鏡像創(chuàng)建的一個實例,類似于一個輕量級的沙箱惯疙,或者說是一個已經(jīng)啟動的操作系統(tǒng)翠勉。Docker使用容器來運行和隔離應用∶沟撸可以看作面向?qū)ο笾械膶ο蟆?/li>
- 倉庫对碌,可以看作代碼庫(如果是java,可以看作是maven或者gradle的倉庫)蒿偎。是Docker集中存放鏡像文件的地方朽们。
-
基本使用(對比git),mac和windows都有相應的圖形界面诉位。
- 鏡像拉取:
docker pull imagename:tag
- 從鏡像運行容器(鏡像不存在時會自動pull骑脱,任務結(jié)束后容器就會自動停止):
docker run --rm -v /var/code:/root/code -p 8080:80 --name=example imagename:tag
-
--rm
和-d
不能同時使用 - 交互式運行容器中的指定程序(容器要處于運行狀態(tài)):
docker exec -it example bash
- 啟動和停止容器:
docker start/stop example
- 從容器中復制文件或目錄:
docker copy
- 鏡像拉取:
-
數(shù)據(jù)卷(Data Volumes)管理
數(shù)據(jù)卷的使用,類似Linux下對目錄或文件進行mount操作苍糠。
-
創(chuàng)建默認數(shù)據(jù)卷
# 只能是rw模式叁丧,會分配一個默認的VolumesName(hash值),容器被刪除時會自動刪除數(shù)據(jù)卷 docker run -v /test_py --name=test_python --rm -it python:2.7.12 bash
- 容器中的 /test_py 目錄會被持久化在 /var/lib/docker/volumes/VolumesName (可以使用docker volume inspect 命令查看)中岳瞭。
- Mac下無法直接查看 /var/lib/docker 到拥娄,需要在這個模式下
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty 查看
,具體可以查看這里瞳筏。
-
給數(shù)據(jù)卷掛載宿主主機的目錄或文件
# 容器被刪除時不會刪除數(shù)據(jù)卷 docker run -v ~/project/pythonProject/test_py:/code:rw --name=test_python --rm -it python:2.7.12 bash docker run -v ~/project/pythonProject/test_py/helloworld.py:/code/helloworld.py:ro --name=test_python --rm -it python:2.7.12 bash
-
-
命名數(shù)據(jù)卷的使用稚瘾,使用這個數(shù)據(jù)卷的容器被刪除時不會刪除數(shù)據(jù)卷
數(shù)據(jù)卷命令
-
網(wǎng)絡管理
默認情況下,在容器外部是無法通過網(wǎng)絡來訪問容器內(nèi)的網(wǎng)絡應用和服務的姚炕。通過
-p
參數(shù)來指定端口映射摊欠。docker run -p ip:hostport:containerport imagename
實例
# ip一般省略為127.0.0.1, 訪問宿主主機的8080端口相當于訪問容器的80端口 docker run -p 8080:80 imagename
實戰(zhàn)--搭建基于docker的scrapy開發(fā)和發(fā)布環(huán)境。
-
使用Dockerfile構(gòu)建一個python scrapy爬蟲的鏡像柱宦,可以直接通過
docker build -t scrapyd-dev:1.0.0 .
命令構(gòu)建鏡像些椒,最終會使用docker-compose來實現(xiàn)。# Dockerfile # Author: weineel FROM python:2.7.13 MAINTAINER weineel LiJF_wn@163.com WORKDIR /var/code # COPY/ADD(可以是一個壓縮包掸刊,會自動解壓) COPY ./etc/pip.conf /root/.pip/pip.conf COPY ./etc/scrapyd.conf /etc/scrapyd/scrapyd.conf RUN pip install --no-cache-dir scrapy scrapyd # 定義編譯指令 # 在編譯時通過 docker build --build-arg _TZ=Asia/Shanghai,_TC=weiguo -t test_python:1.0.0 . 方式指定免糕, # 可以用在run等指令中,做分支判斷 ARG _TZ=Asia/Shanghai ARG _TC # 在啟動容器是 -e 指定環(huán)境變量,會覆蓋編譯時賦的值说墨。 ENV TZ $_TZ ENV TC $_TC VOLUME /var/code EXPOSE 6800 # ENTRYPOINT ["/bin/bash"] # ENTRYPOINT 和 CMD的區(qū)別 # 相當于開機啟動項,container在啟動時執(zhí)行 CMD ["scrapyd", "--pidfile="]
-
使用docker-compose管理docker
# docker-compose.yml version: '3.1' services: scrapyd: build: context: ./scrapyd dockerfile: ${ScrapydDockerfileName} ports: - "6800:6800" volumes: - ./scrapyd_data:/var/lib/scrapyd - ../:/var/code # depends_on: # - splash # links: # - splash restart: always splash: image: scrapinghub/splash ports: - "8050:8050"
-
構(gòu)建步驟, 以下命令在項目根目錄中的docker目錄下執(zhí)行
-
初始項目目錄結(jié)構(gòu)
屏幕快照 2017-09-07 下午5.45.52.png docker-compose up scrapyd
啟動容器苍柏。docker-compose exec scrapyd bash
進入容器(相當于遠程登錄的服務器)尼斧,容器中安裝了scrapy包,可以執(zhí)行scrapy的命令行工具等试吁,因為把項目根目錄掛在到了容器的/var/code
所以在容器中的/var/code
目錄下的內(nèi)容和項目根目錄一致的棺棵。scrapy startproject myproject
創(chuàng)建爬蟲項目,此命令是在容器中執(zhí)行的熄捍,注意觀察命令行提示符烛恤。scrapy genspider gjfgw http://www.ndrc.gov.cn
創(chuàng)建爬蟲接下來就是快樂的寫爬蟲了scrapy。
-