现在docker容器非常火,主要是docker非常轻量级,当技术人员想研究,学习一些新技术时,又不想去搭建环境,这个时候docker就是一个非常好的选择,例如,搭建一个redis,mysql数据库环境,安装好docker的包,只需要从官网拉取对应的镜像包,启动一个docker容器就好
docker pull mysqldocker run --name mysql5.7.28 -e MYSQL_ROOT_PASSWORD=Root@123 -d -it mysql:5.7.28
两条命令就创建好一个mysql环境了,非常快捷,当然这个是测试环境,如果要到生产环境,在容器里跑mysql数据库,要考虑的东西就太多了,如果容器异常挂掉,再也起不来,mysql数据库怎么办,不可能向应用一样,再创建一个新的mysql容器就解决问题的,关键的问题,要解决无论什么时候,Mysql的数据不能丢失。
容器建好之后,怎么才能进入docker容器呢?
基本上有3种方法
第一种:使用docker attach进入Docker容器
这种方法,我个人不太喜欢,因为有时候进入容器的时候,会卡住,一直没找到原因
docker attach 7b20f88dc2fe
第二种:使用SSH进入docker容器
这种方式也是有其缺陷的,例如密码和密钥的管理,需要你打包到docker镜像里,如果SSH爆出有新的漏洞,还得升级SSH,也是非常麻烦的。
第三种:nsenter进入Docker容器
使用nsenter进入docer容器,我个人非常喜欢,而且还有社区人员将nsenter进行包装,使用起来更方便,例如docer-enter就是一个非常好用的工具,给大家演示一下
docker-enter 7b20f88dc2fe
那docer-enter怎么安装呢,下面详细说明一下
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.27/util-linux-2.27.tar.gztar -zxvf util-linux-2.27.tar.gzcd util-linux-2.27./configure --without-ncurses && make nsentercp nsenter /usr/local/bin
/usr/local/bin目录下面,创建docker-enter的bash脚本, 内容如下:
脚本内容如下所示,docker-enter脚本附上可执行的权限
#!/bin/shif [ -e $(dirname "$0")/nsenter ]; then NSENTER=$(dirname "$0")/nsenterelse NSENTER=nsenterfiif [ -z "$1" ]; then echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]" echo "" echo "Enters the Docker CONTAINER and executes the specified COMMAND." echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."else PID=$(docker inspect --format "{{.State.Pid}}" "$1") if [ -z "$PID" ]; then exit 1 fi shift OPTS="--target $PID --mount --uts --ipc --net --pid --" if [ -z "$1" ]; then # No command given. # Use su to clear all host environment variables except for TERM, # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH, # and start a login shell. "$NSENTER" $OPTS su - root else # Use env to clear all host environment variables. "$NSENTER" $OPTS env --ignore-environment -- "$@" fifi