前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 镜像安装配置 zsh

Docker 镜像安装配置 zsh

作者头像
zhonger
发布于 2022-10-28 03:05:06
发布于 2022-10-28 03:05:06
1.9K00
代码可运行
举报
文章被收录于专栏:仲儿的专栏仲儿的专栏
运行总次数:0
代码可运行

前言

  Docker 具有易迁移、镜像容量小的优势,已被广泛应用于快速应用部署。对于开发者而言,Docker 的这一优势也同样适用于开发环境的快速搭建。因此,具有个性化的 Docker 镜像将会为开发者使用提供更大的便利。笔者习惯在 Mac 或者服务器上使用非 root 的 sudo 用户和 zsh,因此也希望在用于开发环境的 Docker 镜像也有这样的特点。

  为什么要使用非 root 的 sudo 用户,而不直接使用 root 用户?Docker 镜像默认提供的一般都是 root 用户,而所有人想要把应用 Docker 化,在 Docker 镜像中用于运行程序的一般不能是 root 用户。这也是因为如果使用 root 用户的话,应用一旦被他人渗透取得程序执行权限,该 Docker 实例运行的所在宿主机也可能被入侵。因此,大部分开发者都应该养成使用非 root 的 sudo 用户的习惯,既享有 sudo 权限,也要严格控制 Docker 镜像中的权限。

  为什么要使用 zsh 而不使用默认的 bash?一方面的原因是,bash 对于大小写的自动补全比较严格,不会像 zsh 那样可以无视大小写进行自动补全推荐。另一方面的原因是,bash 的历史功能只能在前后命令之间切换,而 zsh 可以根据历史命令进行自动补全推荐从而突破这一限制。当然,zsh 所支持的主题、插件也比较丰富,可以适应不同人的审美和使用需求。

安装配置

  笔者想要构建的开发环境基础 Docker 镜像主要的特点是以上两点,具体来说是:

  • 具有 sudo 权限的非 root 用户:ubuntu
  • 执行 sudo 命令时不需要输入密码,即免密 sudo
  • ubuntu 用户的默认 shell 是 zsh

  因此,所对应的 Docker 镜像生成配置文件(Dockerfile)如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM ubuntu:latest

LABEL maintainer="zhonger zhonger@live.cn"

# Create a no-passowrd sudo user
RUN apt update \
    && apt install -y sudo \
    && useradd -m ubuntu -s /bin/bash && adduser ubuntu sudo \
    && echo "ubuntu ALL=(ALL) NOPASSWD : ALL" | tee /etc/sudoers.d/nopasswd4sudo

# Adjust Timezone
ENV DEBIAN_FRONTEND=noninteractive
RUN apt install -y tzdata \
    && ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

USER ubuntu
WORKDIR /home/ubuntu

# Install zsh
RUN sudo apt install -y git zsh \
    && git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh \
    && cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc \
    && sed -i "s/robbyrussell/bira/" ~/.zshrc \
    && sudo usermod -s /bin/zsh ubuntu


# Clean apt-cache
RUN sudo apt autoremove -y \
    && sudo apt clean -y \
    && sudo rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["/bin/zsh"]

  使用以下命令编译生成 Docker 镜像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build . -t zhonger/ubuntu:latest

  使用以下命令运行一个 Docker 实例验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -ti -d --name dev zhonger/ubuntu:latest
docker exec -ti dev /bin/zsh
# 登录后看见 zsh 主题即安装配置 zsh 成功

sudo apt update
# 输入执行命令后立刻执行无需输入密码,表示安装配置免密且具有 sudo 权限的 ubuntu 用户成功

版权声明:如无特别声明,本文版权归 仲儿的自留地 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 Docker 镜像安装配置 zsh 》

