1.commit 命令创建
docker 提供了 docker commit 命令,支持用户提交自己对容器的修改并生成新的镜像。命令格式为
docker commit CONTAINER [REPOSITORY[:TAG:]].
1.1 准备
docker pull ubuntu
docker run -it ubuntu bash
1.2 配置软件源
更新软件源
apt-get update
更换163源
https://blog.csdn.net/wanchaopeng/article/details/105089291
1.2安装sshd
root@0fbf0d4a681a:/# sshd
bash: sshd: command not found #没有sshd
root@0fbf0d4a681a:/# apt-get install openssh-server
1.3.安装和配置ssh服务
root@766259c6e132:/# mkdir -p /var/run/sshd
root@766259c6e132:/# /usr/sbin/sshd -D &
[1] 20
要正常启动ssh服务,需要目录/var/run/sshd 存在,手动创建
查看
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 20/sshd
tcp6 0 0 :::22 :::* LISTEN 20/sshd
修改ssh服务的安全登录配置,取消pam登录限制
sed -ri 's#session required pam_loginuid.so#\#session required pam_loginuid.so#g' /etc/pam.d/sshd
在root用户目录下创建.ssh目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可有ssh-keygen -t rsa命令生成)到authorized_keys文件中
cd
mkdir .ssh
vim .ssh/authorized_keys
创建自动启动SSH服务的可执行文件 run.sh,并添加可执行权限:
root@766259c6e132:/# mkdir /server/scripts -p
root@766259c6e132:/server/scripts# vi run.sh
#!/bin/bash
/usr/sbin/sshd -D
#增加执行权限
chmod +x run.sh
exit #退出容器
1.4.保存镜像
将退出的容器用docker commit 命令保存为一个新的 sshd:ubuntu 镜像:
[root@ybsrv1 ~]# docker commit 766 sshd:latest
0d7d9c5b408ecdc973f2157463e1432c1949a19981b7cf29915524719868c895
使用docker images 查看本地生成的新镜像sshd:latest ,
[root@ybsrv1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sshd ubuntu 95747dd979c3 2 weeks ago 244.1 MB
1.5.使用镜像
启动容器,并添加端口映射 10022 ---> 22 其中10022是宿主主机的端口,22是容器服务器的ssh服务监听端口
[root@ybsrv1 ~]# docker run -p 10022:22 -d sshd:latest /server/scripts/run.sh
8b015da5242480723671dc00aace4ac47141b3855778bb29443f8ea5e99039cc
启动成功后,可以在宿主主机上看到服务器运行的详细信息
[root@ybsrv1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0423f33bc51b sshd:latest "/server/scripts/run 2 seconds ago Up 1 seconds 0.0.0.0:10022->22/tcp elated_darwin
在宿主机(192.168.2.9)或其他主机上,可以通过ssh访问10022 端口来登陆容器
2. 使用Dockerfile创建
2.1.创建工作目录
首先创建一个sshd_ubuntu工作目录:
mkdir sshd_ubuntu
cd sshd_ubuntu/
touch Dockerfile run.sh
[root@ybsrv1 /data/docker/sshd_ubuntu]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:51 Dockerfile
-rw-r--r--. 1 root root 0 Apr 29 16:51 run.sh
2.2. 编写run.sh 脚本和authorized_keys 文件
脚本文件run.sh 的内容与上相同
#!/bin/bash
/usr/sbin/sshd -D
在宿主主机上生成ssh秘钥对,并创建authorized_keys文件
# ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub > authorized.keys
2.3. 编写Dockerfile
#设置继承镜像
FROM ubuntu:14.04
#提供一些作者信息
MAINTAINER from www.csdn.com/wanchaopeng by wanchaopeng (chaopeng16@163.com)
#下面运行的命令,此处更改ubuntu为过年163源
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse " >>/etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-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
#取消
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"]
2.4创建镜像
在sshd_ubuntu 目录下,使用docker build 命令来创建镜像。最后有一个 “.” 表示使用当前目录中的Dockerfile.
cd sshd_ubuntu
docker build -t sshd:dockerfile .
命令执行完毕,看到"Successfully build xxx" 表示创建成功 可以看到镜像ID
在本地查看sshd:dockerfile 镜像已存在
2.5测试镜像,运行容器
使用刚才创建的sshd:dockerfile镜像来运行一个容器。直接启动镜像,映射容器的22端口到本地的10122端口
在宿主机新打开一个终端,链接到新建的容器
ssh 192.168.2.9 -p 10122