本地通过dockerfile构建博客项目镜像过程中通过pip安装包时经常性超时失败,通过配置腾讯云容器服务来构建镜像,不用考虑安装包超时的问题
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
FROM:定制的镜像都是基于 FROM 的镜像
RUN: 用于执行后面跟着的命令行命令
COPY: 复制指令,从上下文目录中复制文件或者目录到容器里指定路径
ADD: 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
CMD: 类似于 RUN 指令, 用于运行程序, 为启动的容器指定默认要运行的程序, 程序运行结束容器也就结束, 但二者运行的时间点不同
CMD是在docker run 时运行, RUN 是在 docker build
注:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效
镜像的构建
项目结构
web-preject # 仓库名称
├── Dockerfile # dockerfile
└── requirements.txt # 要安装的包
└── run.sh # 容器启动运行的脚本
这里只是构建项目运行环境的镜像,若要和源码一起构建,则将Dockerfile、requirements.txt和run.sh一起放项目的根目录下
Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED=1
COPY requirements.txt /opt/myapp/requirements.txt
# 需要构建源码直接把上面的的命令替换成 => COPY . /opt/myapp/
WORKDIR /opt/myapp
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
CMD ["/bin/sh","run.sh"]
requirements.txt
Django==2.0
django-ckeditor==5.4.0
django-js-asset==1.0.0
Pillow==5.0.0
mysqlclient==1.4.6
pytz==2017.3
uwsgi==2.0.18
run.sh
python3 /opt/myapp/manage.py runserver 0.0.0.0:8000
在 Dockerfile 文件的存放目录下,执行构建动作
通过目录下的 Dockerfile 构建一个 web:test(镜像名称:镜像标签)
docker build -t web:test .
注:最后的 . 代表本次执行的上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包 (上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢)
镜像仓库与命名空间
1. 登录腾讯云服务控制台 - 【云产品】 - 搜索【容器服务】
2. 进入容器服务,选择左侧导航栏中的搜索【镜像仓库】>【我的镜像】
3. 根据提示填写相关信息,并单击【开通】进行初始化
4. 设置用户名和密码
5. 新建命名空间,选择左侧导航栏中的【镜像仓库】 >【我的镜像】>【命名空间】> 【新建】> 输入【名称】
新建镜像与配置源代码
1. .选择左侧导航栏中的【镜像仓库】>【我的镜像】>【新建】,输入名称、类型、命名空间和描述,点击提交
2. 配置源代码,点击【我的镜像】>【源代码授权】github/gitlab
a. 立即授权同步 GitHub 代码源
b. 输入账号、密码与验证码登录
如下图所示,授权成功
构建配置
-
代码源: 选择 Github
-
Organization:选择您的 Organization,通常为您的 Github 账户,如果您属于多个组织,那么挑选其中一个
-
Repository:选择您需要构建容器镜像的仓库
-
触发方式:复选模式,支持当 push 代码到某个分支或者新的 Tag 时,自动触发容器镜像构建。也可不选择触发方式,在镜像构建页面通过手动构建的方式构建镜像
-
版本命名规则:即容器镜像 Tag 命名规则,镜像 Tag 名支持格式化
-
分支/标签:可以包含分支名 / 仓库 Tag 名
-
更新时间:镜像构建时间
-
commit号:分支 / Tag 最近的 commit 号
-
-
覆盖镜像版本:构建后将同时生成该版本名的镜像,并覆盖已有同名镜像
-
Dockerfile路径:Dockerfile 在仓库中的相对路径。默认为空,可以不填,表示 Dockerfile 位于项目的根目录下,且文件名必须为 Dockerfile,以大写 D 开头。如果 Dockerfile 位于其它目录,例如位于仓库的 build 目录下,文件名为 Dockerfile,那么 Dockerfile 路径为
build/Dockerfile
-
构建目录:构建时的工作目录,Dockerfile 指令将在该目录下执行
-
构建参数:镜像构建时传入的参数,可用于设置环境变量
镜像构建
选择一个镜像构建,输出构建日志和构建结果
常用命令
登录腾讯云docker registry
~$ sudo docker login --username=[username] ccr.ccs.tencentyun.com
从registry拉取镜像
~$ sudo docker pull ccr.ccs.tencentyun.com/xxxxxxxx:[tag]
将镜像推送到registry
~$ sudo docker tag [ImageId] ccr.ccs.tencentyun.com/xxxxxxxx:[tag]
~$ sudo docker push ccr.ccs.tencentyun.com/xxxxxxxx:[tag]