本文链接:https://cloud.tencent.com/developer/article/2142979

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java IO 知识整理
由于java I/O库需要很多性能的各种组合,如果这些性能都是用继承来实现,那么每一种组合都需要一个类,这样就会造成大量行重复的类出现。如果采用装饰模式,那么类的数目就会大大减少,性能的重复也可以减至最少。因此装饰模式是java I/O库基本模式。装饰模式的引进,造成灵活性和复杂性的提高。因此在使用java IO库时,必须理解java IO库是由一些基本的原始流处理器和围绕它们的装饰流处理器所组成的。
Abalone
2022/07/14
5920
Java IO 知识整理
【Java 基础篇】Java字节缓冲流详解
在Java中,字节缓冲流是一种用于提高字节流读写效率的流。它们通过在内存中创建缓冲区,减少了与底层设备的直接交互次数,从而提高了读写的速度。本文将详细介绍Java字节缓冲流的原理、使用场景和常用类,并提供一些示例代码。
繁依Fanyi
2023/10/12
4500
Java成神路 —— 字节缓冲流 && 字符流
0. 字符流与字节流 1.字节缓冲流 1.1 字节缓冲流构造方法 1. 字节缓冲流介绍 lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用 lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 2. 构造方法 方法名 说明 BufferedOutputS
繁依Fanyi
2023/05/07
3710
Java成神路 —— 字节缓冲流 && 字符流
夯实Java基础系列16:一文读懂Java IO流和常见面试题
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/08
1.5K0
卧槽,这也太上头了吧!
“老王,Java IO 也太上头了吧?”新兵蛋子小二向头顶很凉快的老王抱怨道,“你瞧,我就按照传输方式对 IO 进行了一个简单的分类,就能搞出来这么多的玩意!”
沉默王二
2021/11/16
3490
卧槽,这也太上头了吧!
梳理Java IO流,攻破NIO的堡垒!【技术创作101训练营】
在上一篇的文章获取不错的浏览量后,继续加更的念头一直徘徊在心中,本来是想花段时间深入学习tomcat的,可是tomcat的源码中就有至关重要的NIO,于是得先整一下NIO,但是NIO的基础是BIO,于是这篇文章就先写IO流吧。
猿小布
2020/09/23
6340
梳理Java IO流,攻破NIO的堡垒!【技术创作101训练营】
【愚公系列】2022年01月 Java教学课程 54-数据缓冲
lBufferOutputStream:该类实现缓冲输出流.通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
愚公搬代码
2022/01/15
2120
【愚公系列】2022年01月 Java教学课程 54-数据缓冲
JavaSE(十二)之IO流的字节流(一)
前面我们学习的了多线程,今天开始要学习IO流了,java中IO流的知识非常重要。但是其实并不难,因为他们都有固定的套路。 一、流的概念       流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行。设备可以是文件,网络,内存等       流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,如果数据的流向是设备至程序称为输入流。       数据以二进制的形式在程序与设备之间流动传输,就
用户1195962
2018/01/18
9490
JavaSE(十二)之IO流的字节流(一)
Java I/O 常用的实现类
FileInputStream类可以将一个文件的内容作为字节流读取,我们看一下源码:
搬砖俱乐部
2019/06/16
9750
java常用的io流_io流java
IO流大家肯定不陌生,简单整理了一下常用IO流基本用法,其他的IO流还有很多以后有时间在整理。
全栈程序员站长
2022/11/01
1.7K0
java常用的io流_io流java
java中IO流详细解释?
BufferedReader的readLine()&BufferedWriter的newLine()方法
技术从心
2019/08/07
1.8K0
Java基础17:Java IO流总结
本文介绍了Java IO流的基本概念,使用方法,以及使用的注意事项等。帮助你更好地理解和使用Java的IO流。
程序员黄小斜
2019/04/07
1K0
Java基础入门笔记08——文件流,IO流,FileIputStream类,FileOutputStream类,缓冲流,转换流,标准输入输出流,打印流,数据流,对象流,随机存储流
**绝对路径:**直接指明文件在硬盘上真正存在具体位置或者是以Web站点根目录为参考的完整路径。绝对路径是规定死的目录,直观清晰,但被网页引用的文件不能随意挪动。当多个网页引用同一个文件时,所使用的路径都是相同的。
全栈程序员站长
2022/09/21
1.6K0
Java基础入门笔记08——文件流,IO流,FileIputStream类,FileOutputStream类,缓冲流,转换流,标准输入输出流,打印流,数据流,对象流,随机存储流
java缓冲流
使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。经常使用的是readLine()方法,表示一次读取一行数据。
IT工作者
2022/05/09
8720
Java IO 的分类、使用场景、缓冲流、使用例子、文件拷贝
Java程序在执行的时候,是在内存进行的,外部的数据需要读写到内存才能处理;而在内存中的数据是随着程序结束就消失的,有时候我们也需要把数据输出到外部文件。
HaC
2021/02/04
1.6K0
Java IO 的分类、使用场景、缓冲流、使用例子、文件拷贝
面试被虐,临走时面试官甩给我这篇介绍IO的文章
现在很多项目的开发都会用到SpringBoot,而SpringBoot的自动配置的底层原理实现就在于,Java提供的IO流将META-INF/spring-autoconfigure-metadata.properties文件中的数据读取出来,所以适当了解Java的IO流是十分有必要的。本文的介绍内容如下:
Java_老男孩
2020/06/28
4860
Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结一:输入输出流 Java IO流学习总结二:File Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream Java IO流学习总结七:Commons IO 2.5-FileUtils
全栈程序员站长
2022/11/01
9310
Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
14 Java IO流
创建一个 FileWriter 对象,该文件会在指定目录下创建. 如果同名则覆盖, 除非构造方法第二个参数append 为 true; 由此可得默认为false.
acc8226
2022/05/17
4460
14 Java IO流
Java学习笔记之字节缓冲流&字符流&IO流练习
    BufferOutputStream:该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节频繁调用系统底层
Jetpropelledsnake21
2021/12/31
5610
Java学习笔记之字节缓冲流&字符流&IO流练习
IO流
不同设备之间的数据传输就是流,可以抽象理解供水厂到家庭之间的水管,水(数据)在管道传输,就成了流
晚上没宵夜
2020/03/11
4020
推荐阅读
相关推荐
Java IO 知识整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验