1. tmoe快速上手命令
tmoe快睁笑高速上手命令启动命令和进入悉尺容器命令。
1、TMOE启动命令:升吵bashc(curlLhttps:双斜gitee.com或mo2或linux或raw或2或2)。
2、进入容器命令:tmoepm或ca(p指proot容器,c指chroot容器)。
2. 如何控制docker里的linux系统
您可以使用Docker CLI工具来控制Docker容器内的Linux系统。您可以执行以下步骤来控制容器:
启动容器:腊辩通过运行 docker run 命令启动容器。
进入容器:使用 docker exec 命令进入正在运行的容器。
执行命令:在容器内森神执行Linux命令,如 ls,cat,apt-get 等。
停止此局亏容器:使用 docker stop 命令停止正在运行的容器。
删除容器:使用 docker rm 命令删除不再需要的容器。
这些是控制Docker容器的基本步骤。更多信息,请查看Docker官方文档。
3. Docker容器进入退出的几种方式
重启httpd(service httpd restart)和rados
在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装SSH Server,这样就能保证多人进入,但是使用了Docker容器之后不建议使用ssh进入到Docker容器内。关于为什么不建议使用,请参考如下文章:
为什么不需要在 Docker 容器中运行 sshd
在上面两种方式都不适合的情况下,还有一种比较方便的方法,即使用nsenter进入Docker容器。关于什么是nsenter请参考如下文章:
https://github.com/jpetazzo/nsenter
在了解了什么是nsenter之后,系统默认将我们需局歼要的nsenter安装到主机中
如果没有安装的话,按下面步骤安装即可(注意是主机而非容器或镜像)
具体的安装命令如下:
安装好nsenter之后可以查看一下该命令的使用。
nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect 命令来拿到该PID。
docker inspect命令使用如下:
inspect命令可以分层级显示一个镜像或容器的信息。比如我们当前有一个正在运行的容器
可以使用docker inspect来查看该容器的详细信息。
由其该信息非常多,此处只截取了其中一部分进行展示。如果要显示该容器第一个进行的PID可以使用如下方式
在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。
其中的3326即刚桐唤冲才拿到的进程的PID
当然,如果你认为每次都输入那么多参数太麻烦的话,网上也有链裂许多做好的脚本供大家使用。
地址如下:
http://yeasy.gitbooks.io/docker_practice/content/container/enter.html
http://www.tuicool.com/articles/eYnUBrR
四、使用docker exec进入Docker容器
除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:
接下来我们使用该命令进入一个已经在运行的容器
4. docker常用命令
1、 service docker start // 启动docker
2、 docker images // 查看docker所安装的镜像
3、 docker search [name] 查询某个镜像 例如查询mysql docker search mysql
4、 docker pull [name] 拉取某个镜像 例如mysql docker pull mysql
5、 docker pull [name] [:tag] tag版本肢键号 如果不写默认拉取最新的版本
例如: docker pull mysql:5.7
6、 docker rmi [imgaeId] 删除命令,imageId是镜像id
2.1 新建一个新的容器 docker pull centos
2.2 docker run [可选参数] image名字
参数说明
--name="Name" 给容器命名
-d 后台方式运行
-p [主机端口]:[容器端口] 指定容器的端口 例如启动tomcat 命令: docker run -p 8081:8080 tomcat 解释:8081是对外访问(服务器)的端口。8080是docker里面的tomcat端口. tomcat是镜像拉取下来后的名字. 例:若别人访问。IP+8081端口才能访问到tomcat启动的项目
-P 大写P是随机指定端口
-it 与容器交互,就是进入到容器里面
命令: docker run -it [镜像名称] /bin/bash 例子: docker run -it centos /bin/bash
docker ps 查看运行派行中的容器
docker ps -q 只查询运行容器的编号,一般与下面-a合并使用, docker ps -aq
docker ps -a 查看曾经运行过的容器
docker ps -a -n=1 加上-n可以指定查询最近几个运行的容器、
Ctrl+p+q 这样退出就不会停止容器
docker rm -f [容器id] 指定删除某个运行的容器
docker rm -f $(docker ps -aq) 删除全部运行的容器
docker start [容器id] 启动容器
docker restart [容器id] 重启容器
docker stop [容器id] 停止容器
docker kill [容器id] 强制停止容器
docker run -d [镜像名] 例如: docker run -d centos
但是有问题, docker ps 查询不到运行的容器
原因:docker容器用后台运行,就必须要有一个前台进程,docker发现没有应用,所以就自动停止
docker logs -tf --tail 10 [容器id]
t的意思是时间戳,f保留日志打印窗口,tail持续打印,10打印最后10条
docker top [容器id]
docker inspect [容器id]
方式一: docker exec -it [containt_id] /bin/bash // 进入该镜像内部
docker cp [容器id]:[容器路径] [主机路历带巧径]
5. 使用busybox镜像创建容器启动容器并查看容器状态的命令是什么
1. 创建并缺昌启动容器 docker create命宽扮闭令来创建容器 $ docker create -it --name=busybox busybox 1 容器启动有两种方式: 使用docker start命令基于
2. 终止容器 容器停止用docker stop 命令。格式为: docker stop [-t]|–time[=10]. 该命令首先会向运行中的容器发送SIGTERM信号,如果
3. 进慎裂入容器 处于运行状态的容器可以通过docker
6. 进入tomcat容器内部的命令
进入tomcat容器告告内部的命令是dockerrun。容器指的是实现了一定功能樱蔽的组件,可以管理其他组件的生命周期。一个容器可能管理其他容器,也可能被其他容器管理。容器通常会形成一个层级关系。Tomcat是一个免费的开放源代码袜颂明的Web应用服务器,属于轻量级应用服务器,是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目。
7. docker下容器怎么执行命令
Docker中我们一般会有两种执行命令的方式,一种是直接进入容器的命令行,在终端执行并查看结果,一种是在后台执行,并不会在终端查看结果。
1、进入容器命令行
su root
docker run -i -t ubuntu:16.04/bin/bash#或者执行下面这句docker run -it ubuntu:16.04/bin/bash
-i和-t的作用是帮助你进入交互模式,如果不加这部分,你将无法进入容器内部,更别说使用命令行了。/bin/bash的意思就是使用容器的命令行来输入命令。执行结果如下:
root@7d150a0fb029:/#
root后面跟的就是容器id,表明你已经进入容器,可以输入命令了,你可以输入一些常用命令试试:
root@7d150a0fb029:/# docker run -i -t ubuntu:16.04 /bin/bash
结果输出了镜像的内核版本信息:
Linux version 4.13.0-36-generic (buildd@lgw01-amd64-033)(gcc version 5.4.020160609(Ubuntu5.4.0-6ubuntu1~16.04.9))#40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018
通过exit可退出容器。
2、后台执行命令
输入下面的代码,-d表示的就是后台运行,这点可以直接通过docker run –help查看该命令的功能。下面这句话的意思就是在镜像的程序中添加引号内的代码,并在后台运行。
docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1;done"
输出结果不会显示运行的结果,而是给出新建的容器id,这里说明一下,每次输入docker run命令都会新建一个容器,产生一个新的id。
输出结果如下:
查看一下正在运行的容器:
root@cdl-XPS15R:/home/cdl# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7188be9bd7b ubuntu:16.04"/bin/sh -c 'while t…"13 seconds ago Up11 seconds keen_vaughan1b6ba17f7df7 ubuntu:16.04"/bin/bash"2 minutes ago Exited(0)2 minutes ago cocky_noether7d150a0fb029 ubuntu:16.04"/bin/bash"4 minutes ago Exited(0)2 minutes ago hopeful_banach
这里会发现,第一个容器的id和后台运行的容器id前几位一模一样,但是长度要长很多,其实是一样的,只不过通过ps命令打印输出时为了方便显示只显示了前几位。
如果想要进入后台运行的容器的命令行而不创建新的容器,只需要输入以下命令:
#Exec是进入已经存在的容器,run是创建新容器docker Exec-it c7188be9bd7b /bin/bash
输入哪个更长的id也是一样的效果:
docker Exec -it /bin/bash
输出结果都是:
root@c7188be9bd7b:/#
8. 使用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 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
9. 如何打开多个终端进入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 ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ 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 https://github.com/jpetazzo/nsenter/blob/master/docker-enter
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
}
10. Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
摘要: Docker
容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等
容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下
在实际使用中启动一个镜像,例如
-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些做带-e参数,在Dockerfile指定环境变量
直接构建成容器
开启一个终端启动容器内部,打告御印指定的环境变量a
此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量
因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构
其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本
Dockerfile中启动run.sh脚本作为容器执行命令
在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下
-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如
如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下
同目录下start.sh内容是打印1
构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2
docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出
对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是
测试一个Dockerfile输出1
在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT
容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如
显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如
除了docker stop命令还有一种停止容器纯友芦的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如
在容器停止之后可以使用 docker start 再启动一个停止的容器,例如
除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如
查看容器详情使用 docker inspect ,比如
在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令
容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如
除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况
当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台
创建Dockerfile以及构建镜像,启动容器
启动一个脚本不断请求api接口
进入容器内部查看日志
另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出
此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式
此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致
如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包
此时退出容器,并且删除容器,最后从镜像重新生成容器
此时进入容器检查,并不存在pymongo包
如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下
以新安装pymongo的容器为例,对新容器使用docker commmit
新生成的镜像叫做xiaogp/my_image_test:v2
从新镜像启动容器并进入容器查看存在新安装的pymongo