Docker 基础 - 2
容器操作系统类型
Busybox
集成了一百多个最常用 Linux 命令和工具的软件工具箱.
包含cat
echo
grep
find
mount
telnet
等
Busybox 是Linux 系统的瑞士军刀
Debian/Ubuntu
CentOS/Fedora
CoreOS
Linux发行版, 针对容器技术.
创建自定义操作系统的镜像
基于commit 命令创建
支持用户提交自己对容器的修改, 并生成新的镜像. 命令格式为:
docker commit CONTAINER [REPOSITORY[:TAG]]
创建步骤
使用OS镜像创建容器
配置软件源为国内软件源, 如 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
执行
apt-get update
更新软件包缓存通过
apt-get
安装服务(比如安装 ssh):apt-get install openssh-server
创建目录:需要目录
/var/run/sshd
存在, 手动创建:mkdir -p /var/run/sshd
. 此时已经可以启动服务:/usr/sbin/sshd -D &
修改服务配置, 取消pam登陆限制:
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
其他操作:在 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
其他步骤:创建自动启动的 SSH 服务的可执行文件
run.sh
, 并添加可执行权限:vi /run.sh; chmod +x run.sh
#!/bin/bash
/usr/sbin/sshd -D
最后, 退出容器
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 创建(重点关注)
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 编写.
最新文章
- TAC 坦克队
- bzoj3262: 陌上花开(树套树)
- Linux查看系统信息命令汇总
- 在jsp页面中实现格式化数字,百分比,货币
- github orgmode
- javascript 兼容各个浏览器的事件
- 并发编程-JUC之Atomic
- 巧用std::shared_ptr全局对象释放单例内存
- JSP、EL表达式的入门(要用)
- rsync的man手册(未完成)
- 3d图像坐标轴及css3属性的讲解
- Android--将实体类转化成Json和Map的基类
- 阿里八八Alpha阶段Scrum(2/12)
- 解决eclipse中断点调试不起作用的问题
- sql多行合并成一行用逗号隔开,多表联合查询中子查询取名可重复
- linux性能系列--块设备
- 拓扑排序 最大字典序+优先队列 BZOJ 4010
- python - 实现文本分类[简单使用第三方库完成]
- svn稀疏目录--通过设置工作目录的深度(depth)实现目录树的部分签出
- angular2-生命周期钩子函数
热门文章
- redux中间件
- ubuntu 基本指令
- mycat搭建
- Day09:switch——case结构的使用详解
- 【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法
- 计算机系统大作业:Hello的一生
- win10系统VMWare16 Pro 安装CentOS8
- 带你从入门到精通学习WireShark
- (GCC) C++代码中使用#pragma GCC optimize / #pragma G++ optimize
- ArcObjects SDK开发 005 ArcObjects SDK中的插件式架构