「一」创建一个带 ssh 服务的基础镜像(修订版)--使用「docker commit」创建

在介绍如何创建带 ssh 服务的基础镜像之前,我们想回顾一下之前介绍过的内容,其中提到有三种创建镜像的常用办法:

  1. 从文件系统导入
  2. 从现有容器使用「docker commit」提交
  3. 使用 dockerfile 文件 build

本章将主要介绍后面 2 种方法。

步骤如下:

$ sudo docker run -ti ubuntu:14.04  /bin/bash
#首先,使用我们最熟悉的 「-ti」参数来创建一个容器。
[email protected]:/# sshd
bash: sshd: command not found
#使用 sshd 开启 ssh server 服务,发现没有安装这个服务,注意,我们在使用 「-ti /bin/bash」 进入容器后,获得的是 root 用户的bash
[email protected]:/# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package openssh-server
#现有缓存里面也找不到该软件,看来官方精简的够彻底啊
[email protected]:/# apt-get update
#使用「apt-get update」来更新 apt 软件源信息,如果觉得默认的国外源速度慢的话,也可以替换为国内 163\souhu 等镜像的源。
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Ign http://archive.ubuntu.com trusty-proposed InRelease
...
Fetched 20.4 MB in 2min 55s (116 kB/s)
Reading package lists... Done
[email protected]:/# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  ca-certificates krb5-locales libck-connector0 libedit2 libgssapi-krb5-2
  libidn11 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libwrap0 libx11-6
  libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 ncurses-term
  openssh-client openssh-sftp-server openssl python python-chardet
  python-minimal python-requests python-six python-urllib3 python2.7
  python2.7-minimal ssh-import-id tcpd wget xauth
Suggested packages:
  krb5-doc krb5-user ssh-askpass libpam-ssh keychain monkeysphere rssh
  molly-guard ufw python-doc python-tk python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  ca-certificates krb5-locales libck-connector0 libedit2 libgssapi-krb5-2
  libidn11 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libwrap0 libx11-6
  libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 ncurses-term
  openssh-client openssh-server openssh-sftp-server openssl python
  python-chardet python-minimal python-requests python-six python-urllib3
  python2.7 python2.7-minimal ssh-import-id tcpd wget xauth
