當前位置:首頁 » 編程語言 » python部署docker

python部署docker

發布時間: 2022-06-28 15:15:48

1. 如何運用docker配合python開發環境實例

由於開發一個Python程序時需要依賴大量的三方庫包,且python2和3本身就有互不兼容的地方,我們往往需要一個隔離的環境,來避免版本影響造成的bug。

傳統的做法大多數人可能會選擇virtualenv來隔離,但是它有很多明顯的缺點:

  • 無法提供完全的隔離

  • 如果不想在正式環境中使用,它就會造成差異

  • 而隨著容器技術的日漸成熟和普及,Docker無疑成為解決這個問題的最優解

    本文將主要介紹docker和flask的配合開發

    步驟:

    1.安裝Docker(這里不詳細介紹)

  • # 參考命令

  • sudo wget -qO- httpr.com/ | sh

  • 2.應用目錄結構

  • ├──fanxiangce

  • _docker

  • ├── Dockerfile

  • ├── Readme.md

  • └─fanxiangce

  • └──app

  • ├── manage.py

  • └── requirements

  • ├── common.txt

  • 3.編寫Dockerfile(詳細命令解釋可以參考hocker.com/engine/reference/builder/#environment-replacement)

  • ##########################################################

  • # Dockerfile to run a flask-based web application# Based on an centos:7 image

  • ##########################################################

  • # Set the base image to use to centos

  • FROM centos:7


  • # Set the file maintainer

  • MAINTAINER jasonwang,wjs7740@163.com


  • # Set env varibles used in this Dockerfile (add a unique prefix, such as DOCKYARD)

  • # Local directory with project source

  • ENV DOCKYARD_SRC=fanxiangce


  • # Directory in Container for all project files

  • ENV DOCKYARD_SRCHOME=/opt

  • # Directory in container for project source files

  • ENV DOCKYARD_SRCPROJ=/opt/fanxiangce


  • # Update the defualt application repository source list

  • RUN yum -y install epel-release

  • RUN yum -y install python-pip

  • RUN yum clean all


  • # Copy application source code to SRCDIR

  • COPY $DOCKYARD_SRC $DOCKYARD_SRCPROJ


  • # Create application subdirectories

  • WORKDIR $DOCKYARD_SRCPROJ

  • RUN mkdir log

  • VOLUME ['$DOCKYARD_SRCPROJ/log/']


  • # Install Python dependencies

  • RUN pip install --upgrade pip

  • RUN pip install -r $DOCKYARD_SRCPROJ/requirements/common.txt


  • # Port to expose

  • EXPOSE 8000


  • # Copy entrypoint script into the image

  • WORKDIR $DOCKYARD_SRCPROJ


  • 4. build鏡像

  • # 在Dockerfile同級目錄下

  • sudo docker build -t jason/webdemo .

  • 成功後顯示Successfully,同時返回鏡像ID,如圖:

    8.後續

    如果容器關閉後需要再次進入,可以用如下命令

  • # 查看當前容器

  • sudo docker ps -a

  • # 啟動容器

  • docker start webdemo

  • # 進入容器

  • docker attach webdemo

  • 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

2. 寫python的至今沒搞懂的微服務是啥,請大佬們不吝賜教!

將模塊功能拆分成多個項目,獨立運行,分流數據壓力,宕機危險,但是每個項目之間又可以通信,比如用戶項目可以查詢訂單項目中的數據。大概就是這么意思,然後用docker把環境支起來大項目會用多個伺服器多個docker進行部署

3. 怎樣在Python中操作Docker容器

Docker容器運行後,如何進入容器進行操作呢?起初我是用SSH。如果只啟動一個容器,用SSH還能應付,只需要將容器的22埠映射到本機的一個埠即可。當我啟動了五個容器後,每個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH埠,實在是麻煩。 我發現很多Docker鏡像都是沒有安裝SSHD服務的,難道有其他方法進入Docker容器? 有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。 nsenter 可以訪問另一個進程的名字空間。 為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。 PID=$(docker inspect –format 「{{ .State.Pid }}」 <container>) //將<container>換成你的容器id 通過這個 PID,就可以連接到這個容器: $ nsenter –target $PID –mount –uts –ipc –net –pid 更簡單的,建議大家下載 .bashrc_docker,並將內容放到 .bashrc 中。

4. 如何在Python中使用ZeroMQ和Docker構建微服務架構

當想讓一個容器做兩件事情,或者使一個Docker鏡像包含來自兩個不同鏡像的依賴庫時,就需要知道每個鏡像的Dockerfile。本文介紹了如何通過docker history命令來對Docker鏡像進行反向工程,得到它們的Dockerfile,並組織到一個Dockerfile里然後build,從而實現想做的事情。

常言道,「不要重復發明輪子!」

在使用Docker時,構建自己的鏡像之前,最好在Docker Hub尋找一些可以直接使用的鏡像做練習。把軟體架構分布到一系列容器中,每一個容器只做一件事情,這樣的效果非常好。構建分布式應用的最好的基石是使用來自Docker Hub的官方鏡像,因為可以信任它們的質量。

在某些情況下,可能想讓一個容器做兩件不同的事情。而在另外一些情況下,可能想讓一個Docker鏡像包含來自兩個不同鏡像的依賴庫。如果有每個鏡像的Dockerfile,這是非常簡單的。將它們組織到一個Dockerfile里然後build就行。

然而,大多數時間都在使用Docker Hub上准備好的鏡像,不會有它們的源Dockerfile。我花時間找一個可以合並(或flatten)兩個不同Docker鏡像的工具,當然沒有它們的Dockerfile。也就是說在找一個能做下面這件事的東西:
image 1 --
\
---> merged_image_12
/
image 2 --

此前在GitHub上有兩個相關的討論(1、2),盡管它們都被關閉了。

這可能嗎?
那麼,是否存在工具能夠像這樣做嗎:docker merge image2 image2 merged_image?

沒有!
你甚至不可以用下面的方式來構建Dockerfile:
FROM image1
FROM image2

簡而言之,在一個Dockerfile里不能有多個基礎鏡像。

但是我需要這個功能!
唯一的解決辦法是取得這些鏡像的Dockerfile,然後把它們組織到一個文件中,再進行構建。那麼,我能在Docker Hub上獲得一個鏡像的Dockerfile嗎? 幸運的是可以。它不能離線獲取(譯註:原文是online,但顯然online時對於來自GitHub的自動構建鏡像是可以直接獲取的),但是你可以使用docker history命令,通過反向工程獲取。

怎麼來使用?
在你的機器上使用docker pull從Docker Hub下載鏡像。
docker pull image1
docker pull image2

然後使用docker history來取得構建這兩個容器時運行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile

接下來打開這兩個文件,你可以看到每個鏡像的命令堆棧。這是因為Docker鏡像通過層(閱讀更多)的方式來構建。即你在Dockerfile中鍵入的每一個命令所構建的新鏡像,都是在之前的命令產生的鏡像之上。所以你可以對鏡像進行逆向工程。

限制
不能對鏡像進行反向工程的唯一場景,是鏡像的維護者在他的Dockerfile中使用了ADD或COPY命令。你會看到這樣一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
這是因為不知道維護者在他自己的機器上,包括鏡像里使用了什麼本地文件。

5. 如何在python腳本里調docker命令

在搭建開發環境時,我們都希望搭建過程能夠簡單,並且一勞永逸,其他的同事可以復用已經搭建好的開發環境以節省開發時間。而在搭建開發環境時,我們經常會被復雜的配置以及重復的下載安裝所困擾。在Docker技術未出現之前,我們可以使用Pupet、Chef、Ansible等配置管理工具把復雜的配置管理起來,這樣的管理配置技術仍然是目前比較流行的方式之一。配置管理工具使用的都是自己的DSL語法定義,考慮到環境的復雜性,配置一套通用的開發環境需要針對各個系統定製,對於大部分開發環境這種維護成本仍然是很高的。Docker技術出現之後,系統的依賴問題得到了徹底的解決,我們可以通過鏡像的方式簡化環境的安裝。結合Docker的開發部署工具Fig,我們可以使用fig.yml文件來定義所有的環境,一次定義,多處使用,簡單而且高效。

6. 如何製作 Python 的 Docker 鏡像

作基礎鏡像
選擇 Ubuntu 官方的 14.04 版本為我們依賴的系統鏡像。
FROM ubuntu:trusty

因所有官方鏡像均位於境外伺服器,為了確保所有示例能正常運行,可以使用與官方鏡像保持同步的 DaoCloud 境內鏡像:
dockerfile
FROM cloud.io/ubuntu:trusty

設置鏡像的維護者,相當於鏡像的作者或發行方。
MAINTAINER Captain Dao <support@cloud.io>

用 RUN 命令調用 apt-get 包管理器安裝 Python 環境所依賴的程序包。
安裝依賴包相對比較固定,因此該動作應該盡量提前,這樣做有助於提高鏡像層的復用率。
安裝完依賴後打掃衛生可以顯著的減少鏡像大小。
RUN apt-get update && \
apt-get install -y python \
python-dev \
python-pip && \
rm -rf /var/lib/apt/lists/*

7. 如何構建基於docker的開發環境

一、基本思路

1. 創建一個用於開發Django App的目錄

mkdir django-example && cd django-example

2. 構建基本開發環境

touch Dockerfile
touch pip.conf requirements.txt

pip.conf文件填入以下內容,以便一會用pip安裝Python 模塊時使用阿里雲鏡像加速:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

requirements.txt文件中填入要安裝的Python 模塊:

django

編寫構建開發環境的Dockerfile文件,填入以下內容:

# MAINTAINER Gevin <flyhigher139@gmail.com>
# DOCKER-VERSION 1.12.0
#
# Dockerizing Python: Dockerfile for building python applications


FROM python:2.7.12
MAINTAINER Gevin <flyhigher139@gmail.com>

WORKDIR /usr/src/app

# 使用阿里雲的pip鏡像
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r /usr/src/app/requirements.txt

EXPOSE 8000

CMD ["bash"]

然後執行下面命令構建鏡像:

docker build -t gevin/django-example:0.1 .

構建成功後,執行docker images命令,可以查看到當前構建好的image

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
gevin/django-example 0.1 1855fc3c8062 12 hours ago 698.9 MB

3. 使用構建的image拉起開發環境

執行下面命令,可以以前台形式拉起django-example鏡像的一個container:

docker run -it --rm -v $(pwd):/usr/src/app gevin/django-example:0.1

上面命令使用了data volume,把當前目錄掛載到container中的工作目錄下,這樣當前目錄下的所有文件都會映射到container的工作目錄下,在工作目錄下的所有改動,也都會保存到宿主機的當前目錄下。

4. 創建django項目

上一步的命令創建了一個安裝了django的互動式的container,直接在該container中執行創建django項目的命令即可:

root@7c91f460599f:/usr/src/app# django-admin startproject dj_example

上述命令,在container中基於django的命令創建了一個django項目,由於上一步操作時把宿主機的當前目錄掛載到container的工作目錄下,因此,剛剛在container中創建的django項目,在宿主機上也能看到。

container:

root@7c91f460599f:/usr/src/app# lsDockerfile dj_example pip.conf requirements.txt

宿主機:

django-example ls
Dockerfile dj_example pip.conf requirements.txt

5. 啟動django項目

docker run -it --rm -p 8000:8000 -v $(pwd):/usr/src/app gevin/django-example:0.1 python dj_example/manage.py runserver 0.0.0.0:8000

二、Docker-compose與Django環境的結合

每次使用上面章節中介紹的冗長命令來使用django環境非常麻煩,docker-compose可以簡化操作。

首先在當前目錄下創建docker-compose.yml文件:

➜ django-example touch docker-compose.yml

然後在該文件中寫入如下內容:

version: '2'
services:
django-example:
image: gevin/django-example:0.1
volumes:
- ./dj_example:/usr/src/app
ports:
- 8000:8000
command: python manage.py runserver 0.0.0.0:8000

執行下面命令即可拉起django服務:

➜ django-example docker-compose up# Starting djangoexample_django-example_1# Attaching to djangoexample_django-example_1

在瀏覽器中訪問http://localhost:8000,即可看到默認的django頁面

註:

上面的docker-compose文件,把./dj_example目錄掛載到/usr/src/app,免去執行django命令時,需要對應到下級目錄的麻煩,但這樣隱藏了原來container中的requirements.txt文件,需要注意。

基於docker-compose 執行django 命令

使用docker-compose 的 run命令,可以在容器內執行相應操作,如:

對django服務的資料庫做migrate操作:

docker-compose run django-example python manage.py migrate

創建超級用戶:

docker-compose run django-example python manage.py createsuperuser# Username (leave blank to use 'root'): gevin# Email address:# Password:# Password (again):# Superuser created successfully.

創建成功後,訪問http://localhost:8000/admin,即可使用剛創建的用戶(即gevin),登錄資料庫管理頁面

由於使用了數據卷,保存在sqlite資料庫中的數據會一直有效。

三、簡化方案

上面方案已經成功構建了django 環境,並應用於開發。上面的方案主要是為了闡述實現思路,在實際操作起來至少有兩個麻煩:(1)需要進入容器裡面創建django項目;(2)由於django項目是建立在當前目錄的子目錄下,使用docker-compose 時為了命令簡單通用,更換了數據卷。

在實踐中,利用docker-compose的run命令,沒必要進入容器創建django項目;只要把django項目建立在當前目錄下,也沒必要更換數據卷了。

因此,可以把上面的方案再理一下,按下面步驟構建開發環境,並應用到開發中去。

Outline:

  • 創建Dockerfile文件

  • 構建鏡像

  • 創建docker-compose文件

  • 創建項目

  • 拉起項目

  • 1. 創建Dockerfile文件

    對Python開發環境而言,最好再創建pip.conf和requirements.txt文件,以便方便安裝項目必須的Python依賴,其他語言的開發環境就具體情況而定。

    以Python為例,Dockerfile 內容如下:

  • # MAINTAINER Gevin <flyhigher139@gmail.com>

  • # DOCKER-VERSION 1.12.0

  • #

  • # Dockerizing Python: Dockerfile for building python applications



  • FROM python:2.7.12

  • MAINTAINER Gevin <flyhigher139@gmail.com>


  • WORKDIR /usr/src/app


  • # 使用阿里雲的pip鏡像

  • COPY pip.conf /root/.pip/pip.conf

  • COPY requirements.txt /usr/src/app/requirements.txt

  • RUN pip install -r /usr/src/app/requirements.txt


  • EXPOSE 8000


  • CMD ["bash"]

  • 2. 構建鏡像

  • docker build -t gevin/django-example:0.1 .

  • 3. 創建docker-compose文件

    docker-compose文件內容如下:

  • version: '2'

  • services:

  • django-example:

  • image: gevin/django-example:0.1

  • volumes:

  • - .:/usr/src/app

  • ports:

  • - 8000:8000

  • command: python manage.py runserver 0.0.0.0:8000

  • 4. 創建項目

  • docker-compose run django-example django-admin startproject dj_project .

  • 果然需要migrate資料庫,創建超級用戶等,可以在這里一並創建,也可以在後面的開發中再創建:

  • docker-compose run django-example python manage.py migrate


  • docker-compose run django-example python manage.py createsuperuser

  • 5. 拉起項目

  • docker-compose up

  • 四、其他

    Gevin認為,雖然基於docker可以構建開發環境,但還是vagrant用起來更舒服,docker更加適合做CI,測試和部署。

    實際工作中如何使用docker,就仁者見仁,智者見智了。



  • 作者:Gevin

  • 鏈接:http://www.jianshu.com/p/29c422ae7c58

  • 來源:簡書

  • 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

8. 如何在docker上運行python工程

Docker容器運行後,如何進入容器進行操作呢?起初我是用SSH。如果只啟動一個容器,用SSH還能應付,只需要將容器的22埠映射到本機的一個埠即可。當我啟動了五個容器後,每個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH埠,...

9. 如何配置docker 部署到python

安裝Docker 藉助apt-get命令,安裝Docker是件輕而易舉的事。 $ sudo apt-get install docker.io 為了允許非根用戶也可以運行Docker,將你自己添加到docker群組。下面這個命令會允許當前用戶運行Docker,無需根用戶許可權。

熱點內容
屏幕演算法研究 發布:2025-03-17 01:02:38 瀏覽:962
伺服器08系統怎麼切換界面 發布:2025-03-17 01:02:34 瀏覽:420
超市的職位配置有哪些 發布:2025-03-17 01:01:05 瀏覽:433
貪心演算法c語言 發布:2025-03-17 00:57:41 瀏覽:847
什麼手機的游戲配置最好 發布:2025-03-17 00:52:58 瀏覽:261
區域網內如何搭建資料庫伺服器 發布:2025-03-17 00:45:04 瀏覽:31
c語言求正整數的位數 發布:2025-03-17 00:38:06 瀏覽:746
動態窗演算法 發布:2025-03-17 00:25:25 瀏覽:345
怎麼找回k寶密碼 發布:2025-03-17 00:17:23 瀏覽:246
方舟有電腦如何做伺服器 發布:2025-03-17 00:02:08 瀏覽:728