Docker学习之SSH连接docker容器
前言
不论是开发者是运维人员,都经常有需要进入容器的诉求,目前看,主要的方法不外乎以下几种:
- 使用ssh登陆进容器,需要在容器中安装启动sshd,存在开销和攻击面增大的问题,同时也违反了Docker所倡导 的一个容器一个进程的原则。容器本身是一个无状态,用后即焚的东西。为了尽量的轻量快捷建议一个容器尽量只有一个进程,否则你的容器会越来越大,越来越像一个虚拟机一样笨重不宜维护。
- 使用nsenter、nsinit等第三方工具,需要额外学习(暂不考虑)。
- 使用docker本身提供的工具,大多数情况最好还是使用Docker原生方法,Docker目前主要提供了Docker exec和 Docker attach两个命令。
SSH连接
Docker基础知识回顾:阿里云CentOS 7上安装配置Docker
查看镜像:
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-java latest feb3ca30b34b 6 weeks ago 755.2 MB docker.io/centos centos 3fa822599e10 12 weeks ago 203.5 MB
创建并运行容器:
docker run -tid --name app_learn -p 5001:22 -p 5000:8080 -v /home/app_learn/:/mnt/app/ 3fa822599e10 /usr/sbin/init
进入容器:
docker exec -it app_learn /bin/bash
安装依赖:
yum install passwd openssl openssh-server openssh-clients -y
安装service命令:
yum install initscripts -y
修改密码:
[root@8c213535c149 mnt]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.
修改配置:
vi /etc/ssh/sshd_config PubkeyAuthentication yes #启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径 PermitRootLogin yes #root能使用ssh登录
重启ssh服务,并设置开机启动:
service sshd restart chkconfig sshd on
远程连接:
通过物理机IP以及5001端口就可以远程连接Docker容器了。
原生连接
docker ps docker attach app_learn ls exit
执行以上命令可以看到attach可以进入到一个已经运行的容器,进行命令操作,但是从容器中退出之后容器也停止了,所以在生产环境中很少使用。
docker exec docker exec -it app_learn /bin/bash
使用docker exec -it进入容器和我们平常操作console界面类似。而且不像attach方式退出,导致整个容器退出,生产环境中用的比较多。比使用ssh 、nsenter、nsinit方式更方便,生产中常用的方式。
作者: 小柒
出处: https://blog.52itstyle.vip
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。
原文地址:https://blog.52itstyle.vip/archives/2402/
相关推荐
-
删库了,我们一定要跑路吗? Java基础
2020-6-15
-
小说:我是一条DQL Java基础
2019-5-10
-
F版本SpringCloud 5—Eureka集群和自我保护机制 Java基础
2020-6-13
-
理解协程并搞定协程相关面试题 Java基础
2019-7-4
-
使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件 Java基础
2019-8-22
-
MySQL事务及隔离级别概述 Java基础
2019-7-28
-
教科书级讲解,秒懂最详细Java的注解 Java基础
2020-6-13
-
JAVA细粒度锁实现的几种方式 Java基础
2020-5-30
-
Java 10 可能对 Lambda 表达式进行升级 Java基础
2018-3-22
-
《Go语言程序设计》读书笔记(六) 基于共享变量的并发 Java基础
2020-6-16