乐趣区

关于运维:Docker-基础-2

容器操作系统类型

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 编写.

退出移动版