Dockerfile与腾讯云容器服务构建镜像

本地通过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]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章