从2011年开始用vmware到Vgrant再到现在的docker,这些软件变得越来越快而且聪明。虚拟化软件时特别依赖ssh服务去登录到虚拟机里面进行调试,所以开始用docker的时候也习惯于ssh登录到里面进行修改,慢慢的发现违背了docker初衷。
docker其实目标有点想java代码一样“一次编译到处运行”,也就是当你构建完你的docker镜像后就不需要经常登录到你的容器内部去做操作,容器本身是一个无状态,用后即焚的东西。为了尽量的轻量快捷建议一个容器尽量只有一个进程,否则你的容器会越来越大,越来越像一个虚拟机一样笨重不宜维护。
当然docker官方还是提供了方法让进入到容器进行调试,下面介绍下:
exec方法
在内运行命令(命令退出不会影响容器运行)
[root@salt-node1 pkg]# docker exec --help Usage:docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach 后台运行命令 --detach-keys string Override the key sequence for detaching a container -e, --env list 使用环境便令 (默认是列表[]) --help Print usage -i, --interactive 使用标准输入 --privileged 给命令提升权限 -t, --tty 分配一个终端 -u, --user string 使用用户或者id (format: <name|uid>[:<group|gid>]) 下面命令就是创建一个输入流和终端进入容器执行命令 [root@salt-node1 pkg]# docker exec -ti demo1 /bin/sh # ps -ef UID PID PPID C STIME TTY TIME CMD redis 1 0 0 14:25 ? 00:00:00 redis-server *:6379 root 12 0 0 14:27 ? 00:00:00 /bin/sh root 16 12 0 14:27 ? 00:00:00 ps -ef 使用指定用户登录容器 [root@salt-node1 pkg]# docker exec -ti -u redis demo1 /bin/sh $ id uid=999(redis) gid=999(redis) groups=999(redis) 指定登录终端的环境变量 [root@salt-node1 pkg]# docker exec -ti -e service=blog.nginxs.net -e ctime=‘2017-03-04 22:38‘ demo1 /bin/sh # env HOSTNAME=78bd4fa22582 HOME=/root ctime=2017-03-04 22:38 REDIS_DOWNLOAD_SHA1=6780d1abb66f33a97aad0edbe020403d0a15b67f TERM=xterm service=blog.nginxs.net PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.2.8.tar.gz REDIS_VERSION=3.2.8 GOSU_VERSION=1.7 PWD=/data # echo $ctime 2017-03-04 22:38 # exit [root@salt-node1 pkg]# #前端运行一个容器
[root@salt-node1 pkg]# docker run -it centos [root@efd2c7e14ef4 /]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/docker-8:3-78681558-2adb3ef25d882c28c20263b9e894d6a7e9067a646bba84042475a0dcb55948e1 10474496 240760 10233736 3% / tmpfs 933632 0 933632 0% /dev tmpfs 933632 0 933632 0% /sys/fs/cgroup /dev/sda3 18555904 15322128 3233776 83% /etc/hosts shm 65536 0 65536 0% /dev/shm tmpfs 933632 0 933632 0% /sys/firmware
attach方法
(命令退出容器即结束运行)
[root@salt-node1 pkg]# docker attach --help Usage:docker attach [OPTIONS] CONTAINER 和运行容器内部进行输入 Options: --detach-keys string 覆盖容器内隔离的key --help Print usage --no-stdin 不传输标准输入 --sig-proxy 代理所有接受到的信号默认开启,关闭后Ctrl+c容器将不再退出
如果你的容器是一个系统则可以直接attach进行使用shell,否则无法正常通讯
本文出自 “运维之我的历程” 博客,转载请与作者联系!
运维之我的docker-不要在给你的docker安装ssh server
原文:http://nginxs.blog.51cto.com/4676810/1903282