Docker生產實踐(六)
映象構建思路
思路:分層設計
最底層:系統層,構建自己適用的不同作業系統映象;
中間層:根據執行環境,如php、java、python等,構建業務基礎執行環境層映象;
最上層:根據具體的業務模組,構建應用服務層映象。
目錄構建樹結構
案例1:centos 7系統映象構建
1 2 3 4 5 | cd /root mkdir -p /root/docker/system/centos cd /root/docker/system/centos wget -O /etc/yum .repos.d /epel .repo http: //mirrors .aliyun.com /repo/epel-7 .repo # 下載阿里RHEL 7 epel源 cp /etc/yum .repos.d /epel .repo epel.repo |
建立映象檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | vim Dockerfile # This Dockerfile # Base image FROM centos # Who MAINTAINER shhnwangjian xxx@163.com # EPEL ADD epel.repo /etc/yum .repos.d/ # Base pkg RUN yum install -y wget supervisor git tree net-tools sudo psmisc mysql-devel && yum clean all |
構建映象
1 | docker build -t shhnwangjian /centos :base . |
案例2:基於案例1的centos系統映象,構建python執行環境映象
1 2 | mkdir -p /root/docker/runtime/python cd /root/docker/runtime/python |
建立映象檔案
1 2 3 4 5 6 7 8 9 10 11 12 | vim Dockerfile # Base image FROM shhnwangjian /centos :base # Who MAINTAINER shhnwangjian xxx@163.com # Python env RUN yum install -y python-devel python-pip supervisor # Upgrade pip RUN pip install --upgrade pip |
構建映象
1 | docker build -t shhnwangjian /python . |
案例3:構建帶SSH功能的centos 7系統映象
1 2 3 4 | mkdir -p /root/docker/system/centos-ssh cd /root/docker/system/centos-ssh wget -O /etc/yum .repos.d /epel .repo http: //mirrors .aliyun.com /repo/epel-7 .repo # 下載阿里RHEL 7 epel源 cp /etc/yum .repos.d /epel .repo epel.repo |
建立映象檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Docker for CentOS # Base image FROM centos # Who MAINTAINER shhnwangjian xxx@163.com # EPEL ADD epel.repo /etc/yum .repos.d/ # Base pkg RUN yum install -y openssh-clients openssl-devel openssh-server wget supervisor git tree net-tools sudo psmisc mysql-devel && yum clean all # For SSHD RUN ssh -keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh -keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key RUN echo "root:123456" | chpasswd |
構建映象
1 | docker build -t shhnwangjian /centos-ssh . |
案例4:基於案例3的centos-ssh系統映象,構建python-ssh執行環境映象
1 2 | mkdir -p /root/docker/runtime/python-ssh cd /root/docker/runtime/python-ssh |
建立映象檔案
1 2 3 4 5 6 7 8 9 10 11 | # Base image FROM shhnwangjian /centos-ssh # Who MAINTAINER shhnwangjian xxx@163.com # Python env RUN yum install -y python-devel python-pip supervisor # Upgrade pip RUN pip install --upgrade pip |
構建映象
1 | docker build -t shhnwangjian /python-ssh . |
案例5:基於案例4的python-ssh映象,構建app應用服務映象
1 2 | mkdir -p /root/docker/app/web-app cd /root/docker/app/web-app |
應用程式檔案app.py
1 2 3 4 5 6 7 8 9 10 | from flask import Flask app = Flask(__name__) @app.route( '/' ) def hello(): return "Hello World!" if __name__ == "__main__" : app.run(host= "0.0.0.0" , debug=True) |
python依賴包檔案requirements.txt
1 | Flask |
supervisor配置檔案app-supervisor.ini
1 2 3 4 5 6 7 8 9 10 11 12 | [program:web-api] command = /usr/bin/python2 .7 /opt/app .py process_name=%(program_name)s autostart= true user=www stdout_logfile= /tmp/app .log stderr_logfile= /tmp/app .error [program:sshd] command = /usr/sbin/sshd -D process_name=%(program_name)s autostart= true |
在宿主機上安裝supervisor,將預設生成的supervisord.conf放入docker構建環境目錄下
conf
備註:nodaemon=true ,前臺啟動
建立映象檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Base image FROM shhnwangjian /python-ssh # Who MAINTAINER shhnwangjian xxx@163.com # ADD user www RUN useradd -s /sbin/nologin -M www # ADD file ADD app.py /opt/app .py ADD requirements.txt /opt/ ADD supervisord.conf /etc/supervisord .conf ADD app-supervisor.ini /etc/supervisord .d/ # Pip install RUN /usr/bin/pip2 .7 install -r /opt/requirements .txt # Port EXPOSE 22 5000 # CMD CMD [ "/usr/bin/supervisord" , "-c" , "/etc/supervisord.conf" ] |
構建映象
1 | docker build -t shhnwangjian /web-api . |
啟動容器
1 | docker run --name web-api -d -p 88:5000 -p 8022:22 shhnwangjian /web-api |
相關文章
- 使用Docker Compose構建生產應用的最佳實踐 — NickDocker
- Docker進階與實踐之六:容器卷管理Docker
- Kubernetes最佳實踐生產檢查清單
- kubernetes生產實踐之redis-clusterRedis
- 影片生產大映象最佳化實踐
- 基於 Flink 的實時數倉生產實踐
- docker生產——容器通訊Docker
- Docker入門實踐Docker
- OpenHarmony Docker移植實踐Docker
- 生產中的NLP:建立Docker映象Docker
- 一次生產 CPU 100% 排查優化實踐優化
- Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生產實踐MongoDB
- 生產服務GC調優實踐基本流程總結GC
- Flink 引擎在快手的深度優化與生產實踐優化
- Arthas 實踐——生產環境排查 CPU 飈高問題
- 【docker】Docker入門到實踐 筆記Docker筆記
- Docker CheatSheet | Docker 配置與實踐清單Docker
- Docker入門實踐(三)Docker
- Docker入門實踐(四)Docker
- Docker 入門與實踐Docker
- Docker 實踐及命令梳理Docker
- docker-composer使用實踐Docker
- Docker Compose 實踐及梳理Docker
- docker 生產環境基礎應用Docker
- 一次生產 CPU 100% 排查最佳化實踐
- ABP VNext實踐之搭建可用於生產的IdentityServer4IDEServer
- Filebeat 收集K8S 日誌,生產環境實踐K8S
- Dubbo Mesh 在閒魚生產環境中的落地實踐
- Flink MongoDB CDC 在 XTransfer 的生產實踐|Flink CDC 專題MongoDB
- K8s 生產最佳實踐-限制 NameSpace 資源用量K8Snamespace
- SQLServer高可用方案在企業生產環境的實踐SQLServer
- Docker進階與實踐之三:Docker映象Docker
- 【PWA學習與實踐】(9)生產環境中PWA實踐的問題與解決方案
- Docker Swarm 叢集搭建實踐DockerSwarm
- Docker環境部署Prometheus實踐DockerPrometheus
- 使用Portainer部署Docker容器實踐AIDocker
- 羅江宇:Flink Streaming在滴滴的大規模生產實踐
- 再一次生產 CPU 高負載排查實踐負載