How to build your own ubuntu image with docker?

ubuntu20.04 安装docker (详细版)【24】 一、设置仓库 为了设置仓库,需要有几个前置步骤,完成之后才是真正设置仓库,具体如下 1、更新 apt 包索引。 $ sudo apt-get update 2、安装 apt 依赖包,⽤于通过HTTPS来获取仓库 $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common 3、添加 Docker 的官⽅ GPG 密钥 $ curl 阅读详情

一. Build a ubuntu image and install sshd

1. Pull ubuntu

 docker pull ubuntu:14.04

2. Create Dockerfile

FROM       ubuntu:14.04

#update
RUN apt-get update

#install gcc
RUN apt-get install -y gcc

#install vim
RUN apt-get install -y vim

#install sshd
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd

#create user
RUN useradd admin
RUN echo 'admin:admin' |chpasswd 

#start sshd
EXPOSE 22
CMD    ["/usr/sbin/sshd", "-D"]

 

3. Build image

 

 

docker build -t ubuntu-sshd-admin .

Build then check image.

$ docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
ubuntu-sshd-admin      latest              82a9040e58aa        14 minutes ago      380MB

4. Run 

docker run -d -p 222:22 ubuntu-sshd-admin

docker ps
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                 NAMES
d87645ff3fa2        ubuntu-sshd-admin   "/usr/sbin/sshd -D"   7 minutes ago       Up 7 minutes        0.0.0.0:222->22/tcp   unruffled_mirzakhani

5. Client test

ssh admin@127.0.0.1 -p 222

Use admin:admin to login, then you will find sshd is already started.

$ ps -elf | grep sshd

4 S root         1     0  0  80   0 - 15346 -      04:05 ?        00:00:00 /usr/sbin/sshd -D

4 S root        22     1  0  80   0 - 23138 -      04:13 ?        00:00:00 sshd: admin [priv]  

5 S admin       33    22  0  80   0 - 23138 -      04:13 ?        00:00:00 sshd: admin@pts/0   

0 S admin       37    34  0  80   0 -  2219 -      04:14 pts/0    00:00:00 grep sshd

$ 

 

二. Install more software

 

1. Create new Dockerfile

If you need more software in your own system, you can create more Dockerfile and build update version of image.

For example, if you want to install vim, you can write a new Dockerfile.vim

FROM      ubuntu-sshd-admin 

#install vim
RUN apt-get install -y vim

And now we have two dockerfiles.

2. Build a new version

docker build -t ubuntu-sshd-admin:0.1 .  -f Dockerfile.vim

By exec the cmd above, we can build a new version of ubuntu-ssh-admin, we can check by this:

$  docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
ubuntu-sshd-admin      0.1                 dbea46204d20        8 minutes ago       414MB
ubuntu-sshd-admin      latest              82a9040e58aa        3 hours ago         380MB

Then we can restart the container and see vim is already installed in the ubuntu.

 

docker run -d -p 222:22 ubuntu-sshd-admin:0.1

三. Create a volume for ubuntu

1. create a volume

wangyachangdeMacBook-Pro:docker wangyachang$ docker volume create ubuntu
ubuntu
wangyachangdeMacBook-Pro:docker wangyachang$ docker volume inspect ubuntu
[
    {
        "CreatedAt": "2018-06-21T07:31:06Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/ubuntu/_data",
        "Name": "ubuntu",
        "Options": {},
        "Scope": "local"
    }
]

2. start ubuntu

 

Then we can start the ubuntu image by mount /world to the volume created before.

 

wangyachangdeMacBook-Pro:ubuntu wangyachang$ docker run -d -p 222:22 --mount type=volume,source=ubuntu,target=/world ubuntu-sshd-admin:0.2

da637a55cb71589f58397a446f00bd5703e7d219e6f12250062c7b13d1dbba48

 We can can creat a file in the /world directory.

root@1c67af3a9a6e:/# touch /world/data.txt

root@1c67af3a9a6e:/# ls /world/data.txt

/world/data.txt

因为作者的docker是安装在mac上的,mac上的docker是在一个虚拟机中运行的,所以这里访问下面这个目录是不存在的。

/var/lib/docker/volumes/ubuntu/_data

 

/Applications/Docker.app/Contents/MacOS/com.docker.driver.amd64-linux

四. 挂载一个主机目录作为数据卷

使用 -v 标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷:

