进入docker(进入docker容器执行命令)
本篇文章给大家谈谈进入docker,以及进入docker容器执行命令对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
如何打开多个终端进入Docker容器?
打开多个终端进入Docker容器有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。
使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。
nsenter 可宴尺以访问另一个进程的名字空间。
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。
PID=$(docker inspect _format “{{ .State.Pid }}” container) //将container换成你的容器id
通过这个 PID,就可以连接到这个容器:
$ nsenter _target $PID _mount _uts _ipc _net _pid
更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
$ wget -P ~ ;
$ echo “[ -f ~/.bashrc_docker ] . ~/.bashrc_docker” ~/.bashrc; source ~/.bashrc
这衡锋个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接晌拦高在容器内执行命令。
$ echo $(docker-pid container)
$ docker-enter container
附.bashrc_docker文件内容:
# Some useful commands to use docker.
# Author: yeasy@github
# Created:2014-09-25
alias docker-pid=”sudo docker inspect _format ‘{{.State.Pid}}’”
alias docker-ip=”sudo docker inspect _format ‘{{ .NetworkSettings.IPAddress }}’”
#the implementation refs from
function docker-enter() {
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname “$0″)/nsenter
else
NSENTER=nsenter
fi
[ -z "$NSENTER" ] echo “WARN Cannot find nsenter” return
if [ -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=$(sudo docker inspect _format “{{.State.Pid}}” “$1″)
if [ -z "$PID" ]; then
echo “WARN Cannot find the given container”
return
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.
#sudo $NSENTER “$OPTS” su _ root
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid su _ root
else
# Use env to clear all host environment variables.
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid env -i $@
fi
fi
}
如何进入Docker容器
步骤1:为我们的容器创建第一个镜像#以centos镜像作为基础镜像,我们启动自己的容器并在其中执行/bin/bash命令#注:-t-i参数用于创建一个虚拟的命令行。sudodockerrun-t-icentos/bin/bash现在我们已经成功的运行了自己的第一个容器,并且进入到容器的命令行界面中。在容器中,我们执行下面的命令:yum-yupdate#更新软件包yuminstallwhich#安装which命令yuminstallgit#安装Git安装完成后,按Ctrl+d来退出容器的命令行。#执行sudodockerps-a,可以看到被我们终止的容器CONTAINERIDIMAGECOMMANDCREATED……da9031d3568fcentos:6.4/bin/bash5minutesago…..把我们所做的改变提交到一个新的容器:#这里我们创建一个自己的基础容器,容器中安装好了文章中所需的枝游常用工具。读者的容器id可能与文章中的有所不同,以上一步dockerps-a的结果为准。sudodockercommitda90custom/base容器成功提交后,执行sudodockerimages,我们会看到刚才提交的容器(如下面的结果所示)。我们就以这个容器为基础容器,再来创建一个新的容器。REPOSITORYTAGIMAGEIDCREATEDcustom/baselatest05b6cecd370b2minutesagocentos6.4539c0211cd7610monthsagocentoslatest539c0211cd7610monthsago…步骤2:创建新的容器,并安装apache#以custom/base容器为基础,运行一个新的容器。sudodockerrun-t-icustom/base/bin/bash#安装httpdyuminstallhttpd步骤3:再次提交新的容器按Ctrl+d来退出容器的命令行,然后执行命令:#这个命令会把步骤2中我们安装httpd带来的改变提交到新的名为custom/httpd的容器镜像中。你的容器id可能会和文章中有所不同,以sudodockerps-a命令的结果为准。sudodockercommitaa6e2fc0b94ccustom/httpd你应该已经发现了,我们创建了一个带有http服务器并可以复用的容器镜像。你可以根据这种思想,为自己所需的每个组件都创建一个容器,然后把这些容器复用于开发环境或者生产环境。步骤7:运行http服务器#-vwillMountavolumefromVMtothecontainerwhichwasalsosharedfromhosttoVagrantVM.#-v参数把主机共享给虚拟机的一个卷挂载到容器中#-pforwardVMport80tocontainerport80;VMport80ismappedtohostport8080inVagrantfile#-p参数把虚拟机的80端口映射到容器的80端口;虚拟机的80端口在Vagrantfile中被绑定到裤老主机的8080端口,也就猛纯销是:主机8080-虚拟机80-容器80sudodockerrun-t-i-p80:80-v/vagrant/htdocs:/var/www/htmlcustom/httpd/bin/bash#启动Apacheapachectl-kstart
[img]使用tmux进入docker容器
每次进入容器中都要重复执行
docker exec -it name /bin/bash 这些命令,有些还需要反复配置环境变量
使用tmux可以避免这些操作!
终端输入 tmux 会启动 Tmux 窗口, 底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称,带*的是当前窗口),右侧是系统信息 。
命令行的典型使用方式是,打开一个终端窗口(乎李terminal window,以下简称"窗口"),在里面输入命令。 用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它陵指可以让新窗口"接入"已经存在的会话。
(3)它允许每个岁汪迟会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
如何进入 Docker 容器
你如果想进入docker容器,假如你衡滚的image是a112233,那么进兆升入的族拦老方式如下:
docker run -it a112233 /bin/bash
关于进入docker和进入docker容器执行命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。