使用 Dockefile 建立一個帶有 ssh 的 ubuntu 鏡像

20190110 繼續昨天 Commit 方式建立一個帶有 ssh 的 ubuntu 鏡像,使用 Dockefile 來完成

理解

1. Docker 容器使用 ssh 這個思路仍是虛擬機的思路
  一個 Docker 容器就是一個服務
  一個 Docker 容器就是一個進程(執行程序)
  使用 ssh 登陸到容器,確實很差理解!

2.容器既然是一個隔離的 sandbox,也只有 ssh 進去才能夠最直觀的瞭解他的環境

3.目前學習到這裏還只是一些孤立的 Docker 容器
  孤立的 Docker 容器能有什麼做用?
  一大堆不一樣形狀的積木,只有拼接起來才能知道他們有什麼用處!

4.只有面向一個 project ,才能理解 service 的用途!
  只有面向一個 task ,才能理解 project 的用途!

5. Dockerfile 能夠創造各類容器(service),要讓他們組合出來一個 project
   還要繼續學習 Compose

一、準備一個空目錄

mkdir ubuntu_ssh
cd sshd_ubuntu/
touch Dockerfile start.sh

start.sh 文件,加入一條 shell 命令
vim start.sh
	#!/bin/bash
	# by wzh 20190108
	/usr/sbin/sshd -D

二、添加如下內容

#This dockerfile uses the ubuntu latest(18.04)
# by wzh 20190110
FROM ubuntu
MAINTAINER Username 13501062476@139.com
RUN apt-get update -y

# 安裝 sshd 和幾個基礎工具
RUN apt-get install openssh-server vim net-tools iputils-ping iproute2 -y && mkdir -p /var/run/sshd

# 插入一行:容許 root 登陸 PermitRootLogin yes
RUN sed -i "N;92a PermitRootLogin yes" /etc/ssh/sshd_config

# 清除殘留
RUN apt-get clean && apt-get autoclean && apt-get autoremove

# copy 開機啓動 sshd 腳本
ADD start.sh /start.sh
RUN chmod 755 /start.sh

EXPOSE 22
CMD [/start.sh]

三、開始 build

** 這是第三次嘗試成功的記錄,前兩次失敗建大記錄在後面

docker build -t ubuntu1804-ssh/v3 .
返回結果:
	...
	Successfully built c4274a7717b4
	Successfully tagged ubuntu1804-ssh/v2:latest`

四、創建容器

docker run -d -p 10033:22 --name ubuntu-ssh4 ubuntu1804-ssh/v3 /start.sh

五、進入容器,確認 sshd,設置密碼

docker exec -it ubuntu-ssh4 bash

確認 sshd 服務
ps -ef |grep ssh

設置 root 密碼 (ubuntu18.04 這是必須的!)
** 安全起見,不在 Dockerfile 裏面設置 root 密碼
passwd

查看容器 ip
ip a
	18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
		link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
		inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
		   valid_lft forever preferred_lft forever

六、 宿主機測試

ssh root@172.17.0.2

七、外網測試

ssh root@192.168.1.192 -p 10033

八、錯誤處理記錄

1). 第一次Dockerfile apt-get mei you沒有加上 -y
docker build -t ubuntu1804-ssh/v2 .
出現如下錯誤
	`After this operation, 158 MB of additional disk space will be used.
	Do you want to continue? [Y/n] Abort.
	The command '/bin/sh -c apt-get install openssh-server vim net-tools iputils-ping iproute2&& mkdir -p /var/run/sshd' returned a non-zero code: 1
`
** 緣由:build 執行中不能再處理 apt 交互

2). 加上 -y,以後再來 build
仍是出現錯誤!
	`E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/s/systemd/systemd_237-3ubuntu10.9_amd64.deb  Hash Sum mismatch
	   Hashes of expected file:
		- SHA256:be99852295ebb54570376f56df1e9481a40264b7c8d05dfab56a7805394f5793
		- SHA1:789ee5d1b3e47be7489271524dbf22e9d37ffb83 [weak]
		- MD5Sum:21cdcd6ccf6b635db5273b521a03b2ac [weak]
		- Filesize:2895496 [weak]
	   Hashes of received file:
		- SHA256:1a6e975dd88105609a20ab3fa1c961d735662716adb8e8c6303eac2017d3f802
		- SHA1:6f179e08e2a2d0871c6a1ad7ff30601ce21d44f9 [weak]
		- MD5Sum:f00fd875f5a0e29421ec25c9d85ee559 [weak]
		- Filesize:2895496 [weak]
	   Last modification reported: Mon, 19 Nov 2018 16:38:58 +0000
	E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
`
** 緣由: 以前錯誤鏡像已經存在!必須先刪除掉!
查看發現 2 個 <none> 鏡像
ssh$ docker images
`	REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
	<none>                       <none>              68624520350a        13 minutes ago      111MB
	<none>                       <none>              6453f0ba74e9        17 minutes ago      111MB
	...`

3). 刪除以上 2 個 鏡像,發現刪除不了!
	先刪除失敗的 容器
	再刪除失敗的 鏡像

4). 第三次從新 build
	docker build -t ubuntu1804-ssh/v2 .

	中途出現紅色
	debconf: delaying package configuration, since apt-utils is not installed

	終於看到了
	Successfully built c4274a7717b4
	Successfully tagged ubuntu1804-ssh/v2:latest

5). 有個疑問:
	前面兩次都出現錯誤,產生了 <none> 的鏡像能夠理解,怎麼會產生新的容器呢?
相關文章
相關標籤/搜索