Docker 基礎

2023-01-25 12:00:38

容器作業系統型別

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 編寫.