docker run -d -p 222:22 -v /Users/wangyachang/Documents/docker/ubuntu/ubuntu_data:/world_data ubuntu-sshd-admin:0.2

使用上面的命令,会把本机ubuntu_data目录挂载到容器的world_data,实现了所有的数据同步。


参考文献:

. https://yeasy.gitbooks.io/docker_practice/introduction/

五. 保存容器到镜像

基于已有的docker容器,做一新的dokcer image.

$ docker commit <container_id> <image_name>

如何看启动容器日志: 
$ sudo docker logs -f -t 容器名

六. FAQ

mac下docker的镜像保存位置:/Users/wangyachang/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

Ubuntu 18.04 部署 Discourse:Docker 容器化与 cgroup 兼容性实战 Discourse 是一个基于 Ruby on Rails 构建的现代化开源论坛系统,其核心架构依赖容器化运行时(Docker)与服务编排(Docker Compose),而非传统 LAMP 堆栈部署。理解其底层原理需掌握 Linux 控制组(cgroup)机制、systemd 版本兼容性、Docker Engine 启动约束等关键概念。在 Ubuntu 18.04 这类已停止维护但仍在生产环境广泛使用的旧版系统中,cgroup v1/v2 混合模式常导致 Docker 启动失败,进而引发 Discours 阅读详情

相关推荐

Docker Engine实操入门:从docker: command not found到可调试容器

容器技术本质是操作系统级虚拟化,依托Linux namespaces与cgroups实现进程隔离;Docker Engine作为最主流的容器运行时,封装了runc等底层能力,提供统一CLI接口与镜像管理机制;其技术价值在于降低容器化门槛、保障环境一致性,并支撑CI/CD与微服务架构落地;典型应用场景包括本地开发调试、PHP/Java应用容器化、Docker Compose多服务编排及向Kubernetes平滑演进;本文聚焦Docker Engine安装配置、daemon.json深度调优、镜像加速、权限与网

weixin_34008933的博客 388

ubuntu系统(5):服务器中docker和image的关系及常用命令

今天给刚进组的师弟找入门工具教程的时候找到了很久之前的笔记,有需要的惠存。

共同学习,共同进步。 1654

docker run hello-world 原理与排错:Docker 环境验证黄金标准

Docker 容器技术的核心在于端到端的运行时闭环验证,而 docker run hello-world 正是这一闭环的最小可行诊断单元。它不仅检验 CLI 与 daemon 的通信能力,更串联镜像拉取、存储驱动、命名空间隔离、runc 运行时等底层机制,构成完整的容器生命周期验证链路。其轻量(2.4KB)、确定性(硬编码输出)、可观察性(逐阶段日志)三大特性,使其成为 Linux 权限配置、网络代理设置、镜像仓库连通性等高频问题的首道筛查工具。在 DevOps 实践与企业级容器部署中,该命令实质承担着环境

cumo7370的博客 442

docker创建ubuntu16.04容器(上)

1.创建新的容器名字为face_reg,实现交互式-i -t,创建之后让容器启动命令:/bin/bash sudo docker run -i -t --name=face_reg ubuntu:16.04 /bin/bash sudo docker ps;查看已经启动的容器; sudo docker ps -a:查看已经创建的全部容器,包括没有启动的容器; sudo docker run -it --name u16-d1 --privileged -p 10023:22 -p 10081.

qq_27245699的博客 1138

Docker Engine启动失败排查与容器化基线建设实战

Docker Engine是容器技术的底层运行时,其稳定启动是所有容器化实践的前提。它基于Linux内核cgroups和namespaces实现资源隔离与进程管理,技术价值在于提供轻量、可移植、可复现的运行环境。在开发、测试、运维及Kubernetes集群部署等场景中,Engine状态直接决定容器能否正常创建、网络是否连通、存储是否挂载成功。本文聚焦真实交付中高频问题——如'docker desktop一直starting the docker engine'、'virtualization support

GOBY 栏目 409

Docker底层原理与生产级实践:从内核隔离到镜像安全

容器化是现代软件交付的核心范式,其本质依托Linux内核的namespaces进程隔离、cgroups资源控制与OverlayFS分层存储三大机制。理解这些底层原理,才能真正掌握Docker为何能实现轻量级虚拟化、环境一致性与快速分发。技术价值在于解耦开发与运行环境、加速CI/CD流水线、支撑微服务弹性伸缩。典型应用场景包括本地开发环境复现、Kubernetes集群应用封装、私有镜像仓库搭建及多阶段构建优化。本文深入剖析Docker Engine、containerd与runc的分层架构,并结合Ubuntu

