热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何减少针对Python应用程序的此多阶段Docker构建的大小

如何解决《如何减少针对Python应用程序的此多阶段Docker构建的大小》经验,为你挑选了1个好方法。

如何避免在这里使用/root/.cache?不知道我了解多阶段构建如何工作。

# ---- Base python ----
FROM python:2.7-alpine3.7 AS base
# Create app directory
WORKDIR /app

# ---- Dependencies ----
FROM base AS dependencies
COPY requirements.txt ./
RUN apk add --no-cache libgcc git build-base  && \
    pip install -r requirements.txt && \
    apk del git build-base binutils-libs binutils gmp isl libgomp libatomic pkgconf libgcc && \
    apk del mpfr3 mpc1 libstdc++ gcc musl-dev libc-dev g++ make fortify-headers ca-certificates libssh2 && \
    apk del libcurl expat pcre2 git && \
    pip uninstall -y mock PyMySQL coverage pytest pytest-cov pytest-xdist wheel setuptools && \
    rm -rf /usr/share/locale/* && \
    rm -rf /var/cache/debconf/*-old && \
    rm -rf /var/lib/apt/lists/* /var/lib/dpkg   && \
    rm -rf /usr/share/doc/* && \
    rm -rf /usr/share/man/?? && \
    rm -rf /usr/share/man/??_*

# ---- Copy Files/Build ----
FROM dependencies AS build
WORKDIR /app
COPY . /app
COPY --from=dependencies /root/.cache /root/.cache
WORKDIR /app

也许我应该使用virtualenv?



1> Sathyajith B..:

Docker多阶段构建通过创建多个阶段来进行工作,目的是使最终映像具有最少所需的组件

就您而言,您将重新使用初始构建阶段作为最终映像

FROM python:2.7-alpine3.7 AS base
..
FROM base AS dependencies
..
FROM dependencies AS build

但是,您还将删除在依赖项阶段安装的不需要的软件包,从而消除了多阶段映像的优势,因此看不到任何可见的大小变化。

为了进行演示,由于您尚未发布requirements.txt文件,因此我假设它将安装flask

? cat requirements.txt
flask==1.0.2

考虑您的Dockerfile,但是,删除删除软件包的命令

# ---- Base python ----
FROM python:2.7-alpine3.7 AS base
# Create app directory
WORKDIR /app

# ---- Dependencies ----
FROM base AS dependencies
COPY requirements.txt ./
RUN apk add --no-cache libgcc git build-base  && \
    pip install -r requirements.txt

# ---- Copy Files/Build ----
FROM dependencies AS build
WORKDIR /app
COPY . /app
COPY --from=dependencies /root/.cache /root/.cache
WORKDIR /app

构建图像:

docker build -t so:51678830 .
Sending build context to Docker daemon  3.072kB
Step 1/10 : FROM python:2.7-alpine3.7 AS base
 ---> b1d3c201a89a
Step 2/10 : WORKDIR /app
 ---> Using cache
 ---> 675f27f73cf9
Step 3/10 : FROM base AS dependencies
 ---> 675f27f73cf9
Step 4/10 : COPY requirements.txt ./
 ---> Using cache
 ---> 288a87ba0ecf
Step 5/10 : RUN apk add --no-cache libgcc git build-base  &&         pip install -r requirements.txt
 ---> Running in 6520cfe93603
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/23) Installing binutils-libs (2.30-r1)
(2/23) Installing binutils (2.30-r1)
(3/23) Installing gmp (6.1.2-r1)
(4/23) Installing isl (0.18-r0)
(5/23) Installing libgomp (6.4.0-r5)
(6/23) Installing libatomic (6.4.0-r5)
(7/23) Installing pkgconf (1.3.10-r0)
(8/23) Installing libgcc (6.4.0-r5)
(9/23) Installing mpfr3 (3.1.5-r1)
(10/23) Installing mpc1 (1.0.3-r1)
(11/23) Installing libstdc++ (6.4.0-r5)
(12/23) Installing gcc (6.4.0-r5)
(13/23) Installing musl-dev (1.1.18-r3)
(14/23) Installing libc-dev (0.7.1-r0)
(15/23) Installing g++ (6.4.0-r5)
(16/23) Installing make (4.2.1-r0)
(17/23) Installing fortify-headers (0.9-r0)
(18/23) Installing build-base (0.5-r0)
(19/23) Installing libssh2 (1.8.0-r2)
(20/23) Installing libcurl (7.61.0-r0)
(21/23) Installing expat (2.2.5-r0)
(22/23) Installing pcre2 (10.30-r0)
(23/23) Installing git (2.15.2-r0)
Executing busybox-1.27.2-r11.trigger
OK: 186 MiB in 53 packages
Collecting flask==1.0.2 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
Collecting Werkzeug>=0.14 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
Collecting click>=5.1 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl (71kB)
Collecting itsdangerous>=0.24 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB)
Collecting Jinja2>=2.10 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous: started
  Running setup.py bdist_wheel for itsdangerous: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
  Running setup.py bdist_wheel for MarkupSafe: started
  Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
Successfully built itsdangerous MarkupSafe
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
Removing intermediate container 6520cfe93603
 ---> 6d73b486a703
Step 6/10 : FROM dependencies AS build
 ---> 6d73b486a703
Step 7/10 : WORKDIR /app
 ---> Running in 0ed8fa7f13e7
Removing intermediate container 0ed8fa7f13e7
 ---> e61cf72b31ae
Step 8/10 : COPY . /app
 ---> f6c7a4d3d8df
Step 9/10 : COPY --from=dependencies /root/.cache /root/.cache
 ---> 2c15e7080c91
Step 10/10 : WORKDIR /app
 ---> Running in 717bd7cf7b1d
Removing intermediate container 717bd7cf7b1d
 ---> cfe7ee0c5880
Successfully built cfe7ee0c5880
Successfully tagged so:51678830

检查图像的大小:

docker images

| REPOSITORY                    TAG                 IMAGE ID            CREATED              SIZE  |
|--------------------------------------------------------------------------------------------------|
| so                            51678830            4477dac77289        About a minute ago   234MB |

让我们修改Dockerfile,使其使用“基本”作为最终映像,但从依赖项复制缓存的pip wheel

# ---- Base python ----
FROM python:2.7-alpine3.7 AS base
# Create app directory
WORKDIR /app

# ---- Dependencies ----
FROM base AS dependencies
COPY requirements.txt ./
RUN apk add --no-cache libgcc git build-base  && \
    pip install -r requirements.txt

# ---- Copy Files/Build ----
FROM base
WORKDIR /app
COPY . /app
COPY --from=dependencies /root/.cache /root/.cache
WORKDIR /app

建立形象

docker build -t so:51678830 .
Sending build context to Docker daemon  3.072kB
Step 1/10 : FROM python:2.7-alpine3.7 AS base
 ---> b1d3c201a89a
Step 2/10 : WORKDIR /app
 ---> Running in aca871ed01e3
Removing intermediate container aca871ed01e3
 ---> 89d357832427
Step 3/10 : FROM base AS dependencies
 ---> 89d357832427
Step 4/10 : COPY requirements.txt ./
 ---> 6ecbfe862e27
Step 5/10 : RUN apk add --no-cache libgcc git build-base  &&         pip install -r requirements.txt
 ---> Running in 465256e75563
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/23) Installing binutils-libs (2.30-r1)
(2/23) Installing binutils (2.30-r1)
(3/23) Installing gmp (6.1.2-r1)
(4/23) Installing isl (0.18-r0)
(5/23) Installing libgomp (6.4.0-r5)
(6/23) Installing libatomic (6.4.0-r5)
(7/23) Installing pkgconf (1.3.10-r0)
(8/23) Installing libgcc (6.4.0-r5)
(9/23) Installing mpfr3 (3.1.5-r1)
(10/23) Installing mpc1 (1.0.3-r1)
(11/23) Installing libstdc++ (6.4.0-r5)
(12/23) Installing gcc (6.4.0-r5)
(13/23) Installing musl-dev (1.1.18-r3)
(14/23) Installing libc-dev (0.7.1-r0)
(15/23) Installing g++ (6.4.0-r5)
(16/23) Installing make (4.2.1-r0)
(17/23) Installing fortify-headers (0.9-r0)
(18/23) Installing build-base (0.5-r0)
(19/23) Installing libssh2 (1.8.0-r2)
(20/23) Installing libcurl (7.61.0-r0)
(21/23) Installing expat (2.2.5-r0)
(22/23) Installing pcre2 (10.30-r0)
(23/23) Installing git (2.15.2-r0)
Executing busybox-1.27.2-r11.trigger
OK: 186 MiB in 53 packages
Collecting flask==1.0.2 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
Collecting Werkzeug>=0.14 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
Collecting click>=5.1 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl (71kB)
Collecting itsdangerous>=0.24 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB)
Collecting Jinja2>=2.10 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous: started
  Running setup.py bdist_wheel for itsdangerous: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
  Running setup.py bdist_wheel for MarkupSafe: started
  Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
Successfully built itsdangerous MarkupSafe
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
Removing intermediate container 465256e75563
 ---> d9a23965de75
Step 6/10 : FROM base
 ---> 89d357832427
Step 7/10 : WORKDIR /app
 ---> Running in bb975f43890d
Removing intermediate container bb975f43890d
 ---> ba0d78774039
Step 8/10 : COPY . /app
 ---> 3510860b3538
Step 9/10 : COPY --from=dependencies /root/.cache /root/.cache
 ---> 812c65bd156b
Step 10/10 : WORKDIR /app
 ---> Running in 4191ef84468e
Removing intermediate container 4191ef84468e
 ---> 236d8ee0bea4
Successfully built 236d8ee0bea4
Successfully tagged so:51678830

这样,我们得到的图像大小为60.5MB

码头工人图像

| REPOSITORY                    TAG                 IMAGE ID            CREATED              SIZE   |
|---------------------------------------------------------------------------------------------------|
| so                            51678830            e53282dc4fc7        2 seconds ago        60.5MB |

但是,我们仅将缓存文件复制到了最终映像上,我们仍然需要安装它,然后/root/.cache才能将其删除。Dockerfile现在看起来像:

# ---- Base python ----
FROM python:2.7-alpine3.7 AS base
# Create app directory
WORKDIR /app

# ---- Dependencies ----
FROM base AS dependencies
COPY requirements.txt ./
RUN apk add --no-cache libgcc git build-base  && \
    pip install -r requirements.txt

# ---- Copy Files/Build ----
FROM base
WORKDIR /app
COPY . /app
COPY --from=dependencies /root/.cache /root/.cache
COPY requirements.txt ./
RUN pip install -r requirements.txt && rm -rf /root/.cache

建立图像:

docker build -t so:51678830 .


Sending build context to Docker daemon  3.584kB
Step 1/11 : FROM python:2.7-alpine3.7 AS base
 ---> b1d3c201a89a
Step 2/11 : WORKDIR /app
 ---> Running in 8471e5fe8fac
Removing intermediate container 8471e5fe8fac
 ---> 646de3787bbc
Step 3/11 : FROM base AS dependencies
 ---> 646de3787bbc
Step 4/11 : COPY requirements.txt ./
 ---> 4b6c6690ddf7
Step 5/11 : RUN apk add --no-cache libgcc git build-base  &&         pip install -r requirements.txt
 ---> Running in aaa83a183ead
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/23) Installing binutils-libs (2.30-r1)
(2/23) Installing binutils (2.30-r1)
(3/23) Installing gmp (6.1.2-r1)
(4/23) Installing isl (0.18-r0)
(5/23) Installing libgomp (6.4.0-r5)
(6/23) Installing libatomic (6.4.0-r5)
(7/23) Installing pkgconf (1.3.10-r0)
(8/23) Installing libgcc (6.4.0-r5)
(9/23) Installing mpfr3 (3.1.5-r1)
(10/23) Installing mpc1 (1.0.3-r1)
(11/23) Installing libstdc++ (6.4.0-r5)
(12/23) Installing gcc (6.4.0-r5)
(13/23) Installing musl-dev (1.1.18-r3)
(14/23) Installing libc-dev (0.7.1-r0)
(15/23) Installing g++ (6.4.0-r5)
(16/23) Installing make (4.2.1-r0)
(17/23) Installing fortify-headers (0.9-r0)
(18/23) Installing build-base (0.5-r0)
(19/23) Installing libssh2 (1.8.0-r2)
(20/23) Installing libcurl (7.61.0-r0)
(21/23) Installing expat (2.2.5-r0)
(22/23) Installing pcre2 (10.30-r0)
(23/23) Installing git (2.15.2-r0)
Executing busybox-1.27.2-r11.trigger
OK: 186 MiB in 53 packages
Collecting flask==1.0.2 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
Collecting Werkzeug>=0.14 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
Collecting click>=5.1 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl (71kB)
Collecting itsdangerous>=0.24 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB)
Collecting Jinja2>=2.10 (from flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask==1.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous: started
  Running setup.py bdist_wheel for itsdangerous: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
  Running setup.py bdist_wheel for MarkupSafe: started
  Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
Successfully built itsdangerous MarkupSafe
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
Removing intermediate container aaa83a183ead
 ---> eca67b911ca4
Step 6/11 : FROM base
 ---> 646de3787bbc
Step 7/11 : WORKDIR /app
 ---> Running in 0b81da90cc35
Removing intermediate container 0b81da90cc35
 ---> 17489d37a114
Step 8/11 : COPY . /app
 ---> 1f12ed2b9456
Step 9/11 : COPY --from=dependencies /root/.cache /root/.cache
 ---> 850bd5d693e3
Step 10/11 : COPY requirements.txt ./
 ---> b508d7762e8e
Step 11/11 : RUN pip install -r requirements.txt && rm -rf /root/.cache
 ---> Running in 125afe6f16b0
Collecting flask==1.0.2 (from -r requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
Collecting Werkzeug>=0.14 (from flask==1.0.2->-r requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
Collecting click>=5.1 (from flask==1.0.2->-r requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting itsdangerous>=0.24 (from flask==1.0.2->-r requirements.txt (line 1))
Collecting Jinja2>=2.10 (from flask==1.0.2->-r requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask==1.0.2->-r requirements.txt (line 1))
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
Removing intermediate container 125afe6f16b0
 ---> d122f42fcb72
Successfully built d122f42fcb72
Successfully tagged so:51678830

最终图像为70MB

| REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE   |
|--------------------------------------------------------------------------------------------------|
| so                            51678830            d122f42fcb72        4 seconds ago       69.6MB |

希望事情说清楚


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Spark Streaming和Kafka整合之路(最新版本)
    2019独角兽企业重金招聘Python工程师标准最近完成了SparkStreaming和Kafka的整合工作,耗时虽然不长,但是当中还是遇到了不少 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • centos 编译安装 php 5.5,CentOS 5.5上编译安装 PHP 5.3.6
    编译并安装#make&&makeinstall安装结果摘要,里面有几个主要的安装路径变量libtool:install:warning:remembertorunli ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 目前Miniconda3的主要版本已经不支持python3.6,以Windows为例,在官网Miniconda—Condadocumentation中只有python3.7 ... [详细]
author-avatar
yangcong
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有