1 | 参考: |
为什么要构建镜像
- 找不到现成的镜像,比如自己开发的应用程序,生产做自己的镜像
- 需要在镜像中加入特定的功能,比如官方镜像几乎都不提供 ssh。
两种构建镜像的方法:
- 手动构建镜像 docker commit 命令
- Dockerfile 构建镜像文件
手动构建镜像步骤
- 启动基础容器安,装软件服务。
- 将安装好服务的容器commit提交为镜像。
- 启动新容器来测试新提交的镜像。
制作支持ssh远程登录的docker镜像
启动基础容器,安装软件服务
目的 : 以官方镜像为基础在这个基础之上 “做自己的镜像”
1 | # --privileged=true,该参数在docker容器运行时,让系统拥有真正的root权限 |
安装软件 openssh-server
1 | [root@linux-node1 ~]# ./docker_in.sh mycentos |
1 | [root@017da954e8d4 /]# yum install net-tools -y |
设置远程登录密码
1 | [root@017da954e8d4 /]# echo 123456|passwd --stdin root |
测试远程访问
1 | # 在创建容器的时候 我们绑定了本地的 1022端口哦~ |
commit 提交为镜像
1 | # 提交本地镜像 |
使用新镜像 启动新容器
- 注意事项:
- 记得一定要在启动容器的后面加上 /usr/sbin/sshd -D
- 不加默认是 /bin/bash
1 | [root@linux-node1 tools]# docker run -d --name mycentos7 -p 2022:22 test/mycentos-7-ssh /usr/sbin/sshd -D |
连接测试 2022
1 | [root@linux-node1 ~]# ssh 10.0.0.100 -p 2022 |
基于centos7的ssh+Nginx镜像
启动基础容器
1 | [root@linux-node1 ~]# docker run --privileged=true -d -p 80:80 --name centos-7-ssh-nginx centos:7 /usr/sbin/init |
配置yum源安装 Nginx和sshd
1 | [root@linux-node1 ~]# docker ps |
1 | yum install net-tools -y |
启动服务
1 | [root@3d804a17f13b yum.repos.d]# systemctl start nginx |
1 | 测试web访问 http://10.0.0.100/ |
编写容器启动脚本
1 | [root@361b22a52b62 /]# vi init.sh |
commit提交为镜像
1 | [root@linux-node1 ~]# docker commit -m "My CentOS7-ssh-nginx" centos-7-ssh-nginx test/mycentos-7-ssh-nginx:v1 |
启动新容器
1 | [root@linux-node1 ~]# docker run --privileged=true -d -p 8080:80 -p 2222:22 --name we1 test/mycentos-7-ssh-nginx:v1 /usr/sbin/init init.sh |
1 | # 如果服务无法启动 还是需要之前的超管权限步骤 |