weixin_33737134的博客 391

在ubuntu 16.04 LTS 上创建自己的 ubuntu core image 镜像

本文首发 nagle.cn snap core 学习交流微信群(微信群二维码易过期,加微信号:mirco1101 ) csdn 上未排版,如果乱码请查看最新: 个人笔记 零、前言 创建自己的ubuntu core image 镜像是通过从snap store 拉取官方的 core snap(core 16)、 kernel snap(pc-kernel)、 gadget snap(pc) ...

u012481607的专栏 1695

Docker容器化技术从入门到实战:核心概念、安装部署与项目应用指南

容器化技术是现代软件开发和运维中的核心概念,它通过操作系统层虚拟化原理,实现了应用运行环境的轻量级隔离与标准化封装。这项技术的核心价值在于解决了开发与生产环境的一致性问题,显著提升了资源利用率和部署效率,已成为微服务架构和云原生应用的基石。在工程实践中,Docker作为主流的容器化平台,通过镜像、容器、仓库和Dockerfile等核心组件,将应用及其依赖打包成可移植的单元,实现了“一次构建,处处运行”。其应用场景广泛覆盖从个人开发测试到企业级持续集成/持续部署流程。本文聚焦于Docker的实战指南,系统讲解

cuankuangzhong6373的博客 438

What is Docker? (什么是 Docker?)

What is Docker? (什么是 Docker?)

程永强 296

ISO15118-20协议测试实战:用Efficient XML库验证26条命令编解码(附完整代码)

本文分享了ISO15118-20协议测试实战经验,重点探讨了使用Efficient XML库对26条命令进行EXI编解码验证的过程。通过搭建测试环境、编写自动化程序并与官方工具链进行交叉比对,文章深入分析了4条命令编码结果不一致的原因,并提供了完整的排查思路与C代码示例,旨在帮助开发者确保电动汽车充电通信的协议一致性。

weixin_29284657的博客 109

A-Level CS 计算机科学 考试知识点——考试介绍&第1章

前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若需要A-Level CS 计算机科学考试辅导也可以私信我。 目录 关于A-Level CS 计算机科学考试 考试简介 考试内容 考试时间 评分情况 第1章 信息表示 本章学习内容 1.01 数字系统 1.02 数字的内部编码 整数编码(Coding for integers) 二进制编码的十进制(Binary coded decimal——BCD) 1.03.

王俊的博客 6458

Docker 学习:术语、使用、Compose、Swarm

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

freeking101的博客 6169

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 714

Open-Elevation容器化运维:Docker Compose与Kubernetes部署策略

Open-Elevation作为一款免费开源的Google Elevation API替代方案,提供了灵活的自托管能力。本文将详细介绍如何通过Docker Compose实现快速部署,以及如何将其迁移到Kubernetes环境实现规模化运维,帮助用户轻松搭建属于自己的高程数据服务。 ## 📦 Docker Compose:快速部署Open-Elevation服务 ### 环境准备与仓库克隆

gitblog_00990的博客 283

STM32H743的ADC还能这么玩?定时器触发+DMA搬运,构建低CPU占用的数据流

本文深入探讨了STM32H743微控制器中ADC的高效使用方法,通过定时器触发和DMA搬运技术实现低CPU占用的数据流采集。详细解析了硬件架构、CubeMX配置步骤及高级优化技巧,包括双缓冲技术和多ADC同步采样,适用于电机控制、音频采集等高性能应用场景。

weixin_30698527的博客 647

Shopee前端反爬三要素:x-sap-Ri、x-sap-Sec与af-ac-enc-dat深度解析

电商前端反爬机制本质是运行时环境可信验证,其核心在于动态生成的请求指纹、会话签名与行为加密载荷。这类机制不依赖静态Token,而是基于浏览器真实交互(如鼠标轨迹、页面可见性、时间精度)实时计算,体现JS运行时环境不可模拟性。技术价值在于将风控前移至客户端,大幅提升自动化绕过成本;典型应用场景包括商品价格监控、竞品数据采集与合规爬虫开发。本文聚焦Shopee实战案例,深入拆解x-sap-Ri(设备+行为哈希指纹)、x-sap-Sec(动态密钥签名)及af-ac-enc-dat(AES加密行为载荷)三大字段的生

