Giter Club home page Giter Club logo

dockerdemo's Introduction

自己动手写Docker实践工程


简介

本文章系列起源于:《自己动手写Docker》,编程实践方得真知,虽然大部分代码书中都有,但还是遇到了不少困难,下面是对于自己写的Docker Demo的总览

工程说明

同时放到了Gitee和Github上,都可进行获取

工程基于Go:1.17

由于系统原因,不能在Windows平台运行,只能在Linux平台上运行

本工程实现了的大致功能清单如下:

  • 构造实现run命令版本的容器
    • 实现run命令
    • 增加容器限制
    • 增加管道及环境变量识别
  • 使用busybox创建容器
    • 使用AUFS包装busybox
    • 实现volume数据卷
    • 实现简单镜像打包
  • 实现容器的后台运行
  • 实现查看运行中的容器
  • 实现查看容器日志
  • 实现进入容器Namespace
  • 实现停止容器
  • 实现删除容器
  • 实现通过容器制作镜像
  • 实现容器指定环境变量运行
  • 容器地址分配
  • 创建Bridge网络
  • 在Bridge网络创建容器

环境说明

本文基于下面的环境进行开发发运:

  • Ubuntu 20 TLS :本地搭建的Ubuntu系统
  • Centos7 :腾讯云服务器,也能跑本工程下的所有代码

注:Windows不能运行该工程,因为其中有些库是Linux采用的,

但如果想要写Windows的话,可以仓库RunC中关于Windows相关的代码

如果后期有时间的话,本工程也尝试适配下Windows系统

看了下,windows是基于:https://github.com/microsoft/hcsshim

感觉难度有点大,看看后面时间了,时间不紧的话,可以尝试尝试

运行说明

docker demo 的代码都位于文件夹:mydocker下

可参考下面的方式运行:

go mod init dockerDemo
go mod tidy
go build mydocker/main.go
./main run -ti /bin/sh

需求安装Go环境:https://go.dev/doc/install

根据官网教程进行安装即可

工程运行需要基础镜像:busybox,在文章中有说如何进行配置安装:自己动手写Docker系列 -- 4.1使用busybox创建容器

本文为了图便宜犯了一个错误,将容器的挂载数据卷设置成了工程运行时的所在目录,导致不同环境运行会有些问题,这是个教训

如果在克隆本工程,运行时出现报错:找不到 /proc

需要将 busybox 下的内容复制到工程根目录下的 /opt/busybox,命令如下(压缩包放到了gitee上,可以使用命令直接下载)

wget https://gitee.com/free-love/docker-demo/attach_files/1048146/download/busybox.tar

➜  dockerDemo git:(main) ✗ mkdir /opt/busybox
➜  dockerDemo git:(main) ✗ tar -xvf ./busybox.tar -C /opt/busybox/

➜  dockerDemo git:(main) ✗ ls /opt/busybox
bin  dev  etc  home  proc  root  sys  tmp  usr  var

实践文档

在编写代码时,也遇到过不少问题,基本上都对过程进行记录,代码相对书中应该是比较完整,如果在编写过程中遇到问题,可以当做相关的参考

参考资料

  • 《自己动手写Docker》:非常好的书籍,值得一看并实操

dockerdemo's People

Contributors

freedom-xiao007 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.