不论是开发者是运维人员,都经常有需要进入容器的诉求,目前看,主要的方法不外乎以下几种:
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方式更方便,生产中常用的方式。