0 upgraded, 38 newly installed, 0 to remove and 29 not upgraded.
Need to get 7599 kB of archives.
After this operation, 35.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
#安装一个 ssh 服务,都需要下载安装这么多的依赖
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libedit2 amd64 3.1-20130712-2 [86.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty-proposed/main libkrb5support0 amd64 1.12+dfsg-2ubuntu5 [30.0 kB]
Get:3 http://archive.ubuntu.com/ubuntu/ trusty-proposed/main libk5crypto3 amd64 1.12+dfsg-2ubuntu5 [79.9 kB]
Get:4 http://archive.ubuntu.com/ubuntu/ trusty/main libkeyutils1 amd64 1.5.6-1 [7318 B]
Get:5 http://archive.ubuntu.com/ubu
...
Updating certificates in /etc/ssl/certs... 164 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
Processing triggers for ureadahead (0.100.0-16) ...
[email protected]:/# mkdir -p /var/run/sshd
#创建 ssh 服务运行需要的目录
[email protected]:/# /usr/sbin/sshd -D &
#在后台运行 ssh 服务
[1] 3254
[email protected]:/# netstat -tunlp
#查看服务端口是否正常
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
[email protected]:/# mkdir root/.ssh
[email protected]:/# vi /root/.ssh/authorized_keys
#复制需要登陆到这个台机器的公钥到 authorized_keys 文件中
[email protected]:/# sed -ri ‘s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g‘ /etc/pam.d/sshd
#修改 ssh 服务的安全登陆配置
[email protected]:/# vi /run.sh
#创建可执行文件run.sh,详细内容见后文
[email protected]:/# chmod +x run.sh
#添加可执行权限
[email protected]:/# exit
exit
$ sudo docker commit  fc1 sshd:ubuntu
#使用 「docker commit」 将现在这个容器保存为 sshd:ubuntu 镜像
7aef2cd95fd0c712f022bcff6a4ddefccf20fd693da2b24b04ee1cd3ed3eb6fc
$ sudo docker  images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sshd                ubuntu              7aef2cd95fd0        10 seconds ago      255.2 MB
busybox             latest              e72ac664f4f0        3 weeks ago         2.433 MB
ubuntu              latest              ba5877dc9bec        3 months ago        192.7 MB
#验证一下,我们目前拥有的镜像
$ sudo docker  run -p 100:22  -d sshd:ubuntu /run.sh
#启动容器,并映射端口 100 -->22,100 是宿主主机的端口,22 是容器的 ssh 端口
3ad7182aa47f9ce670d933f943fdec946ab69742393ab2116bace72db82b4895
$ sudo docker ps
#启动成功,可以看到容器运行的详细信息
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                 NAMES
3ad7182aa47f        sshd:ubuntu         "/run.sh"           2 seconds ago       Up 2 seconds        0.0.0.0:100->22/tcp   focused_ptolemy
> ssh 192.168.1.200 -p 100
#在刚才复制公钥的机器上登陆容器
The authenticity of host ‘[192.168.1.200]:100 ([192.168.1.200]:100)‘ can‘t be established.
ECDSA key fingerprint is 5f:6e:4c:54:8f:c7:7f:32:c2:38:45:bb:16:03:c9:e8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[192.168.1.200]:100‘ (ECDSA) to the list of known hosts.
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-37-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

[email protected]:~#
#成功登陆,镜像创建成功。

run.sh 脚本内容

#!/bin/bash
/usr/sbin/sshd -D

更多内容,欢迎关注 www.dockerpool.com

时间: 2024-08-07 12:13:35

「一」创建一个带 ssh 服务的基础镜像(修订版)--使用「docker commit」创建的相关文章

「二」创建一个带 ssh 服务的基础镜像(修订版)--使用 Dockerfile 创建

创建文件夹 首先,创建一个叫做 sshd_ubuntu 的文件夹,用于存放我们的 Dockerfile .脚本文件.以及其他文件. $ mkdir sshd_ubuntu $ ls sshd_ubuntu $ cd sshd_ubuntu/ $ touch Dockerfile run.sh $ ls Dockerfile run.sh 编写 shell 脚本和 authorized_keys 文件 其中脚本文件 run.sh 的内容与上一小节一致 #!/bin/bash /usr/sbin/s

「六」创建一个带 weblogic 服务的基础镜像

Weblogic Weblogic 简介以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器.目前weblogic在世界ap

「五」创建一个带 tomcat 服务的基础镜像(修订版)

Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求.实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运

「四」创建一个带 apache 服务的镜像

Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件.同时 Apache 音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部.也是一个基金会的名称.一种武装直升机等等. 下面是使用 Dockerfile 来创建带 apache 服务的镜像的过程. 创建 apache 文件夹 首先,创建一个叫做 apache_ubuntu 的文件夹,用于存放我们的 Dockerfile

docker创建支持ssh服务的centos镜像

以centos为基础,目的使用ssh服务远程连接docker容器 环境:宿主机centos7,直接搜索docker的centos镜像,下载最新版本 1.先按照docker:yum install -y epel-release yum install -y docker 2.启动docker: systemctl start docker.service 3.使用ps查看docker是否启动 ps aux |grep docker 4.下载centos的docker镜像 docker pull

创建一个带模版的用户控件 V.3

再重构此篇<创建一个带模版的用户控件  V.2>http://www.cnblogs.com/insus/p/4164149.html 让其它动态实现header,Item和Footer. Insus.NET不想所有代码写在InstantiateIn(Control container)方法内的switch分流上.其实是想使用开发设计模式的中介者(Mediator)来拆分它. 拆分为四个方法:ListItemType.Header: ListItemType.Item: ListItemTyp

创建一个带模版的用户控件 V.2

前面有做练习<创建一个带模版的用户控件>http://www.cnblogs.com/insus/p/4161544.html .过于简化.通常使用数据控件Repeater会有网页写好Header,Item,AlternatingItem和Footer.如果需要动态产生列时,我们需要在后台写好模板. 再来复习一下这篇<Repeater控件动态变更列(Header,Item和Foot)信息>http://www.cnblogs.com/insus/archive/2013/03/22

REQUIRES_NEW 如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务 相当于嵌套事务 双层循环那种

REQUIRES_NEW   如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务  相当于嵌套事务 双层循环那种 不管是否存在事务,业务方法总会自己开启一个事务,如果在已有事务的环境中调用,已有事务会被挂起,新的事务会被创建,直到业务方法调用结束,已有事务才被唤醒. 原文地址:https://www.cnblogs.com/classmethond/p/10440510.html

创建一个支持 sshd 服务的 docker 镜像

前言 当我们运行容器后,第一件会想到的事情,就是如何连接容器.一般来说,连接容器的方式大概有四种.分别是attach.exec.ssh 和 nsenter. attach 和 exec 都是 docker 自带的命令,不需要做任何配置. 这篇文章,主要尝试配置一个实现 sshd 服务的镜像.并用这个镜像生成容器,然后验证 ssh 登录的功能. 操作过程 环境说明 宿主机 : ubunt:16.04 用 Dockerfile 文件建立一个镜像 hell[email protected]:~/mys