前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Docker】使用指南

【Docker】使用指南

作者头像
keloli
发布2022-01-20 12:25:35
3920
发布2022-01-20 12:25:35
举报

本文目标

介绍docker基本知识 学会打包一个自定义的docker并让其他人可以成功使用

参考资料

docker基本概念

docker诞生背景

docker诞生就是为了解决开发环境和多软件版本不一致的问题。

docker不是虚拟机

docker安装

sudo wget -qO- https://get.docker.com | sh sudo usermod -aG docker usernamexxx

docker基本概念

docker总体架构: 注意docker daemon,负责管控命令执行

image.png

docker中有这样几个概念:

  • dockerfile:
  • image:
  • container:

实际上你可以简单的把image理解为可执行程序,container就是运行起来的进程。

那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。

因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。

具体的使用方法就不在这里赘述了,大家可以参考docker的官方文档,那里有详细的讲解。

实战

docker常用指令

代码语言:javascript
复制
docker pull # 获取docker image

docker run -p... #运行container 端口映射

docker run -v xxx(local path):xxx(docker 内部目录)# 目录挂载

docker run -it # -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

docker commit # 保存改动为新的image

docker build # 创建docker image

docker create # 

docker attach # 进入容器(不是进入image)

docker rm [docker id] # 删除docker container

docker rmi [docker image id] # 删除docker image

docker ps # 查看正在运行的docker

docker ps -a # 查看docker运行的历史

docker images # 查看本地已有的docker镜像

docker inspect # 查看image内部具体信息

docker cp # 在host和container之间拷贝文件

docker stop # 停止container

docker search # 在远程仓库docker hub搜索镜像

docker login # 登录docker hub

docker push # 将本地镜像上传到docker hub

build自定义docker

除了用docker commit命令,还可以编写Dockerfile(约定俗称是这种写法)来定义和保存自己的docker。

代码语言:javascript
复制
FROM xxx # 设置基础镜像

MAINTAINER xxxx # 著名文件作者/维护者

RUN xxx # 执行命令

COPY xxx # 拷贝文件

ADD xxx # 添加文件

ENTRYPOINT xxx # 给container指定执行入口

EXPOSE xxx # 暴露端口

CMD xxx # 执行命令,给container指定执行入口

WORKDIR # 指定运行命令的路径

ENV # 为container里面环境的设置环境变量

USER # 指定执行container的用户

VOLUME # 指定container执行时挂在的卷

Dockerfile中的每一行都产生一个新的层,也就是说每一行的命令都会产生一个新的docker id。

Docker镜像为深度学习训练模型提供了一个方便的环境,用户可以在不影响系统环境的情况下实现自己任意的环境搭建,这里展示基本docker环境搭建过程。

  • 任务需求:比如我现在想要在torch1.7的docker(这里简称它为base docker)基础上再安装一些自己想要安装的包,构建出一个新的docker。
  • 大致逻辑:先把想要的base docker pull到本地,在本地进入此docker,再在这docker里安装自己想要的包,都安装好后,退出当前docker,把这个docker commit到一个新的docker(自己的docker)上,再push自己的docker到dockerhub repo。
  • 具体步骤:

1)去dockerhub上找一个torch1.7的docker,pull下来,比如我们从torch官方的docker tags里面找到我们想要的torch1.7 develop版本。找到后,在本地运行:

代码语言:javascript
复制
docker pull pytorch/pytorch:1.7.1-cuda11.0-cudnn8-devel

上述操作是将这个docker先拉到本地。

2)进入docker:

代码语言:javascript
复制
docker run --runtime=nvidia -it --name=test --ipc=host --net=host pytorch/pytorch:1.7.1-cuda11.0-cudnn8-devel

3)进入docker后就可以尽情地配置自己的环境了。

4)配置完后,“exit”退出docker。

5)将配置好的docker commit到自己的docker(相当于复制了一份到自己的docker)。

代码语言:javascript
复制
 docker ps -a    # 查看并找到配置好的docker的id
docker commit [docker id] geekyutao/foresee-rl:v0    # geekyutao/foresee-rl:v0是我自己在dockerhub上创建的repo

6)在本地登录dockerhub,再把本地的自己的docker push到dockerhub上。

代码语言:javascript
复制
docker login -u [username] -p [password]    # 如果报错的话,很可能是因为机器默认使用了一个docker证书
# 如果报错:删除/usr/local/bin/下的docker证书再登录
# sudo rm /usr/local/bin/docker-credential-pass

docker push geekyutao/foresee-rl:v0

7)完成!再把操作期间遗留的docker和docker image都删了。(借助docker基本操作)

image

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021.10.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文目标
  • 参考资料
  • docker基本概念
    • docker诞生背景
    • docker安装
      • docker基本概念
      • 实战
        • docker常用指令
          • build自定义docker
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档