docker使用筆記
阿新 • • 發佈:2018-01-13
宿主機 /tmp host 單個 ant per ror ash otl 項目部署時用到了docker,以下分享了我在實踐中使用的指令,和對docker一些個人的理解(※和字體加重部分)
本文選擇使用網易的鏡像源:https://c.163.com/hub#/m/home/
服務器環境nginx+uwsgi+django+celery+supervisor
1,常用指令:
-拉取鏡像到本地庫:docker pull hub.c.163.com/public/centos:6.7-tools
-新建Dockerfile文件(內容見2)
-依據Dockerfile去建立定制的鏡像:docker build -t myproject/ubuntu:16.04 . (Dockerfile所在路徑)
-鏡像操作方法:
1,查看所有鏡像:docker images
2,查找鏡像:docker search image_name
3,刪除鏡像:docker rmi image_name
-容器的操作方法:
1,運行容器(其實是新建一個容器):docker run -d -it -p 80:80 -v /host_path:/container_path wlxy_quant_p/ubuntu:16.04(-p -v 可指定多個)
※雖然容器有持久化(停止後數據不丟失),但是建議容器中所用數據不要保存在容器中,將所有data和配置目錄都要外掛到宿主機上
2,查看所有容器:docker ps -a (不加參數就是查看正在運行的容器)
3,刪除所有容器:docker rm `docker ps -a -q` (刪除單個容器:docker rm Name/ID )
4,停止、啟動、殺死一個容器 :docker stop/start/kill Name/ID
5,容器中取日誌:docker logs Name/ID
6,列出容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增加的,D 刪除的,C 被改變的:docker diff Name/ID
7,顯示一個運行的容器裏面的進程信息 :docker top Name/ID
8,從容器裏面拷貝文件/目錄到本地一個路徑 :docker cp Name/ID:/container_path to_path
9,進入正在運行的容器:docker exec -it ID /bin/bash
10,將容器導出為鏡像:docker commit ID image_name
2,Dockerfile內容
※我之前的對於鏡像和容器的理解有誤,其實鏡像相當於類,而容器相當於對象,對象可以變更和添加自己的屬性等
※所以個人認為鏡像主要做一些通用內容安裝和配置,比如python服務器鏡像都需要安裝web框架等其他通用的庫,不用像下面這樣把所有配置全部做到鏡像裏
※以下部分指令是可以在容器運行後再進入容器執行
FROM hub.c.163.com/public/ubuntu:16.04-tools #源鏡像 MAINTAINER adam.ding , dxf813@126.com COPY requirements.txtENV FC_SERVER server.xx.com.cn #配置環境變量/tmp/ #拷貝python需要安裝文件 RUN apt-get update && apt-get -y install python3-pip libmysqlclient-dev python3-dev #python3-pip網易源沒有 RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list RUN apt-get update && apt-get install -y nginx redis-server git #下載一些基礎服務 RUN mkdir /root/.pip #home目錄 COPY pip.conf /root/.pip #拷貝更改的源配置文件 RUN pip3 install --upgrade pip RUN pip3 install matplotlib #此處不能放入requirement 必須分別安裝 RUN pip3 install numpy COPY nginx-start.conf /etc/supervisor/conf.d #拷貝nginx配置文件 RUN pip3 install pandas==0.17.1 RUN pip3 install zipline==1.0.2 COPY uwsgi.ini /usr/local/etc/#拷貝uwsgi配置文件 RUN pip3 install uwsgi COPY vue-dist /usr/local/src/dzh/#將打包好的vue項目文件夾拷貝到指定目錄 RUN pip3 install --requirement /tmp/requirements.txt RUN mkdir /usr/local/src/dzh WORKDIR /usr/local/src/dzh #切換到目錄 RUN git clone https://username:[email protected]/xx.git WORKDIR /usr/local/src/dzh/squant_tools RUN python3 setup.py build_ext --inplace#安裝系統 WORKDIR /etc/nginx/sites-enabled/ RUN mv default default.bb #將默認讀取配置文件改名 COPY nginx.conf . WORKDIR /usr/local/src/dzh/simple_login RUN python3 setup.py install COPY squant_tools.conf /etc/supervisor/conf.d CMD supervisord /etc/supervisor/supervisord.conf
3,部分其他文件的配置
uwsgi.ini內容: [uwsgi] http-socket = :8000 plugin = python3 wsgi-file = /usr/local/src/dzh/squant_tools/quant/wsgi.py chdir= /usr/local/src/dzh/squant_tools module = quant.wsgi processes = 4 master=True vacuum=True 使用supervisor啟動以下進程 squant_tools.conf內容: [program:squant_tools] command = uwsgi /usr/local/etc/uwsgi.ini stopsignal=KILL autostart=true autorestart=true stdout_logfile=/usr/local/etc/supervisor_stdout.log stderr_logfile=/usr/local/etc/supervisor_stderr.log redirect_stderr=true nginx-start.conf內容: [program:nginx] command = service nginx start process_name=%(program_name)s numprocs=4 ; 啟動幾個進程 autostart=true ; 隨著supervisord的啟動而啟動 autorestart=true ; 自動重啟。。當然要選上了 startretries=10 ; 啟動失敗時的最多重試次數 stopsignal=KILL ; 用來殺死進程的信號 stopwaitsecs=10 ; 發送SIGKILL前的等待時間 redirect_stderr=true ; 重定向stderr到stdout requirements.txt內容: django mysqlclient psycopg2 cython pymssql celery django-cors-headers click cn-stock-holidays redis zipline_cn_databundle
docker使用筆記