容器操作系统类型

Busybox

集成了一百多个最常用 Linux 命令和工具的软件工具箱.

包含cat echo grep find mount telnet

Busybox 是Linux 系统的瑞士军刀

Debian/Ubuntu

CentOS/Fedora

CoreOS

官网链接

Linux发行版, 针对容器技术.

创建自定义操作系统的镜像

基于commit 命令创建

支持用户提交自己对容器的修改, 并生成新的镜像. 命令格式为:

docker commit CONTAINER [REPOSITORY[:TAG]]

创建步骤

  1. 使用OS镜像创建容器

  2. 配置软件源为国内软件源, 如 ali

    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
  3. 执行 apt-get update 更新软件包缓存

  4. 通过 apt-get 安装服务(比如安装 ssh): apt-get install openssh-server

  5. 创建目录:需要目录 /var/run/sshd 存在, 手动创建: mkdir -p /var/run/sshd. 此时已经可以启动服务: /usr/sbin/sshd -D &

  6. 修改服务配置, 取消pam登陆限制: sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

  7. 其他操作:在 root 用户目录下创建 .ssh 目录, 并复制需要登陆的公钥信息(1. 直接从用户目录下的 .ssh/id_rsa.pub 文件拷贝 2. ssh-keygen -t rsa 生成)到 authorized_keys 中: mkdir -p /root/.ssh && vi /root/.ssh/authorized_keys . 公钥信息格式示例如下:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtuqN2zGhhVBTVCCoNa8hPvGu3xo8+UsqG+AxW0jEUvQYhr6/IEXiIAk41HzjeEZVYKGGr08Jh8n5xxmBW4AyH/1DaU1Ej3m0dOuZ09HAUJfY7WnrtO8GrZtQT2KhI6P2pwnOJU3fm6eRLLVzL2oSyhBQ8ca/njwAyHXOVJiPOpO3cokOPa2BzziWqslmFKyWQdaf6rBwYKF+2eoFrVk0QepoJtc6OfgIyuQEi+gJXste6QiPJRYgFQoYlv/bzYnnrG7Zs0qVCi6SfIRF7twVXUNW/hkPbGxsKZTLAvITS3tOR2nRt6pibT46RM/+ebiuT0fZ/e/xl3w4QygGTB2Xl casey@ubuntu
  8. 其他步骤:创建自动启动的 SSH 服务的可执行文件 run.sh , 并添加可执行权限: vi /run.sh; chmod +x run.sh

    #!/bin/bash
    /usr/sbin/sshd -D
  9. 最后, 退出容器 exit

保存镜像

sudo docker commit <container id> ubuntu-sshd

启动镜像

sudo docker run -p 10122:22 -d ubuntu /run.sh

使用

可以通过 ssh 服务进行连接

ssh <container ip> -p 10122 -l root

使用 Dockerfile 创建(重点关注)

Docker hun 上我的ubuntu-sshd镜像

Dockerfile示例

