Docker学习之SSH连接docker容器
时间:2022-05-06
本文章向大家介绍Docker学习之SSH连接docker容器,主要内容包括前言、SSH连接、原生连接、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
前言
不论是开发者是运维人员,都经常有需要进入容器的诉求,目前看,主要的方法不外乎以下几种:
- 使用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方式更方便,生产中常用的方式。
- SpringMVC处理multipart请求.
- 一条简单的sql语句运行15天的原因分析(r5笔记第17天)
- 巧用flashback database实现灵活的数据回滚(r5笔记第16天)
- Spring Cache For Redis.
- css重写checkbox样式
- 通过shell脚本同时监控多个数据库负载(r5笔记第14天)
- Java 定时器 Timer 的使用.
- 通过shell脚本来统计段大小(r5笔记第14天)
- Linux下配置MySQL主从复制(r5笔记第13天)
- Final 关键字
- ArrayList 和 LinkedList的执行效率比较
- 关于consistent gets(r5笔记第12天)
- wait/notify 实现多线程交叉备份
- 01.SVN介绍与安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 04 Spring Boot 整合MyBatis
- OpenFeign服务调用
- Windows10安装JDK14
- IDEA 配置 maven 完美解决方案
- 06 Spring Boot 整合Shrio
- List集合转化为数组
- 小心,99%的面试者,都倒在了这里。一文带你了解spring全家桶
- 阿里P9整理Java 高频面试题聊一聊 JUC 下的 LinkedBlockingQueue
- Java环境配置
- 一次django内存异常排查
- Hystrix服务降级-服务熔断
- 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧
- brk实现
- MapReduce之WritableComparable排序
- MapReduce之Combiner合并