zshuangyan / blog

我的个人博客
2 stars 0 forks source link

Docker 常用命令 #7

Open zshuangyan opened 6 years ago

zshuangyan commented 6 years ago

运行容器

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

选项设置 -d 使容器在后端运行,不设置的情况下终端会连接到容器的stdout和stderr

-p 设置端口映射规则,执行下面的操作后,可以通过http://127.0.0.1:40000 访问容器中运行的web服务

docker run -p 40000:80 web_app

-i 交互式地运行程序,一般和-t一起使用,用户可以和容器进行命令行交互

-v 如果容器内运行的程序需要数据持久化,那么可以把容器内部的目录挂载到主机目录上

docker run -v $PWD/data:/var/jenkins_home jenkins

这样,容器中/var/jenkins_home目录的所有内容就保存在了主机的$PWD/data目录下,需要注意权限问题

-u 设置命令执行时使用的用户,可以通过用户名和UID两种方式来设置,此选项会覆盖Dockerfile中的USER配置

--name 设置容器的名称,未指定的情况下docker daemon会随机分配一个名称给容器

进入容器

以非交互方式运行容器时,我们时常需要进入容器执行一些命令进行调试,下面介绍几种常见的方法:

docker attach

docker attach <container_name_or_id>

但是使用docker attach命令会有一个副作用。当多个窗口使用该命令进容器的时候所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他的窗口再也无法进行其他的操作。

nsenter

首先,计算出你要进入容器的PID

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_id>)

然后进入容器:

nsenter --target $PID --mount --uts --ipc --net --pid

nsenter主要用于替代SSH 用作登入容器

docker exec

在docker 1.3.x之后的版本提供了一种新的方式进入容器,可以用以替代nsenter

docker exec -it <container_name_or_id> /bin/bash

退出容器

使用docker attach或者docker exec命令时,直接按Ctrl-c时退出容器时,会导致容器停止。可以通过Ctrl-p和Ctrl-q命令一起使用来退出容器而保证容器不停止。使用nsenter命令时,想要退出docker还没有好的解决方法,目前是通过关闭终端来解决的。

容器信息

docker diff

查看docker文件系统的改变

$ docker diff eloquent_poitras
C /tmp
A /tmp/jetty-0.0.0.0-8080-war-_-any-3458509152221096415.dir

docker logs

查看曾经输出到容器中的STDERR 或STDOUT 的内容

docker port

查看容器端口映射情况

$ docker port $ID 6379
0.0.0.0:32768