Dockerfile編寫、容器部署項目nginx負載均衡、私有倉庫搭建
Dockerfile編寫、容器部署項目nginx負載均衡、私有倉庫搭建
1. Dockerfile編寫
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像,用來構建鏡像的
1. 構建鏡像的三種方式:
1. 從遠程拉取,docker pull
2. 通過容器打包成鏡像,壓縮后可以拿到任意位置
3. 通過 dockerfile 構建鏡像
2. dockerfile 構建鏡像的作用:
1、對于開發人員:可以為開發團隊提供一個完全一致的開發環境;
2、對于測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了;
3、對于運維人員:在部署時,可以實現應用的無縫移植。
3. 常用命令
| 命令 | 作用 |
|---|---|
| FROM image_name:tag | 定義了使用哪個基礎鏡像啟動構建的 |
| MAINTAINER user_name | 聲明鏡像的創建者 |
| ENV key value | 設置環境變量 (可以寫多條) |
| RUN command | 是Dockerfile的核心部分(可以寫多條)寫要執行的命令,如:RUN pip3 install django==1.11.9 |
| ADD source_dir/file dest_dir/file | 將宿主機的文件復制到容器內,如果是一個壓縮文件,將會在復制后自動解壓 |
| COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有壓縮文件并不能解壓 |
| WORKDIR path_dir | 設置工作目錄(如果不寫默認是docker exec進去后當前的路徑下) |
| CMD | [" "]容器一運行就會執行命令,CMD ["/bin/bash"] |
ADD與COPY的區別:ADD會自動解壓,COPY不會自動解壓
2. 容器部署項目nginx做負載均衡
Dockerfile基于python3.6搭建環境:Django,uwsgi
requirement.txt文件中寫所有的依賴
1. 在項目目錄下寫dockerfile文件
EXPOSE 8080 # 對外暴露的哪個端口
VOLUME ["/home"] # 映射到容器中的home路徑
FROM python:3.6 MAINTAINER Mr.shen ADD ./requirement.txt /home/ RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/ WORKDIR /home/django_test EXPOSE 8080 VOLUME ["/home"] CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"]
2. 在項目路徑下寫一個 uwsgi.ini 文件
[uwsgi] #也可以使用http http=0.0.0.0:8080 #配置項目路徑,項目的所在目錄 chdir=/home/django_test #配置wsgi接口模塊文件路徑 wsgi-file=django_test/wsgi.py #配置啟動的進程數 processes=4 #配置每個進程的線程數 threads=2 #配置啟動管理主進程 master=True #配置存放主進程的進程號文件 pidfile=uwsgi.pid
3. 傳到Git上
服務器從Git上拉下來,解壓
4. 基于dockerfile構建鏡像(進入上傳的Django_test路徑下)
docker build -t='django1.11.9' .
5. 運行Django+uwsgi的容器
docker run -di --name=mydjango1 -v /home/myproject:/home -p 8080:8080 django1.11.9
6. 基于nginx鏡像跑起來一個容器,做目錄映射(在宿主機修改nginx配置文件)
mkdir -p /home/nginx/conf /home/nginx/html /home/nginx/logs
vim /home/nginx/conf/nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream node { server 101.133.225.166:8080; server 101.133.225.166:8088; } server { listen 80; # 宿主機暴露的端口 server_name localhost; location / { #負載均衡配置 proxy_pass http://node; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
進入容器并運行容器
docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx
訪問http://101.133.225.166/, 會打到不通的docker容器內,即便有一個服務停了,也不會影響項目的運行
不停服更新,停一半,更新,啟動--在把另一半更新了,因為你django docker容器做了目錄映射---》只需要修改代碼,重啟容器即可(git pull 即可)
3. 私有倉庫搭建
公司內部用的鏡像,docker hub上沒有,私服(私有服務器)
# 操作步驟 # 1 拉一個registry鏡像 (本質是個什么?web服務(想像成 web項目在里面)) docker pull registry # 2 跑起容器來 docker run -di --name=registry -p 5000:5000 registry # 3 瀏覽器輸入地址(目前是空的) http://宿主機ip:5000/v2/_catalog # 4 vi /etc/docker/daemon.json (文件如果沒有就創建出來),以后docker pull 先從自己配置的這個拉,再去遠程拉 {"insecure-registries":["宿主機ip:5000"]} # 5 重啟docker 服務 systemctl restart docker # 6 啟動容器 docker restart registry # 7 標記本地的鏡像(可能是dockerfile構建的,也可能是通過容器打包成的) docker tag django1.11.9 宿主機ip:5000/mydjango1.11.9 # docker tag redis 宿主機ip:5000/myredis # 8 把標記好的本地鏡像,傳到私服 docker push 宿主機ip:5000/django1.11.9 #docker push 宿主機ip:5000/myredis # 9 再訪問這個地址http://宿主機:5000/v2/_catalog 就能看到你上傳的鏡像再里面了 # 10 只要在etc/docker/daemon.json,配置了這個{"insecure-registries":["搭建私服宿主機ip:5000"]} 的所有小伙伴,都可以拉取我上傳的鏡像 別人可以使用 docker pull 我搭建私服宿主機ip:5000/myredis

浙公網安備 33010602011771號