1

Docker 基础 - 2 - 东风微鸣

 1 year ago
source link: https://www.cnblogs.com/east4ming/p/17066729.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

容器操作系统类型

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 [email protected]"

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK