「二」创建一个带 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/sshd -D

创建 authorized_keys 文件

$ ssh-keygen
#根据提示生成访问密钥
$ cat ~/.ssh/id_rsa.pub >authorized_keys
#复制公钥到 authorized_keys 文件中

下面是 Dockerfile 的内容及解释

#设置继承镜像
FROM ubuntu:14.04
#提供一些作者的信息
MAINTAINER [email protected]163.com
#下面开始运行命令,此处更改ubuntu的源为国内163的源
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN apt-get update

#安装 ssh 服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri ‘s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g‘ /etc/pam.d/sshd

#复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh

#开放端口
EXPOSE 22

#设置自启动命令
CMD ["/run.sh"]

创建镜像

$ sudo docker build -t sshd:dockerfile .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
^Z
[1]+  Stopped                 sudo docker build -t sshd:dockerfile .
#这里我发现创建的速度好慢,于是暂停创建过程,先查看下本地 images
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sshd                ubuntu              7aef2cd95fd0        12 hours ago        255.2 MB
busybox             latest              e72ac664f4f0        3 weeks ago         2.433 MB
ubuntu              latest              ba5877dc9bec        3 months ago        192.7 MB
#原来我们的 ubuntu 镜像是使用默认的 latest 标签,而我们在 Dockerfile 中一般都是指定版本标签。
$ sudo docker tag ba5 ubuntu:14.04
$ pwd
/home/xxx/sshd_ubuntu
$ sudo docker build -t sshd:dockerfile .
#这里注意一下,在最后还有一个 “.” ,表示使用当前目录的 Dockerfile
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
 ---> ba5877dc9bec
Step 1 : MAINTAINER [email protected]163.com
 ---> Running in 188d74d02d35
 ---> 473eb019b331
Removing intermediate container 188d74d02d35
#使用 Dockerfile 创建,他会帮你删除中间无用的文件层
Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list
 ---> Running in f52e2a583db5
 ---> bd4ceef2ee19
Removing intermediate container f52e2a583db5
Step 3 : RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
 ---> Running in 897d65dfe9be
 ---> 9cd736f11928
Removing intermediate container 897d65dfe9be
Step 4 : RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
 ---> Running in ec3433db813e
 ---> 3fca0b605de4
Removing intermediate container ec3433db813e
Step 5 : RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
 ---> Running in 4a0fe165598f
 ---> f6d1c7af36c8
Removing intermediate container 4a0fe165598f
Step 6 : RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
 ---> Running in 209179c21053
 ---> 0cda758c9f3c
Removing intermediate container 209179c21053
Step 7 : RUN apt-get update
 ---> Running in 1fd40eb66f7b
Ign http://archive.ubuntu.com trusty-proposed InRelease
Get:1 http://archive.ubuntu.com trusty-proposed Release.gpg [933 B]
Get:2 http://archive.ubuntu.com trusty-proposed Release [110 kB]
Get:3 http://archive.ubuntu.com trusty-proposed/main amd64 Packages [160 kB]
...
#为了节约篇幅,删去一些无关紧要的内容
Fetched 11.3 MB in 1min 37s (116 kB/s)
Reading package lists...
 ---> 0f132591eddc
Removing intermediate container 1fd40eb66f7b
Step 8 : RUN apt-get install -y openssh-server
 ---> Running in 399e4ea726d2
Reading package lists...
Building dependency tree...
Reading state information...
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.
Get:1 http://mirrors.163.com/ubuntu/ trusty/main libedit2 amd64 3.1-20130712-2 [86.7 kB]
...
Running hooks in /etc/ca-certificates/update.d....done.
Processing triggers for ureadahead (0.100.0-16) ...
 ---> 62f952643e33
Removing intermediate container 399e4ea726d2
Step 9 : RUN mkdir -p /var/run/sshd
 ---> Running in aa1c4d469284
 ---> e81557dd4887
Removing intermediate container aa1c4d469284
Step 10 : RUN mkdir -p /root/.ssh
 ---> Running in 0626987081d0
 ---> 23882ee06756
