包含dockerattach的词条
本篇文章给大家谈谈dockerattach,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
docker 使用
运行容器
sudo docker run -it -v /home/lcj/test_docker:/home/lcj/test_docker tensorflow/tensorflow:1.13.1-gpu-py3
参数:
-d 后台运行并返回容器ID,如 -itd
-e 设置环境变量,如 -e NVIDIA_VISIBLE_DEVICE=0 使用编号为 0 的GPU
-i 打开 STDIN,用于控制台交互,通常跟 -t 一起使用
--net 容器网络设置,如 --net my_network,或者 --net=contianer:NAME_or_ID,使用其他容器的网络,共享 IP 和 PORT 等资源
--restart 指定容器停止后的启动的策略,如 --restart=always
--runtime=nvidia 使用 nvidia 模式运行,跟 -e 一起使用,可以在容器里使用 GPU
-t 为容器重新分配一个伪输入终端,通常与 -i 一起使用
-v 给容器挂载存储卷,挂载到容器的某个目录,如 -v /home/lcj/test_docker:/home/lcj/test_docker
-w 指定容器的工作目录
停止容器
docker stop 容器ID
或者 docker stop `docker ps -a -q` 停止所有容器
重启容器
docker restart 容器ID
进入一个运行中的容器
docker attach 容器ID
保存容器
docker save myimage | bzip2 -9 -c /home/lcj/save.tar.bz2
加载容器
bzip2 -d -c /home/lcj/save.tar.bz2 | docker load
杀掉运行中的容器
docker kill -s KILL 容器ID
-s:向容器中发送一个信号
docker rm 命令
参数:
-f :通过 SIGKILL 强制删除一个容器,如 docker rm -f a
-l:移除容器间的网络连接,而非容器本身,如 docker rm -l b,其中 b 为连接名,而非容器名
-v:删除与容器关联的卷
docker create :创建一个容器但不运行它,语法同 docker run
docker ps
-a:显示所有的容器,包括未运行的
-f:根据条件过滤显示的内容
-l:显示最近创建的容器
-n:列出最近创建的 n 个容器
-q:静默模式,只显示容器 ID
列出所有创建的昌培容器 ID
docker ps -a -q
停止所有容器 ID
docker stop `docker ps -a -q`
获取容器/镜像的元数据
docker inspect 容器/镜像名
docker top :查看容器中的进程信息
docker top a(a 是容器)
docker attach :链接到正在运行的容器(该容器必须正在运行)
docker attach a (a 是容器)
docker events :从服务器获取实时事件
-f:根据条件过滤事件
--since:从指定的时间戳后显示所有的事件
--until:流水时间显示到指定的时间为止
显示docker 2016年7月1日后的所有事件
docker events -since="1467302400"
显示docker 镜余迅配像为mysql:5.6 2016年7月1日后的相关事件
docker events -f "image"="mysql:5.6" --since="1467302400"
备注:如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如--since="2016-07-01"
docker export :将文件系统作为一个 tar 压缩文件导出到 STDOUT
docker port :列出指定的容器端口的映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口
docker port a(a 为容器名)
docker commit : 从容器创建一个新的镜像
-a:提交竖指的镜像作者
-c:使用 Dockerfile 文件来创建镜像
-m:提交时说明的文字
-p:在 commit 时暂停容器
docker commit -a 'lcj' -m 'has update' 容器 ID 镜像名
docker cp :用于容器与主机之间的数据拷贝
将主机的 test_docker 目录拷贝到容器 /home/lcj 目录下
docker cp /home/lcj/test_docker 容器 ID:/home/lcj/
将容器 /home/lcj 目录拷贝到主机的 test_docker 目录下
docker cp 容器 ID:/home/lcj/ /home/lcj/test_docker
docker login/logout :登录或退出一个 Docker 镜像仓库,如果未指定镜像仓库地址,则默认为 官方 Docker Hub
docker login -u 用户名 -p 密码
docker logout
docker pull :从镜像仓库中拉取或者更新指定镜像
docker pull java
docker push :将本地的镜像上传到镜像仓库,需先登录到镜像仓库
docker push myapache:v1
docker search :从 Docker Hub 查找镜像
--automated,只列出 automated build(自动生成) 类型的镜像
--no-trunc,显示完整的镜像描述
-s:列出收藏数不少于指定值的镜像
从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像
docker search -s 10 java
docker images :列出本地所有的镜像
-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤中间映像层)
-q:只显示镜像 ID
docker images 或 docker images ubuntu,列出本地所有镜像或本地仓库名为 ubuntu 的所有的镜像
docker rmi :删除一个或多个镜像
-f:强制移除
--no_prune:不移除该镜像的过程镜像,默认移除
强制删除本地镜像w3cschool/ubuntu:v4
docker rmi -f w3cschool/ubuntu:v4
docker tag :标记本地镜像,将其归入到某一个仓库
将镜像ubuntu:15.10标记为 w3cschool/ubuntu:v3 镜像
docker tag ubuntu:15.10 w3cschool/ubuntu:v3
docker build:使用 Dockerfile 文件创建镜像
使用当前目录的Dockerfile创建镜像
docker build -t w3cscholl/ubuntu:v3 . (不要漏掉最后的 . 符号)
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像
docker build github.com/creack/docker-firefox
docker history :查看指定镜像的创建历史
docker save :将指定镜像保存成 tar 压缩文件
-o:输出到文件
docker save -o my_ubuntu_v3.tar w3cschool/ubuntu:v3
docker import:从压缩文件中创建镜像
-c:应用 docker 指令创建镜像
-m:提交时的说明文字
从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为w3cschool/ubuntu:v4
docker import my_buntu_v3.tar w3cschool/ubuntu:v4
[img]docker exec 和 docker attach的区别
Docker exec与Docker attach
不论是开发者是运维人员,都经常有需要进入容器的诉求。
目前看,主要的方法不外乎以下几种:
1. 使用ssh登陆进容器
2. 使用nsenter、nsinit等第三孝漏猛巧桥方工具
3. 使用docker本身提供的工具
方法1需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导
的一个容器一个进程的原则。
方法2需要额外学习使用第三方工具。
所以大多数情况最好还是使用Docker原生方法,Docker目前主要提供了Docker exec和
Docker attach两个命令。
以下在fedora21,docker1.7上验证。
Docker attach
Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。
但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。
[root@localhost temp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2327e7eab0ed busybox:buildroot-2014.02 "/bin/sh" About a minute ago Up About a minute bb2
[root@localhost temp]# docker attach bb2
/ # ls
bin dev etc home lib lib64 linuxrc media mnt opt proc root run sbin sys tmp usr var
/ # pwd
/
/ #
Docker exec
关于-i、-t参数
可以看出只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命搜誉令
返回值都可以正确获取。
[root@localhost temp]# docker exec -i bb2 /bin/sh
date
Tue Jul 14 04:01:11 UTC 2015
echo $?
dir
/bin/sh: dir: not found
echo $?
127
使用-it时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致
整个容器退出。
这种方式可以替代ssh或者nsenter、nsinit方式,在容器内进行操作。
[root@localhost temp]# docker exec -it bb2 /bin/sh
/ # pwd
/
/ # echo $?
/ # dir
/bin/sh: dir: not found
/ # echo $?
127
如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin
的输出,无法看到命令执行情况。
[root@localhost temp]# docker exec -t bb2 /bin/sh
/ # pwd
hanging....
[root@localhost temp]# docker exec -t bb2 pwd
/
[root@localhost temp]# echo $?
[root@localhost temp]# docker exec -t bb2 dir
2015/07/14 04:03:57 docker-exec: failed to exec: exec: "dir": executable file not found in $PATH
[root@localhost temp]# echo $?
docker exec执行后,会命令执行返回值。(备注Docker1.3似乎有Bug,不能正确返回命令执行结果)
[root@localhost temp]# docker exec -it bb cat /a.sh
echo "running a.sh"
exit 10
[root@localhost temp]# docker exec -t bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10
[root@localhost temp]# docker exec -it bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10
[root@localhost temp]# docker exec -i bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10
关于-d参数
在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
程序在后台运行。
[root@localhost temp]# docker exec -d bb2 /a.sh
[root@localhost temp]# echo $?
如果不使用-d参数,由于命令需要长时间执行,docker exec会卡住,一直等命令执行完成
才返回。
[root@localhost temp]# docker exec bb2 /a.sh
^C[root@localhost temp]#
[root@localhost temp]#
[root@localhost temp]# docker exec -it bb2 /a.sh
^C[root@localhost temp]#
[root@localhost temp]# docker exec -i bb2 /a.sh
^C[root@localhost temp]# docker exec -t bb2 /a.sh
^C[root@localhost temp]#
容器直装怎么上号器登录
对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求。登陆Docker容器的方式:
1)使用ssh登陆容顷巧码器。这种宽改方法需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导的一个容器一个进程的原则。 参考Docker容器学习梳理--SSH方式登陆容器
2)使用自带命令docker attach登陆容器。**命令格式:docker attach container_id。不过docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,docker attach命令可以说是最不方便的进入后台docker容器的方法。雀哪
3)使用自带命令docker exec登陆容器。**命令格式:docker exec -ti container_id /bin/bash。docker exec和docker attach是Docker的原生方法,大多数情况下就使用这两种命令登陆容器。docker exec命令是在docker1.3之后出现的,比docker attach命令更加方便!两者之间的区别:
1.Docker attach必须是登陆到一个已经运行的容器里。需要注意的是如果从这个容器中exit退出的话,就会导致容器停止!!这是极其不方便的!
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2faf24118766 192.168.1.23:5000/tomcat7 "/bin/bash" 4 days ago Up About an hour 0.0.0.0:8888-8080/tcp tomcat
[root@localhost ~]# docker attach tomcat
[root@2faf24118766 /]# exit //按住ctrl+d退出当前窗口
[root@localhost ~]# docker ps //发现该容器也停止了!!
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2.docker exec登陆容器,注意有两个参数:-t和-i,这两个参数很重要!
1)如果只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取。
这种方式可以理解为:在运行的容器上执行新进程!即在宿主机上执行容器里的命令并查看到命令结果!这很方便的~但是仅仅使用-i参数无法直接登陆到容器内!
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2faf24118766 192.168.1.23:5000/tomcat7 "/bin/bash" 4 days ago Up About a minute 0.0.0.0:8888-8080/tcp tomcat
[root@localhost ~]# docker exec -i tomcat date
Sat Apr 1 06:53:46 UTC 2017
[root@localhost ~]# docker exec -i tomcat uptime
06:54:44 up 163 days, 23:28, 0 users, load average: 0.00, 0.01, 0.05
[root@localhost ~]# docker exec -i tomcat /usr/local/tomcat7/bin/startup.sh
Tomcat started.
2)如果只使用-t参数,则可以看到一个console窗口,可以在宿主机上执行容器里的命令并查看到命令结果,但是这种方式登陆到容器内执行的命令是没有结果信息输出的!
[root@localhost ~]# docker exec -t tomcat uptime
07:02:38 up 163 days, 23:36, 0 users, load average: 0.00, 0.02, 0.05
[root@localhost ~]# docker exec -t tomcat pwd
/
[root@localhost ~]# docker exec -t tomcat /bin/bash //注意,使用-t参数登陆容器,退出当前窗口用的是ctrl+c而不是ctrl+d;而下面使用-ti参数,退出当前窗口使用ctrl+d
[root@2faf24118766 /]# uptime //仅仅使用-t参数登陆容器内,发现执行命令后,没有结果输出!
3)使用-it时,则和我们平常操作console界面类似,而且不会像attach方式因为退出而导致 整个容器退出。 这种方式可以替代ssh或者nsenter方式,在容器内进行操作。
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2faf24118766 192.168.1.23:5000/tomcat7 "/bin/bash" 4 days ago Up About a minute 0.0.0.0:8888-8080/tcp tomcat
[root@localhost ~]# docker exec -t tomcat /bin/bash
[root@2faf24118766 /]# exit //按住ctrl+d退出当前窗口
[root@localhost ~]# docker ps //发现容器还在,并没有因为上面的窗口退出而停止容器!
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2faf24118766 192.168.1.23:5000/tomcat7 "/bin
docker查看日志命令
如何查看docker日志,让我们一起了解一下?
通过docker logs可以查看容器的日志命令。高效的监控和日志管理对保持生产系统持续稳定的运行以及排查问题至关重要。在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监肢滑控变得越来越重要。
docker查看日志的几个方式:
1、docker logs --tail=1000 容器名称 (查看容段磨器前多少行的日志)(推荐)
2、docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/握饥斗容器ID-json.log)(进入容器内部查看日志)
3、#查看compose所有容器的运行日志
docker-compose -f docker-compose-app.yml logs -f
4、#查看compose下某个容器的运行日志
docker-compose -f docker-compose-app. yml logs -f服务名
5、# 也可以把compose的容器日志输出到日志文件里去,然后用tail -f随时查看
docker-compose -f docker-compose-app. yml logs -f myDockerCompose.log
具体操作如下:
docker attach [options] 容器会连接到正在运行的容器,然后将容器的标准输入、输出和错误流信息附在本地打印出来。命令中options的取值有三种:--detach-keys,--no-stdin,--sig-proxy。
该命令只是进入容器终端,不会启动新的进程。所以当你同时使用多个窗口进入该容器,所有的窗口都会同步显示。如果一个窗口阻塞,那么其他窗口也就无法再进行操作。
使用ctrl+c可以直接断开连接,但是这样会导致容器退出,而且还stop了。如果想在脱离容器终端时,容器依然运行。就需要使用--sig-proxy这个参数。例如:
$ docker attach --sig-proxy=false mytest
注意: 当使用docker attach连接到容器的标准输入输出时,docker使用大约1MB的内存缓冲区来最大化应用程序的吞吐量。如果此缓冲区填满,那么输出或写入的速度将会受到影响。因此查看应用日志,可以使用docker logs命令。
关于dockerattach和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。