将Python项目打包为Docker容器
# 创建项目:
- 首先创建并进入一个目录(名字随意): mkdir Text&&cd Text
- 创建依赖文件vi requirements.txt (这个一般项目提供了)
- 目录树:

- 编写 Dockerfile 文件vi Dockerfile
- FROM:所有 Dockerfile 的第一个指令都必须是 FROM ,用于指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的 latest 标签,如果需要在一个 Dockerfile 中构建多个镜像,可以使用多次。
* MAINTAINER:描述镜像的创建者,名称和邮箱。
* RUN:RUN 命令是一个常用的命令,执行完成之后会成为一个新的镜像,通常用于运行安装任务从而向映像中添加额外的内容。在这里,我们使用 pip 来安装 requirements. txt 文件中的所有包。
- COPY:复制本机文件或目录,添加到指定的容器目录,本例中将 requirements. txt 复制到镜像中。
* WORKDIR:为 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续参数如果是相对路径,则会基于之前命令指定的路径。
* ENTRYPOINT:在启动容器的时候提供一个默认的命令项。
* RUN:运行 telegramMemoBot 目录中的 main. py 。
- 贴个例子代码(memosbot):
```
FROM python:alpine
MAINTAINER sora233 "soragames@yeah.net"
RUN pip install --upgrade pip
COPY ./requirements.txt /requirements.txt
WORKDIR /
RUN pip3 install -r requirements.txt
COPY . /
ENTRYPOINT [ "python3" ]
CMD [ "telegramMemoBot/main.py" ]
```
- 构建代码docker build -t memosbot:0.3 . (注意最后有个点)
- 之后就可以直接 run 了,但是我喜欢用 compose 故贴个代码
```
version: '3'
services:
memosbot:
image: memosbot:0.3
restart: always
volumes:
- $PWD/data/config.py:/telegramMemoBot/config.py
```
---
# 推送项目:
## 去 docker hub 注册( https://hub.docker.com )
- 注册得到 docker id 和密码
### 服务器登录 docker hub 仓库
```
docker login
```
如下图表示登录成功

## 推送到 docker hub 仓库
注意 push 的镜像名要符合规范
```
用户名/仓库名:标签值(你可以将标签值理解为版本号,可以随意命名无任何影响,默认为lastest)
```
### 命名不规范解决办法:
- 用 docker tag 重新生成个镜像
- docker tag : 标记本地镜像,将其归入某一仓库。
语法
```
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
```
例:
```
docker tag memosbot:0.3 Memosbot:0.3
```
这是再查看镜像列表就会发现多了个镜像
再次推送
```
docker push Memosbot:0.3
```
## 登录 docker hub 检查
登陆 [https://hub.docker.com/](https://hub.docker.com/) 点击 Repositories 菜单