小白如何改造一个自己的docker环境

64 阅读2分钟

前言

之前为了优化docker打包速度,把一些下载速度慢和容易出错的依赖放进了容器镜像,当时弄完了就没管,今天回头来试的时候发现流程全忘了,又要从头弄起,网上一搜全是和自己需求关系不大的复制粘贴文章,干脆就写下来免得下次又忘了方便找。

需求

其实很简单,我要做的就是找到一个合适的镜像,经过自己改造之后能够最大程度的减小dockerfile环境的搭建,比起在dockerfile里去搭一个我要的环境,我更倾向于搭好下次直接用,毕竟我也不是什么极致精简党。

我的流程主要分为以下几个步骤:pull一个基础镜像——>运行镜像——>打包成一个新镜像——>上传镜像——>使用新镜像运行服务。

1、Pull基础镜像

如何找到一个你期望的基础镜像,打开docker hub并登录(很多教程从注册开始讲起,我必须吐槽一下,真的不是凑篇幅的吗,这也要教?)

image.png

在最上方搜索栏输入你想搜索的镜像关键词,比如我之前搭过一个grpc的环境,当时用的是别人写的node-python镜像,后来又自己写了一个上传了,我这次准备弄一个python(没错,是为新坑做准备),所以搜python

image.png

从版本中找到一个自己需要的版本,上一篇文章我讲过了,要用到python 3.9版本,所以选择了3.9.16-bullseye(稳定版本),docker pull

2、运行镜像

这个镜像里没有对应的脚本,CMD不会持续运行,如果直接用docker run 执行的话会发现状态是 Exited(0) ,这里应该使用 -dt 参数:

docker run --name python -dt python:3.9.16-bullseye

其中-d 代表后台运行(Run container in background and print container ID),-t 代表分配一个伪TTY(Allocate a pseudo-TTY),大概就是提供了一种能够访问docker内部的方式的意思

运行成功后,进入容器内部:

docker exec -it python bash

安装你需要的环境,这里就不详细讲了,当linux用就行。

3、打包成一个新镜像

    docker commit [container id or container name] [image name:[tag name]]

这里名字自己起一个,因为上面运行的容器名字叫python,所以命令应该是:

    docker commit python segment-python-cpu:1.0.0

4、上传镜像

  • 将本地的镜像打标签,标签名与远程仓库的一致,其中用户名要与dockerhub名称一致,比如我的用户名叫qperable:

      # 本地的镜像:monsoira:latest
      # 远程仓库的镜像:monsoir/monsoira:1.0
      docker tag segment-python-cpu:1.0.0 qperable/segment-python-cpu:1.0.0
    
  • 将上面的本地镜像推送到远程仓库

      # 需要先登陆
      docker push qperable/segment-python-cpu:1.0.0
    

5、使用新镜像运行服务

dockerfile文件里加上这一条用的就是新镜像了

image.png