## OS镜像
FROM ubuntu:16.04 ## 维护者
LABEL maintainer="CaseyCui cuikaidong@foxmail.com" ## 1. 备份官方源
## 2. 创建/var/run/sshd文件夹(正常启动SSH服务需要)
## 3. 创建root用户目录下.ssh目录
RUN mv /etc/apt/sources.list /etc/apt/sources.list.default \
&& mkdir -p /var/run/sshd \
&& mkdir -p /root/.ssh ## 拷贝阿里镜像源信息到/etc/apt/sources.list
COPY sources.list /etc/apt/sources.list ## 拷贝公钥到/root/.ssh目录
COPY authorized_keys /root/.ssh/authorized_keys ## 拷贝运行脚本run-sshd.sh到根目录下
COPY run-sshd.sh /run-sshd.sh ## 1. 安装openssh-server
## 2. 修改时区为**中国/上海**(ubuntu新版本需要安装 *tzdata*,通过**链接**方式使之生效)
## 3. 修改SSH服务的安全登录配置,取消pam登录限制
## 4. run-sshd.sh增加执行权限
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
openssh-server \
tzdata \
&& rm -rf /var/lib/apt/lists/* \
&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata \
&& sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd \
&& chmod +x /run-sshd.sh ## 开放端口
EXPOSE 22 ## 增加挂载点/tmp
VOLUME /tmp ## 设置启动命令
CMD ["/run-sshd.sh"]

自动化修改时区

ubuntu 16.04 之前:

echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

ubuntu 16.04 及之后:

&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata

前提: 需要安装 tzdata 包:

apt-get -yq install tzdata

ENV 环境变量

ENV环境变量全局生效, 有时可能会有负面效果.

如: ENV DEBIAN_FRONTEND noninteractive 会把所有操作设置为非交互式的.

尽量不要像上边那样使用, 建议的用法是: 在有需要时, 和执行的命令一起执行, 如:

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends tzdata # -q: quiet

.dockerignore文件

## 忽略文件夹 .git/
.git ## 忽略临时文件
*.swp

run.sh 脚本

##!/bin/bash
/usr/sbin/sshd -D

创建镜像

在 Dockerfile 目录下执行:

sudo docker build -t caseycui/ubuntu-sshd .

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Docker 基础 - 2的更多相关文章

  1. Docker - Docker基础命令及使用

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...

  2. 【云计算】Docker云平台—Docker基础

    Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...

  3. Docker基础技术:Linux Namespace(下)

    在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...

  4. Docker 基础技术:Linux Namespace(下)

    导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...

  5. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  6. Docker 基础 : 镜像

    目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...

  7. Docker 基础技术之 Linux cgroups 详解

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...

  8. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

  9. 中标麒麟龙芯平台--docker基础镜像制作

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...

  10. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...

随机推荐

  1. NLP之基于logistic回归的文本分类

    数据集下载: 链接:https://pan.baidu.com/s/17EL37CQ-FtOXhtdZHQDPgw 提取码:0829 逻辑斯蒂回归 @ 目录 逻辑斯蒂回归 1.理论 1.1 多分类 1 ...

  2. 沁恒CH32V003F4P6 开发板上手报告和Win10环境配置

    CH32V003 沁恒最近推出的低价CH32V003系列, 基于青稞RISC-V2A内核, 48MHz主频, 2KB SRAM, 16KB Flash, 工作电压兼容3.3V和5V. 主要参数如下 S ...

  3. 狂神说mysql笔记

    1.mysql 基本操作 Windows-->Mysql5.7打开 输入用户名和密码 查看数据库 :show databases:查询所有数据库,记住一定要加分号结尾 这里必须全部为 英文空格 ...

  4. 一、docker的介绍

    一.虚拟化和容器 虚拟化介绍 操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作执行环境.操作系统层的虚拟化是操作系统内核直接提供的虚拟化,虚拟出的操作系统之间共享底层宿主操 ...

  5. 基于python的数学建模---logicstic回归

    樱花数据集的Logistic回归 绘制散点图 import matplotlib.pyplot as plt import numpy as np from sklearn.datasets impo ...

  6. [排序算法] 堆排序 (C++)

    堆排序解释 什么是堆 堆 heap 是一种近似完全二叉树的数据结构,其满足一下两个性质 1. 堆中某个结点的值总是不大于(或不小于)其父结点的值: 2. 堆总是一棵完全二叉树 将根结点最大的堆叫做大根 ...

  7. os sys json模块

    Day19 os sys json 今日内容概要 os模块 sys模块 json模块 json模块实践 今日内容详细 一.os模块 os模块主要与代码运行所在的操作系统打交道 import os 1. ...

  8. Kafka Connect学习

    一.基础介绍 1.概念 2.Debezium 为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台.可以消费数据库每一个行级别(row-level)的更改. ...

  9. 【每日一题】【链表.next.next判空条件】141. 环形链表/NC4 判断链表中是否有环-211120/220123

    给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链 ...

  10. 【Impala】概念、原理、内外部shell、建库建表、分区、查询、自定义函数、存储压缩

    一.基本概念 1.介绍 对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能 2.优缺点 优点:基于内存运算,无需写入磁盘,无需转化为MR,支持Data Locality调度(数据和计算在 ...