Docker入门Dockerfile详解及镜像创建(课时6~7)

一、使用dockerfile构建镜像

Dockerfile示例(注意一般文件名命名为Dockerfile 无后缀名,如果命名为其他名字,构建时需要额外指定文件名)

# Base Images
## 从天池基础镜像构建(from的base img 根据自己的需要更换,建议使用天池open list镜像链接:https://tianchi.aliyun.com/forum/postDetail?postId=67720)
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
##安装依赖包
RUN pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple 
##或者从requirements.txt安装
##RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 
## 把当前文件夹里的文件构建到镜像的根目录下,并设置为默认工作目录
ADD . /
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]

构建镜像

docker build -t registry.cn-shanghai.aliyuncs.com/target:test .

如要指定dockerfile :

docker build -f ./dockerfile -t registry.cn-shanghai.aliyuncs.com/target:test .

删除镜像/容器

删除镜像:

docker rmi registry.cn-shanghai.aliyuncs.com/target:test

删除容器:

docker rm [CONTAINER ID]

如果容器还在运行,则会删除失败,应先结束掉容器:

docker kill [CONTAINER ID]

查看运行中的容器:

docker ps 

查看所有容器:

docker ps -a

常规技巧

a.检查基础镜像软件源和pip源是否替换为国内源,如果非国内源后续每次构建镜像会比较浪费时间。 b.必备软件包可直接安装于基础镜像内,以减少每次构建镜像时都要安装一遍的等待时间。 c.镜像面临调试问题时,可交互式进入容器后直接调试修改,直到成功后退出再在dockerfile中修改。 d.养成使用Dockerfile的习惯,不要依赖于commit e.每次镜像修改都给定新的版本号或标签,方便区分版本管理,有意义的版本最好使用有含义的字符作为版本号,如:frist_submit

二、创建镜像仓库

这里以申请阿里云容器镜像服务(免费),并创建仓库为例,其他仓库如dockerhub、谷歌、亚马逊、腾讯等详见对应产品说明书。

阿里云容器服务地址为(https://cr.console.aliyun.com

注册开通后产品页面如下

enter image description here

第一步切换标签页到命名空间,创建地址唯一的命名空间

enter image description here

根据大赛要求选择对应的地域,其他的按照自己需求选择或填写

enter image description here

下一步,选择本地仓库,不建议其他选项,完成创建。

enter image description here

点击管理,可查看详情。

enter image description here

enter image description here

按照页面的指令在本地完成登陆:

enter image description here

export DOCKER_REGISTRY= your_registry_url<docker registry url> (注意这里your_registry_url最后字段结尾,不能多不能少
E.g registry.cn-shanghai.aliyuncs.com/xxxx/xxxx) docker login $DOCKER_REGISTRY \ --username your_username \ --password your_password

三、构建镜像并推送

在安装好Docker环境的本机/服务器构建并推送容器镜像。过程中可能会使用docker命令,如拉取docker pull,推送docker push,构建docker build等等。

为简化构建镜像的难度,天池已准备了常用的Python基础镜像,可直接拉取使用,更多基础镜像说明点击
自行构建镜像请确保安装curl.

docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

1. 准备所需文件

新建一个文件夹(例如tianchi_submit_demo)用于存放这次任务镜像所需的文件,文件夹中内容示例,其中hello_world.py中是各位自己的代码部分:

enter image description here

Dockerfile配置文件参考,Dockerfile是固定名称,注意首字母大写。Dockerfile中命令皆大写:

# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /

## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /

## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]

run.sh参考:

python hello_world.py

2. 构建镜像并推送(2.1与2.2皆可走通)

2.1 IDE + Cloud Toolkit

推荐使用 Alibaba Cloud Toolkit 进行操作。Cloud Toolkit 与主流 IDE 及阿里云容器镜像服务无缝集成,可以简化操作。 这里以在 IntelliJ IDEA 中使用 Alibaba Cloud Toolkit 为例。只需配置一次,之后都可一键推送~

  1. 在本地 IDE 中安装 Alibaba Cloud Toolkit 并进行阿里云账户配置。参见:
    在 IntelliJ IDEA 中安装和配置 Cloud Toolkit

  2. 设置用于打包本地镜像的 Docker 环境。

    1. 在 IntelliJ IDEA 工具栏单击 Tools > Alibaba Cloud > Preferences… 。

    2. 在 Settings 对话框的左侧导航栏中单击 Docker

    3. 在 Docker 界面中设置 Cloud Toolkit 需要连接的 Docker 环境。

      • 本地为 Mac 或 Linux 操作系统,勾选 Unix Socket,然后单击 Browse,输入unix:///var/run/docker.sock
      • 本地为 Windows 操作系统,勾选 TCP Connection,然后在 URI 右侧文档框输入本地 Docker 的 URI,如 http://127.0.0.1:2375
      • 远程 Docker 环境:勾选 Tcp Connection,在 URI 右侧的文本框里输入远端的 Docker 环境的 URI(包括 IP 地址和端口),如 http://x.x.x.x:2375,并确保远程主机的 HTTP 服务开启。
      • 单击 Test Connection 进行连接测试。

      注意:如果出现连接测试报错,可进入 Docker 的 Settings 界面,单击左侧导航栏中的 General,然后选择 Expose daemon on tcp://localhost:2375 without TLS。

      配置Docker

  3. 构建并上传应用

    1. 在 IntelliJ IDEA 的菜单栏中选择 File > Open… ,选择参赛的工程文件。
    2. 在 IntelliJ IDEA 界面左侧的 Project 中右键单击您的 Docker 应用工程名,在弹出的下拉菜单中选择 Alibaba Cloud > Deploy to ACR/ACK > Deploy to ACR
    3. 在 Deploy to ACR 对话框中进行以下配置。
      1. 在 Image 页签中选择 Context Directory 和 Dockerfile
        • Context Directory:参赛的工程文件所在的目录,例如上文中的 tianchi_submit_demo 。
        • Dockerfile:选择上文中创建的 Dockerfile。
        • Version:对上传的工程文件做版本标记。例如 1.0
      2. 在 Image Repositories 区域选择上文中创建的容器镜像服务的地域、命名空间和镜像仓库。
    4. 单击 RUN

      上传工程

下次就可以一键完成哦~

2.2 服务器上直接操作

执行docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
注意:registry.~~~是上面创建仓库的公网地址,用自己仓库地址替换。地址后面的:1.0为自己指定的版本号,用于区分每次build的镜像。最后的.是构建镜像的路径,不可以省掉。

enter image description here

构建完成后可先验证是否正常运行,正常运行后再进行推送。
CPU镜像:docker run your_image sh run.sh
GPU镜像:nvidia-docker run your_image sh run.sh

推送到镜像仓库 docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
如果这步出错,可能你没有登录,按照仓库里描述操作登录即可。

enter image description here

第一次推送会比较耗时,可以休息一会了~o( ̄▽ ̄)d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值