Removing intermediate container 0626987081d0
Step 11 : RUN sed -ri ‘s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g‘ /etc/pam.d/sshd
 ---> Running in 3808c650bf85
 ---> 6c0ca1d20d7f
Removing intermediate container 3808c650bf85
Step 12 : ADD authorized_keys /root/.ssh/authorized_keys
 ---> a64bbd8ae617
Removing intermediate container 16e2d93d6ef0
Step 13 : ADD run.sh /run.sh
 ---> 230711022f7d
Removing intermediate container 137e56188d7b
Step 14 : RUN chmod 755 /run.sh
 ---> Running in a876e4ea378e
 ---> 32d74bbb7406
Removing intermediate container a876e4ea378e
Step 15 : EXPOSE 22
 ---> Running in eeaf9352ca11
 ---> 901e3fa9f596
Removing intermediate container eeaf9352ca11
Step 16 : CMD /run.sh
 ---> Running in 48c37db83ffb
 ---> 570c26a9de68
Removing intermediate container 48c37db83ffb
Successfully built 570c26a9de68
#最后,返回告诉我们创建成功,镜像 id 号是570c26a9de68,让我们来查看下
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sshd                dockerfile          570c26a9de68        4 minutes ago       246.5 MB
sshd                ubuntu              7aef2cd95fd0        12 hours ago        255.2 MB
busybox             latest              e72ac664f4f0        3 weeks ago         2.433 MB
ubuntu              14.04               ba5877dc9bec        3 months ago        192.7 MB
ubuntu              latest              ba5877dc9bec        3 months ago        192.7 MB

测试镜像,运行容器

我们使用刚才我们创建的 sshd:dockerfile 来运行一个容器,看看时候达到我们的要求。

$ sudo docker ps
#这是上一小节,我们用 ”commit“ 方式建立的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                 NAMES
3ad7182aa47f        sshd:ubuntu         "/run.sh"           12 hours ago        Up 3 seconds        0.0.0.0:100->22/tcp   focused_ptolemy
$ sudo docker run -d -p 101:22 sshd:dockerfile
#注意到,跟上一小节运行的容器的命令不一样,不需要在输入命令‘/run.sh’了,因为已经在 Dockerfile 中定义了自启动命令。
890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                 NAMES
890c04ff8d76        sshd:dockerfile     "/run.sh"           4 seconds ago       Up 3 seconds        0.0.0.0:101->22/tcp   high_albattani
3ad7182aa47f        sshd:ubuntu         "/run.sh"           12 hours ago        Up 28 seconds       0.0.0.0:100->22/tcp   focused_ptolemy

在本地新开一个终端,连接到新建的容器

> ssh 192.168.1.200 -p 101
The authenticity of host ‘[192.168.1.200]:101 ([192.168.1.200]:101)‘ can‘t be established.
ECDSA key fingerprint is d1:59:f1:09:3b:09:79:6d:19:16:f4:fd:39:1b:be:27.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[192.168.1.200]:101‘ (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]:~#
测试成功
时间: 2024-10-11 07:06:16

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

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

在介绍如何创建带 ssh 服务的基础镜像之前,我们想回顾一下之前介绍过的内容,其中提到有三种创建镜像的常用办法: 从文件系统导入 从现有容器使用「docker commit」提交 使用 dockerfile 文件 build 本章将主要介绍后面 2 种方法. 步骤如下: $ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. [email protected]:/# sshd bash: sshd: co

「六」创建一个带 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

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

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

创建一个带模版的用户控件 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

用dockerfile创建支持ssh服务的centos镜像

参考 1 我在/docker/目录下建立了个脚本是用来启动容器上面的ssh服务的 vi run.sh #!/bin/bash /usr/sbin/sshd -D 2 同样在docker目录下创建dockefile文件如下: [[email protected] sbin]# cat /docker/dockerfile  FROM centos RUN yum install passwd openssl openssh-server -y ##下面三行是解决sshd服务启动时报错的 RUN s

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