weixin_29015127的博客 407

Sunshine 容器化部署全解析:Docker 镜像标签、构建方式与端口映射实战指南

> 本文以 LizardByte Sunshine 官方 Docker 说明([DOCKER_README.md](https://link.gitcode.com/i/c9a838703496040bff33ecd30ec019ca))为骨架,结合作品仓库中的 [debian.dockerfile](https://link.gitcode.com/i/b06516c5d30242c5ea86a

gitblog_00004的博客 1059

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

WSL2 Ubuntu 安装Hermes Agent

文章摘要:Hermes Agent安装与使用指南 本文详细记录了开源AI代理Hermes Agent的完整安装流程及常见问题解决方案。主要内容包括:1) 提供官网、镜像站及文档链接;2) 分步骤说明Ubuntu/WSL2环境下的安装过程,包含网络问题处理方案;3) 演示手动Git安装和国内镜像安装两种方法;4) 展示交互式聊天、控制台管理、日志查看等核心功能;5) 提供网络代理配置、API连接失败等典型问题的排查方法。关键点:需通过手动Git克隆解决仓库拉取超时问题,安装后需保持网络畅通才能正常使用AI功能

589

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5859

3.1 快速启动Flink集群

在本实战中,我们将快速启动Apache Flink 1.13.0集群,并在Hadoop集群环境中提交作业。首先,我们会在本地下载Flink安装包并上传至云主机,解压并配置环境变量。接着,我们将启动Flink集群,通过访问Web UI进行监控管理。然后,我们会配置集群,将Flink分发到从节点,并在集群上提交作业。最后,我们将通过命令行提交作业,并在Web UI上查看任务节点的输出结果。这个过程涵盖了Flink集群的部署、配置和作业提交,为大数据处理提供了一个完整的实战经验。

howard2005的专栏 727

Chat2DB 部署指南:3 种方案,桌面、Docker、源码一次跑通

新机器到手,你又要翻找数据库客户端的安装包?装完还得配代理、导连接、调 AI 模型。Chat2DB 部署其实三步就能开工。它是个本地优先的 SQL 客户端,支持 40+ 数据库,还能接你自己的 AI 模型来生成、解释和优化 SQL。 [![Chat2DB 部署背景](https://raw.gitcode.com/GitHub_Trending/ch/Chat2DB/raw/eb0f965b37

gitblog_01095的博客 391

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LibrePhotos Docker 部署体系解析:镜像分层、Compose 配置与 GPU 构建实践

本文以 LibrePhotos 仓库中贡献者文档 [docker.md](https://link.gitcode.com/i/55e8291bbbd1148fe8ddbe383f7c9c12) 为主体,系统讲解该项目 `deploy/` 目录下的容器化部署体系:两层后端镜像(base 系统依赖层 + 应用层)的职责划分、生产/开发两套 Compose 文件的差异、Nginx 反向代理的路由分工,

gitblog_00245的博客 1067

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

一键装齐 VC++ 运行库:VisualCppRedist AIO 从安装到静默部署完整指南

程序一运行就弹出"应用程序无法正常启动 (0xc000007b)",或者提示缺少 `msvcp140.dll`——**VisualCppRedist AIO** 是把 2005 到 2022 官方 VC++ 运行库打进单个 exe 的自解压安装器。从最简 3 步安装、按需定制,到企业静默部署,一次讲清。 ## 运行库为什么总缺 ### 缺的根源在哪 - **版本多且互不替代**:2005 到

gitblog_00875的博客 463

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Docker镜像容器卷清理实战:分层策略与跨平台避坑指南

Docker资源管理是容器化运维的基础能力,其核心在于理解镜像、容器、卷三者间的依赖关系与生命周期。镜像作为只读模板,其悬空层和构建缓存会持续占用磁盘;容器作为运行实例,停止后仍持有匿名卷和网络资源;卷则分为命名卷(持久化关键数据)与匿名卷(临时挂载),误删将导致数据库丢失。技术价值体现在空间回收、系统稳定性提升及CI/CD流水线效率优化。典型应用场景包括开发环境磁盘告警处理、Linux服务器零停机维护、Docker Desktop在Windows/macOS上的虚拟磁盘瘦身。本文聚焦docker prun

weixin_30764771的博客 380
上一篇: Way to Go
下一篇: RabbitMQ性能测试
nellson
博客等级 码龄20年 48粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值