1.brat 淘气鬼快速标注工具-0007-容器部署-上
2.Gitblit(开源git仓库)v1.9.1官方版
3.Pythonå¼åè¦ç¨å°å¤å°ç¥è¯ç¹
4.05 Dockerfile编写说明
brat 淘气鬼快速标注工具-0007-容器部署-上
研究一下淘气鬼快速标注工具~
(1)本系列文章
格瑞图:brat 淘气鬼快速标注工具--迷你简介
格瑞图:brat 淘气鬼快速标注工具--特性介绍-上
格瑞图:brat 淘气鬼快速标注工具--特性介绍-下
格瑞图:brat 淘气鬼快速标注工具--安装教程-上
格瑞图:brat 淘气鬼快速标注工具--安装教程-中
格瑞图:brat 淘气鬼快速标注工具--安装教程-下
1、源码容器部署
前面翻译的编译都是官方文档,从这里开始实际操作一下~
搜了一下 hub.docker 用户 cassj 有写好的源码 brat 镜像
Docker Hub - 镜像下载及说明
github.com/cassj/brat-d... - 镜像构建源码
2、镜像仓库描述(1)注意 - NOTE
I am no longer doing anything with brat and am not maintaining this 编译at all.
我不再做任何关于淘气鬼的事情了,并且不再维护这个了。源码
(2)淘气鬼容器 - brat docker
This 编译labview软件源码is a docker container deploying an instance of brat.
这是部署淘气鬼实例的容器镜像。
(3)安装 - Installation
You will need two volumes to pass annotation data and user configuration to the container. Start by creating a named volume for each of them like this:
需要为容器挂载两个卷,源码一个用于标注数据,编译一个用于用户配置。源码可以这样创建命名卷:
The编译brat-data volume should be linked to your annotation data, and the brat-cfg volume should contain a file called users.json. To add multiple users to the server use users.json to list your users and their passwords like so:
b-d 卷应该连接到标注数据,b-c 卷应该包含一个 u.j 配置文件。源码要添加多个用户到服务器,编译需要使用 u.j 文件列出用户和其密码,源码如下:
The编译 data in these directories will persist even after stopping or removing the container. You can then start another brat container as above and you should see the same data. Note that if you are using docker < 1.9.0 named volumes are not available and you'll have to use a data-only container and --volumes-from instead.
这些目录中的数据在容器停止或者删除后仍可以持久化。像上面那样可以新启动一个容器还可以看到同样数据。源码注意如果使用容器 1.9.0 版本,HSL源码下载命名卷将不可用。必须使用仅数据容器和 --v-f 选项。
You can also add data and edit the users from within the container. To add some data directly inside the container do something like:
在容器内部可以添加数据和编辑用户。要在容器内直接添加数据,可以这么做:
Or, if you have data on the host machine, you can check where docker is keeping the named volume with:
或者如果宿主机上有数据,可以使用这个命令检查容器是否保留了命名卷:
and you can just copy the data into there from your host.
然后可以从宿主机拷贝数据到那里。
(4)运行 - Running
To run the container you need to specify a username, password and email address for BRAT as environment variables when you start the container. This user will have editor permissions.
要运行容器需要指定用户、密码和邮件,作为环境变量在启动容器时传递。该用户必须有编辑权限。
3、后记
先翻译一下镜像文件
下篇部署一个容器耍
~
图源~
Gitblit(开源git仓库)v1.9.1官方版
Gitblit是一个开源的纯Java栈,用于管理、查看和服务Git仓库,它主要是查战区源码为那些想要集中管理仓库的小型工作组设计的,GitblitGO是一个基于Jetty的集成式单栈解决方案,你不需要Apachehttpd、Perl、Git或Gitweb。
Gitblit是一个开源的纯Java栈,用于管理、查看和服务Git仓库,它主要是为那些想要集中管理仓库的小型工作组设计的,Gitblit GO是一个基于 Jetty 的集成式单栈解决方案,你不需要 Apache httpd、Perl、Git 或 Gitweb。
软件介绍
战:为了你的Servlet容器
如果你已经有了一个你想使用的servlet容器,就应该下载Gitblit WAR。Jetty 6/7/8和Tomcat 6/7都可以使用。ps源码logo一般来说,任何Servlet 2.5或Servlet 3.0的容器都可以使用。
你决定如何使用 Gitblit
Gitblit可以作为一个没有管理控制或用户账户的傻瓜仓库查看器。
Gitblit 可以作为一个完整的 Git 堆栈,用于克隆、推送和版本库访问控制。
Gitblit可以在没有其他Git工具,可以用来备份仓库,以及可选的用户账户、团队定义、服务器设置和Groovy推送钩子脚本,从你的Gitblit实例到另一个Gitblit实例或Gitblit联邦客户端。同样,您也可以使用联盟机制将单个工作区的Gitblit实例聚合到一个公共的集中式服务器上。
Java运行时要求
Gitblit需要一个Java 7运行时环境(JRE)或Java 7开发包(jdk)。源码检查后门
更新日志
在1.9.0版本中存在一个严重的错误,可能会锁定用户的账户。
当从以前的版本更新到1.9.0时,现有的存储密码会被重新刷新。
当用户在更新后首次登录时,使用更安全的密码散列机制。
当密码散列机制被保留在默认状态,而不是特别的时候,就会出现这种情况。
配置中设置的密码。如果在执行中出现错误,将销毁存储的密码。
取而代之,用户无法再登录。
只有在某些情况下才会导致这种错误行为。它很可能会
影响了Gitblit Docker容器的用户。如果你没有遇到任何问题。
为了安全起见,请更新到1.9.1。如果你被这个bug击中,我们深感抱歉。
除了设置新的密码外,没有办法修复受影响的账户。
这个问题已经在1.9.1中得到了修复。现有安装的更新应该更新到1.9.1,而不是1.9.0。
注意事项
当你在 Linux 或 Windows 下将 Gitblit 安装为服务时,你可能需要编辑你的服务脚本/定义。启动 Gitblit 的命令行需要改变,现在的 classpath 和 class 都是专门的。
参见1.9.0版本的注释。
修正
修正了密码哈希升级时破坏现有存储密码的问题。
修正了Linux服务脚本使用`-cp`参数代替`-jar`的问题。
Pythonå¼åè¦ç¨å°å¤å°ç¥è¯ç¹
导读ï¼æ¬ç¯æç« é¦å¸CTOç¬è®°æ¥ç»å¤§å®¶ä»ç»æå ³Pythonå¼åè¦ç¨å°å¤å°ç¥è¯ç¹çç¸å ³å 容ï¼å¸æ对大家ææ帮å©ï¼ä¸èµ·æ¥ççå§ãæ¬æç®å½ä¸è§ï¼
1ãpython webå¼åéè¦å¦åªäºä¸è¥¿2ãpythonå端å¼åéè¦å¦åªäºå 容?3ãpython主è¦å¦ä¹ åªäºç¥è¯ç¹ï¼4ãå¦pythonéè¦ä»ä¹åºç¡ç¥è¯5ãPythoné½éè¦é£äºææ¯ï¼6ãpythonå·¥ç¨å¸éè¦ææ¡ä»ä¹ç¥è¯python webå¼åéè¦å¦åªäºä¸è¥¿ä»ä¹æ¯webå¼åå¢ï¼å ¶å®å°±æ¯å¼åä¸ä¸ªç½ç«äºãé£å¼åç½ç«éè¦ç¨å°åªäºç¥è¯å¢
1ãpythonåºç¡ï¼å 为ç¨pythonå¼åçï¼æ以pythonæå®è¦ä¼ï¼æèµ·ç ä½ ä¹å¾ä¼æ¡ä»¶å¤æï¼å¾ªç¯ï¼å½æ°ï¼ç±»è¿äºç¥è¯ï¼
2ãhtmlãcssçåºç¡ç¥è¯ï¼å 为è¦å¼åç½ç«ï¼ç½é¡µé½htmlåcssåçï¼æèµ·ç è¿äºç¥è¯ä½ å¾ä¼ï¼å°±ç®ä¸ä¼åå端ï¼å¼åä¸åºæ¥ç¹å«æ¼äº®ç页é¢ï¼ç½ç«ï¼æèµ·ç è¦è½çæhtmlæ ç¾æ¯ï¼
3ãæ°æ®åºåºç¡ç¥è¯ï¼å 为å¼åä¸ä¸ªç½ç«çè¯ï¼æ°æ®åå¨åªéï¼å°±æ¯å¨æ°æ®åºéï¼é£ä½ æèµ·ç è¦ä¼æ°æ®åºçå¢å æ¹æ¥å§ï¼è¦ä¸ç¶æä¹åæ°æ®ï¼åæ°æ®å¢
ä¸é¢è¿äºç¥è¯ä¼çè¯ï¼å°±åºæ¬ä¸å¯ä»¥äºï¼å¯ä»¥å¼åä¸ä¸ªç®åçå°ç«å°±æ²¡æé®é¢äºï¼å¦ææ³å¼åæ¯è¾å¤§åçç½ç«ï¼ä¸å¡é»è¾æ¯è¾å¤æçï¼é£å°±å¾ç¨å°å ¶ä»çç¥è¯äºï¼æ¯å¦è¯´redisãMQççã
å¼ååçåå¤ï¼
1ãå®è£ 好 python3.5çæ¬
2ãå®è£ 好pycharmï¼æ¯å±ä»¬çå¼åå·¥å ·
3ãå®è£ 好djangoï¼çæ¬1.9ï¼ä½¿ç¨pip install django==1.9å½ä»¤å®è£ å³å¯
4ãå®è£ 好navicatæè å ¶ä»æä½æ°æ®åºçå¯è§åå·¥å ·ï¼å 为å±ä»¬è¦ç¨å°æ°æ®åºï¼è¦çæ°æ®åºãæ¹æ°æ®
åé¢å±ä»¬å®è£ äºdjangoï¼djangoæ¯ä¸ä¸ªpythonå¼åçwebæ¡æ¶ï¼å¤§èå ¨ï¼å ä¹ä½ ç¨å°çæ¹æ³ï¼å®å ¨é½æï¼å®éé¢å·²ç»å®ç°äºæåæ说çææçåè½ï¼å±ä»¬åªéè¦ç¨æå®æ¿è¿æ¥ç¨å°±å¯ä»¥äºãå½ç¶pythonè¿æå¾å¤webå¼åæ¡æ¶ï¼æ¯å¦è¯´web.pyãflaskãtornadoãbottleççï¼ä»ä»¬å¨åçä¸ådjangoä¸æ ·ï¼ä½æ¯ä»ä»¬çåè½é½æ²¡ædjangoå¤ï¼djangoä¹æ¯ç¤¾åºæ大ï¼æ´»è·ç¨æ·æå¤çä¸ä¸ªæ¡æ¶ã
pythonå端å¼åéè¦å¦åªäºå 容?
Pythonçå¦ä¹ å 容è¿æ¯æ¯è¾å¤çï¼æ们å°å¦ä¹ çè¿ç¨åå为4个é¶æ®µï¼æ¯ä¸ªé¶æ®µå¦ä¹ 对åºçå 容ï¼å ·ä½çå¦ä¹ 顺åºå¦ä¸ï¼
Pythonå¦ä¹ 顺åºï¼
â Python软件å¼ååºç¡
ææ¡è®¡ç®æºçææåå·¥ä½åç
ä¼ä½¿ç¨Linux常ç¨å·¥å ·
çç»ä½¿ç¨Dockerçåºæ¬å½ä»¤
建ç«Pythonå¼åç¯å¢ï¼å¹¶ä½¿ç¨printè¾åº
使ç¨Pythonå®æå符串çåç§æä½
使ç¨Python re模åè¿è¡ç¨åºè®¾è®¡
使ç¨Pythonå建æ件ã访é®ãå é¤æ件
ææ¡import è¯å¥ãFromâ¦import è¯å¥ãFromâ¦import* è¯å¥ãæ¹æ³çå¼ç¨ãPythonä¸çå
â¡Python软件å¼åè¿é¶
è½å¤ä½¿ç¨Pythoné¢å对象æ¹æ³å¼å软件
è½å¤èªå·±å»ºç«æ°æ®åºï¼è¡¨ï¼å¹¶è¿è¡åºæ¬æ°æ®åºæä½
ææ¡éå ³ç³»æ°æ®åºMongoDBç使ç¨ï¼ææ¡Rediså¼å
è½å¤ç¬ç«å®æTCP/UDPæå¡ç«¯å®¢æ·ç«¯è½¯ä»¶å¼åï¼è½å¤å®ç°ftpãhttpæå¡å¨ï¼å¼åé®ä»¶è½¯ä»¶
è½å¼åå¤è¿ç¨ãå¤çº¿ç¨è½¯ä»¶
â¢Pythonå ¨æ å¼WEBå·¥ç¨å¸
è½å¤ç¬ç«å®æå端软件å¼åï¼æ·±å ¥ç解Pythonå¼åå端çç²¾é«
è½å¤ç¬ç«å®æå端软件å¼åï¼å¹¶åå端ç»åï¼çç»ææ¡ä½¿ç¨Pythonè¿è¡å ¨ç«Webå¼åçæå·§
â£Pythonå¤é¢åå¼å
è½å¤ä½¿ç¨Pythonçç»ç¼åç¬è«è½¯ä»¶
è½å¤çç»ä½¿ç¨Pythonåºè¿è¡æ°æ®åæ
æèç½ç«Pythonæèèä½æ°æ®ç¬ååæ
ææ¡ä½¿ç¨Pythonå¼æºäººå·¥æºè½æ¡æ¶è¿è¡äººå·¥æºè½è½¯ä»¶å¼åãè¯é³è¯å«ã人è¸è¯å«
ææ¡åºæ¬è®¾è®¡æ¨¡å¼ã常ç¨ç®æ³
ææ¡è½¯ä»¶å·¥ç¨ã项ç®ç®¡çã项ç®ææ¡£ã软件æµè¯è°ä¼çåºæ¬æ¹æ³
å¦ææç®çº¿ä¸å¦ï¼å»ºè®®èå¯å¯¹æ¯ä¸ä¸ä¸å软件å¦é¢ãå京课工åºãå京å大éé¸çå¼è®¾pythonä¸ä¸çå¦æ ¡ï¼è®°å¾æ¾æè¦å ¨å¥pythonè§é¢è¯¾ï¼ç¥ä½ å¦æææï¼æé纳ï¼
å大éé¸ä¸å软件å¦é¢python课å å®æ
python主è¦å¦ä¹ åªäºç¥è¯ç¹ï¼è·å 个ITçç大佬æèµ·Pythonï¼ä»ä»¬è¯´é¶åºç¡å¦å¥½Pythonå¾ç®åï¼Pythonè¿é¶éè¦è±è´¹äºæ°åï¼é½è¯´Pythonç®åæå¦
Pythonä¸æå¾å®¹æï¼ åºæ¬æå ¶ä»è¯è¨ç¼ç¨ç»éªç人å¯ä»¥å¨1å¨å å¦ä¼Pythonæåºæ¬çå 容ã(PSï¼æ²¡æåºç¡ç人ä¹å¯ä»¥ç´æ¥å¦ä¹ ï¼é度ä¼æ ¢ä¸ç¹)
ä»å¤©ç»ä½ ä»ç»åå¤§å ¥é¨å¿ å¤ç¥è¯ç¹ã
1 æ è¯ç¬¦
æ è¯ç¬¦æ¯ç¼ç¨ç¨å°çååï¼ç¨äºç»åéãå½æ°ãè¯å¥åçå½åï¼Python ä¸æ è¯ç¬¦ç±åæ¯ãæ°åãä¸å线ç»æï¼ä¸è½ä»¥æ°åå¼å¤´ï¼åºå大å°åã
以ä¸å线å¼å¤´çæ è¯ç¬¦æç¹æ®å«ä¹ï¼åä¸å线å¼å¤´çæ è¯ç¬¦ï¼å¦ï¼_xxx?ï¼è¡¨ç¤ºä¸è½ç´æ¥è®¿é®çç±»å±æ§ï¼ééè¿ç±»æä¾çæ¥å£è¿è¡è®¿é®ï¼ä¸è½ç¨?from xxx import *?å¯¼å ¥ï¼åä¸å线å¼å¤´çæ è¯ç¬¦ï¼å¦ï¼__xxï¼è¡¨ç¤ºç§ææåï¼åä¸å线å¼å¤´åç»å°¾çæ è¯ç¬¦ï¼å¦ï¼__xx__ï¼è¡¨ç¤º Python ä¸å ç½®æ è¯ï¼å¦ï¼__init__()?表示类çæé å½æ°ã
2 å¼å·
Python å¯ä»¥ä½¿ç¨å¼å·ï¼'ï¼ãåå¼å·ï¼"ï¼ãä¸å¼å·ï¼''' æ """ï¼æ¥è¡¨ç¤ºå符串ï¼å¼å·çå¼å§ä¸ç»æ须类åç¸åï¼ä¸å¼å·å¯ä»¥ç±å¤è¡ç»æãå¦ä¸æ示ï¼
id = ''
name = "å¼ ä¸"
skill = '''
å±æ
è·³è'''
skill = """
å±æ
è·³è"""
3 å ³é®å
and exec not assert finally or
break for passclassfrom print
continue global raisedef if return
del importtry elifin while
else is with exceptlambda yield
注æï¼æ们å¨èªå®ä¹æ è¯ç¬¦æ¶æ¯ä¸è½ä½¿ç¨å ³é®åçã
4 è¾å ¥è¾åº
Python è¾åºä½¿ç¨ print()ï¼å 容å å¨æ¬å·ä¸å³å¯ãå¦ä¸æ示ï¼
print('Hello Python')
1
Python æä¾äºä¸ä¸ª input()ï¼å¯ä»¥è®©ç¨æ·è¾å ¥å符串ï¼å¹¶åæ¾å°ä¸ä¸ªåééãå¦ä¸æ示ï¼
name = input()
print('Hi',name)
1
2
5 ç¼ç
Python2 ä¸é»è®¤ç¼ç 为 ASCIIï¼åå¦å 容为æ±åï¼ä¸æå®ç¼ç 便ä¸è½æ£ç¡®çè¾åºå读åï¼æ¯å¦æ们æ³è¦æå®ç¼ç 为 UTF-8ï¼Python ä¸éè¿å¨å¼å¤´å å ¥ # -*- coding: UTF-8 -*- è¿è¡æå®ã
Python3 ä¸é»è®¤ç¼ç 为 UTF-8ï¼å æ¤å¨ä½¿ç¨ Python3 æ¶ï¼æ们é常ä¸éæå®ç¼ç ã
6 缩è¿
Python ä¸ä½¿ç¨ { } æ¥æ令å½æ°ãé»è¾å¤æçï¼èæ¯ä½¿ç¨ç¼©è¿ï¼ç¼©è¿çç©ºæ ¼å¯åãå¦ä¸æ示ï¼
if True:
print(True)
else:
print(False)
1
2
3
4
7 å¤è¡
Python ä¸ä¸è¬æ¥è¯´ä¼ä»¥æ°è¡æ¥ä½ä¸ºè¯å¥çç»ææ è¯ï¼å¦ä¸æ示ï¼
a =
b =
c =
d = a + \
b - \
c
8 注é
Python ä¸åè¡æ³¨éç¨ #ï¼å¤è¡æ³¨éç¨ä¸ä¸ªåå¼å·ï¼'''ï¼æä¸ä¸ªåå¼å·ï¼"""ï¼ãå¦ä¸æ示ï¼
# ææ¯åè¡æ³¨é
'''
ææ¯å¤è¡æ³¨é
ææ¯å¤è¡æ³¨é
'''
9 æ°æ®ç±»å
æ´æ°ï¼å¯ä»¥ä¸ºä»»æ大å°ãå å«è´æ°
æµ®ç¹æ°ï¼å°±æ¯å°æ°
å符串ï¼ä»¥åå¼å· 'ãåå¼å·"ãä¸å¼å· ''' æ """æ¬èµ·æ¥çææ¬
å¸å°ï¼åªæ TrueãFalse 两ç§å¼
空å¼ï¼ç¨ None 表示
åéï¼æ¯å¯åç
常éï¼ä¸å¯å
è¿ç®ç¬¦
.1 常ç¨è¿ç®ç¬¦
è¿ç®ç¬¦æ述示ä¾
+ç¸å a + b
-ç¸åa - b
*ç¸ä¹a * b
/ç¸é¤a / b
%å模a % b
**å¹a**b 表示 a ç b 次å¹
//åæ´é¤9 // 4 ç»æ为 2
==æ¯å¦ç¸ça == b
!=æ¯å¦ä¸çäºa != b
æ¯å¦å¤§äºab
=æ¯å¦å¤§äºçäºa = b
=æ¯å¦å°äºçäºa = b
=ç®åçèµå¼è¿ç®ç¬¦a = b + c
+=å æ³èµå¼è¿ç®ç¬¦a += b çæäº a = a + b
-=åæ³èµå¼è¿ç®ç¬¦a -= b çæäº a = a - b
*=ä¹æ³èµå¼è¿ç®ç¬¦a *= b çæäº a = a * b
/=é¤æ³èµå¼è¿ç®ç¬¦a /= b çæäº a = a / b
%=å模èµå¼è¿ç®ç¬¦a %= b çæäº a = a % b
**=å¹èµå¼è¿ç®ç¬¦a **= b çæäº a = a ** b
//=åæ´é¤èµå¼è¿ç®ç¬¦a //= b çæäº a = a // b
ä¸ab
以ä¸åçå¸æå¯¹ä½ ææ帮å©ï¼æ³å¦ä¹ Pythonèªå¦æé¾åº¦ï¼å¯ä»¥èèå¹è®æºæççï¼åéå°±å¾ä¸éï¼æ¨èä½ å»çç
å¦pythonéè¦ä»ä¹åºç¡ç¥è¯å¦pythonéè¦çåºç¡ç¥è¯è¯´æå¦ä¸ï¼
Pythonä½ä¸ºä¸ç§è·¨å¹³å°ç计ç®æºç¨åºè®¾è®¡è¯è¨ï¼æèªå·±ç¬ç¹çç¥è¯ç¹ä¸ææ¯å±é¢ãå ¥é¨å¦ä¹ è¦ææ¡Pythonç¹ç¹ãPythonçä¼ç¼ºç¹ãPython代ç çæ§è¡è¿ç¨ãPythonä¸çåºç¡è¯æ³çåºç¡ç¥è¯ã
ä¸ãPythonçç¹ç¹ï¼
1ãPythonæ¯ä¸é¨é¢å对象çè¯è¨ï¼å¨Pythonä¸ä¸åç对象ï¼
2ãPythonæ¯ä¸é¨è§£éæ§è¯è¨ï¼
3ãPythonæ¯ä¸é¨äº¤äºå¼è¯è¨ï¼å³å ¶å¨ç»ç«¯ä¸è¿è¡å½ä»¤ç¼ç¨ï¼
4ãPythonæ¯ä¸é¨è·¨å¹³å°çè¯è¨ã没ææä½ç³»ç»çéå¶ï¼å¨ä»»ä½æä½ç³»ç»ä¸é½å¯ä»¥è¿è¡Python代ç ãï¼
5ãPythonæ¥æ强大å丰å¯çåºï¼å被称为è¶æ°´è¯è¨ï¼è½æå ¶ä»è¯è¨ï¼ä¸»è¦c/c++ï¼åç模åå¾è½»æ¾å°ç»åå¨ä¸èµ·ã
äºãPythonçä¼ç¼ºç¹ï¼
1ãä¼ç¹ï¼
aãæäºç»´æ¤åå¦ä¹
bã广æ³çæ ååºãæä¾äºå¤§éçå·¥å ·ã
cãå¯æ©å±æ§
dãPython对äºå¤§å¤æ°æ®åºé½æç¸åºçæ¥å£ãMysqlãsqlites3ãMongoDBãRedisçã
eãæ¯æGUIç¼ç¨ãå¾å½¢åçé¢ã
fãè¯æ³ç®åï¼æäºå¦ä¹
2ã缺ç¹ï¼
aãåCè¯è¨ç¸æ¯è¾Pythonç代ç è¿è¡éåº¦æ ¢
bã代ç æ æ³å å¯
ä¸ãPython代ç çæ§è¡è¿ç¨ï¼
大è´æµç¨ï¼æºç ç¼è¯ä¸ºåèç ï¼.pyc)-----Pythonèææº-------æ§è¡ç¼è¯å¥½çåèç -----Pythonèææºå°åèç ç¿»è¯æç¸å¯¹åºçæºå¨æ令ï¼æºå¨ç ï¼ã
Pythonç¨åºè¿è¡æ¶ï¼å ç¼è¯åèç 并ä¿åå°å åä¸ï¼å½ç¨åºè¿è¡ç»æåï¼Python解éå¨å°å åä¸çåèç 对象åå°.pycæ件ä¸ã
第äºæ¬¡åè¿è¡æ¶ï¼å ä»ç¡¬çä¸å¯»æ¾.pycæ件ï¼å¦ææ¾å°ï¼åç´æ¥è½½å ¥ï¼å¦åéå¤ä¸é¢è¿ç¨ã
åãPythonä¸çåºç¡è¯æ³ï¼
1ãPythonä¸åéå¨å åä¸çåå¨
2ãåºæ¬æ°æ®ç±»å
3ãå ³é®åãæ è¯ç¬¦åå ç½®å½æ°
4ãPythonè¿ç®ç¬¦
5ãPythonä¸çè¯å¥
Pythoné½éè¦é£äºææ¯ï¼å享Pythonå¦ä¹ 路线ã
第ä¸é¶æ®µPythonåºç¡ä¸Linuxæ°æ®åºãè¿æ¯Pythonçå ¥é¨é¶æ®µï¼ä¹æ¯å¸®å©é¶åºç¡å¦åæ好åºç¡çéè¦é¶æ®µãä½ éè¦ææ¡Pythonåºæ¬è¯æ³è§åååéãé»è¾æ§å¶ãå ç½®æ°æ®ç»æãæ件æä½ãé«çº§å½æ°ã模åã常ç¨æ ååºæ¨¡åãå½æ°ãå¼å¸¸å¤çãMySQL使ç¨ãåç¨çç¥è¯ç¹ã
å¦ä¹ ç®æ ï¼ææ¡Pythonåºç¡è¯æ³ï¼å ·å¤åºç¡çç¼ç¨è½åï¼ææ¡Linuxåºæ¬æä½å½ä»¤ï¼ææ¡MySQLè¿é¶å 容ï¼å®æé¶è¡èªå¨æ款æºç³»ç»å®æãè±æ±è¯å ¸ãæè¯è§£æå¨ç项ç®ã
第äºé¶æ®µWEBå ¨æ ãè¿ä¸é¨å主è¦å¦ä¹ Webå端ç¸å ³ææ¯ï¼ä½ éè¦ææ¡HTMLãCSSãJavaScriptãjQueryãBootStrapãWebå¼ååºç¡ãVUEãFlask ViewsãFlask模æ¿ã æ°æ®åºæä½ãFlaské ç½®çç¥è¯ã
å¦ä¹ ç®æ ï¼ææ¡WEBå端ææ¯å 容ï¼ææ¡WEBå端æ¡æ¶ï¼çç»ä½¿ç¨FlaskãTornadoãDjangoï¼å¯ä»¥å®ææ°æ®çæ§åå°ç项ç®ã
第ä¸é¶æ®µæ°æ®åæ+人工æºè½ãè¿é¨å主è¦æ¯å¦ä¹ ç¬è«ç¸å ³çç¥è¯ç¹ï¼ä½ éè¦ææ¡æ°æ®æåãæ°æ®æåãæ°æ®åå¨ãç¬è«å¹¶åãå¨æç½é¡µæåãscrapyæ¡æ¶ãåå¸å¼ç¬è«ãç¬è«æ»é²ãæ°æ®ç»æãç®æ³çç¥è¯ã
å¦ä¹ ç®æ ï¼å¯ä»¥ææ¡ç¬è«ãæ°æ®ééï¼æ°æ®æºæä¸ç®æ³è¿é¶å人工æºè½ææ¯ãå¯ä»¥å®æç¬è«æ»é²ãå¾ç马èµå ãçµå½±æ¨èç³»ç»ãå°éé¢æµã人工æºè½é¡¹ç®çé¶æ®µé¡¹ç®ã
第åé¶æ®µé«çº§è¿é¶ãè¿æ¯Pythoné«çº§ç¥è¯ç¹ï¼ä½ éè¦å¦ä¹ 项ç®å¼åæµç¨ãé¨ç½²ãé«å¹¶åãæ§è½è°ä¼ãGoè¯è¨åºç¡ãåºåé¾å ¥é¨çå 容ã
å¦ä¹ ç®æ ï¼å¯ä»¥ææ¡èªå¨åè¿ç»´ä¸åºåé¾å¼åææ¯ï¼å¯ä»¥å®æèªå¨åè¿ç»´é¡¹ç®ãåºåé¾ç项ç®ã
æç §ä¸é¢çPythonå¦ä¹ 路线å¾å¦ä¹ å®åï¼ä½ åºæ¬ä¸å°±å¯ä»¥æ为ä¸ååæ ¼çPythonå¼åå·¥ç¨å¸ãå½ç¶ï¼æ³è¦å¿«éæ为ä¼ä¸ç«èçç²¾è±äººæï¼ä½ éè¦æ好çèå¸æ导ï¼è¿è¦æè¾å¤ç项ç®ç§¯ç´¯å®æç»éªã
èªå¦æ¬èº«é¾åº¦è¾é«ï¼ä¸æ¥ä¸æ¥å¦ä¸æ¥è¯å®å ¨é¢ä¸æå®ï¼å¦æèªå·±æé对æ§çæ³å¦åªä¸é¨åï¼å¯ä»¥ç´æ¥è·³è¿ææ¶ä¸éè¦çé对æ§çå¦ä¹ èªå·±éè¦ç模åï¼å¯ä»¥å¤çä¸äºä¸åçè§é¢å¦ä¹ ã
pythonå·¥ç¨å¸éè¦ææ¡ä»ä¹ç¥è¯1ãPythonåºç¡ä¸Linuxæ°æ®åº
æè½è¾¾æ è¦æ±ï¼ææ¡Pythonåºç¡è¯æ³ï¼å ·å¤åºç¡çç¼ç¨è½å;ææ¡Linuxåºæ¬æä½å½ä»¤ï¼ææ¡MySQLè¿é¶å 容ãç¥è¯ç¹å æ¬Pythonåºæ¬è¯æ³è§åååéãé»è¾æ§å¶ãå ç½®æ°æ®ç»æãæ件æä½ãé«çº§å½æ°ã模åãPython常ç¨æ ååºæ¨¡åãå½æ°ãå¼å¸¸å¤çãMySQL使ç¨ãåç¨çã
2ãWEBå ¨æ
æè½è¾¾æ è¦æ±ï¼ææ¡WEBå端ææ¯å 容ï¼ææ¡WEBå端æ¡æ¶ï¼çç»ä½¿ç¨FlaskãTornadoãDjangoãæ¶åçç¥è¯ç¹æHTMLãCSSãJavaScriptãjQueryãBootStrapãWebå¼ååºç¡ãVUEãFlask ViewsãFlask模æ¿ãæ°æ®åºæä½ãFlaské ç½®çã
3ãæ°æ®åæ+人工æºè½
æè½è¾¾æ è¦æ±ï¼ææ¡ç¬è«ãæ°æ®ééãæ°æ®æºæä¸ç®æ³ï¼ææ¡äººå·¥æºè½ææ¯ãæ¶åçç¥è¯ç¹ææ°æ®æåãæ°æ®æåãæ°æ®åå¨ãç¬è«å¹¶åãå¨æç½é¡µæåãscrapyæ¡æ¶ãåå¸å¼ç¬è«ãç¬è«æ»é²ãæ°æ®ç»æãç®æ³çã
4ãé«çº§è¿é¶
æè½è¾¾æ è¦æ±ï¼ææ¡èªå¨åè¿ç»´ä¸åºåé¾å¼åææ¯ï¼å ·å¤èªå¨åè¿ç»´é¡¹ç®ä»¥ååºåé¾é¡¹ç®ç»éªãæ¶åçç¥è¯ç¹æ项ç®å¼åæµç¨ãé¨ç½²ãé«å¹¶åãæ§è½è°ä¼ãGoè¯è¨åºç¡ãåºåé¾å ¥é¨çã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºPythonå¼åè¦ç¨å°å¤å°ç¥è¯ç¹çå ¨é¨å 容äºï¼æè°¢æ¨è±æ¶é´é 读æ¬ç«å 容ï¼å¸æ对æ¨ææ帮å©ï¼æ´å¤å ³äºPythonå¼åè¦ç¨å°å¤å°ç¥è¯ç¹çç¸å ³å 容å«å¿äºå¨æ¬ç«è¿è¡æ¥æ¾åã
Dockerfile编写说明
在构建自定义Docker镜像时,Dockerfile扮演着至关重要的角色。它是一个文本文件,用于描述镜像的构建过程。Dockerfile包含了一系列的指令,这些指令告诉Docker如何构建镜像。下面将详细介绍Dockerfile中常用的命令。 1. FROM命令:该命令用于基于基础镜像进行构建新的镜像。在构建时,Docker会自动从docker hub拉取base镜像。这条指令必须作为Dockerfile的第一个指令出现。 语法:FROM 1.2 LABEL命令:用于为镜像添加元数据,元数据以键值对的形式指定。推荐将所有的元数据通过一条LABEL指令指定,以避免生成过多的中间镜像。 语法:LABEL = 1.4 RUN命令:用于指定docker build过程中运行的指令。指令一般为基础镜像可以运行的命令。注意,过多无意义的层会增加镜像的体积。 语法:RUN 1.5 EXPOSE命令:用来指定构建的镜像在运行时为容器对外暴露的端口。当使用 docker run -P 时,会自动随机映射 EXPOSE 的端口。 语法:EXPOSE 1.7 WORKDIR命令:用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY或ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。 语法:WORKDIR 1.8 ENV命令:设置环境变量,定义了环境变量后,后续指令中可以使用这个环境变量。 语法:ENV = 1.9 COPY命令:复制指令,从上下文目录中复制文件或目录到容器里指定路径。 语法:COPY 1. ADD命令:功能与COPY相似,不同之处在于当需要解压或下载远程资源时,ADD更为合适。 示例:ADD 1. VOLUME命令:定义匿名数据卷,容器启动时会自动挂载到匿名卷。通过-docker run -v 参数可以修改挂载点。 语法:VOLUME 1. ENTRYPOINT命令:类似于CMD指令,但不会被 docker run 命令行参数覆盖。运行docker run时可以指定ENTRYPOINT运行所需的参数。如果存在多个ENTRYPOINT指令,仅最后一个生效。 语法:ENTRYPOINT 2. 示例:自定义Redis Dockerfile 在构建自定义Redis Docker镜像时,可以使用以下Dockerfile示例: FROM redis:latestEXPOSE /tcp
3. 示例:构建Springboot应用
构建Springboot应用的过程可以分为以下几个步骤: 3.1 开发Springboot应用程序 创建一个Springboot项目,并编写相应的代码。 3.2 打包项目 使用Maven或Gradle等构建工具打包项目,生成一个可执行的jar文件。 3.3 在服务器中创建Dockerfile上下文目录 context 在服务器上创建一个目录作为Dockerfile的上下文目录。 3.4 在demo目录中创建或上传Dockerfile文件 创建或上传包含Dockerfile的文件到context目录。 3.5 上传jar包到context目录 将生成的jar包上传到context目录中。 3.6 执行构建 使用docker build命令构建Docker镜像。 3.7 运行容器 使用docker run命令运行Docker容器。