docker-容器
容器操作
查看运行的容器 ```shell script docker ps #查看所有容器使用-a选项。
结果类似下面:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0abd89bb4cee dockerinaction/ch2_mailer “/mailer/mailer.sh” 26 minutes ago Up 26 minutes 33333/tcp mailer b03467317c70 nginx:latest “/docker-entrypoint.…” 33 minutes ago Up 14 minutes 80/tcp web
其他命令
```shell script
docker stop web #停止容器
docker restart web #重启容器
docker rm web #删除容器
docker logs web #查看容器日志
docker rename web web-new # 重命名
PID namespace
每个运行在linux上的进程有namespace的概念,不同namespace下的pid可以重复。不设置namespace,那么该进程会和机器上的其他进程共享一个namespace。
每个容器中有一个pid=1的进程,docker会作为容器运行的依据。
一个进程可以操作相同namespace下的其他进程,但是不能影响namespace外的其他进程,这样限制了攻击其他进程的能力。
docker 通过--name
设置namespaceA如下,通常会为每个容器设置一个PID namespace:
```shell script
docker run -d –name namespaceA nginx:latest
在namespaceA中加入一个新的nginx,由于容器已经启动了一个nginx,报端口被占用错误。
```shell script
docker exec namespaceA nginx -g 'daemon off;'
容器Id操作
在docker create
或者docker run
后,容器id(CID)会打印到终端。容器id或者其简写可以用在docker命令中。如:
docker exec 7cb5d2b9a7ea ps
docker stop 7cb5d2b9a7ea
shell获取 CID命令如下: ```shell script CID=$(docker create nginx:latest) echo $CID
也可以将CID写入到文件中:
```shell script
docker create --cidfile /tmp/nginx.cid nginx
cat /tmp/nginx.cid
也可以从ps中获取CID,如获取最后创建的CID。 ```shell script CID=$(docker ps –latest –quiet) # 简写CID=$(docker ps -l -q) echo $CID
获取完整的CID使用`--no-trunc`选项
### docker run 参数
* --read-only 只读
* -v /run/apache2 从主机中挂载一个可写的路径。
* --tmpfs /tmp 给容器挂载一个内存的临时文件系统。
* -p 8000:80 映射主机8000端口到容器80端口
* --link wpdb:mysql 连接到wpdb容器的mysql。
* --env var="var-value" 设置环境变量
* --restart always 总是重启。
* --rm 当容器存在时,自动删除。
### docker update 对已存在的容器修改。
如将容器myes取消自动启动。
docker update –restart=no myes
### docker top
```shell script
docker top container-name
docker top命令查看容器运行了哪些进程。显示出每个容器的进程的主机PID。
查看容器内部的进程
通过如下命令查看容器内部的进程。 ```shell script docker exec container-name ps
杀死容器内部的进程:
```shell script
docker exec container-name kill <PID>
在容器中安装镜像git
```shell script docker container run -it –name image-dev ubuntu:latest /bin/bash # 创建ubuntu镜像并进入shell apt-get update # 更新apt apt-get -y install git #安装git git version # 查看git版本 exit #退出shell
### 初始化程序
Docker默认使用tini作为启动进程。可以通过`--init`选项,在容器中指定一个自定义的初始化进程。
```shell script
docker container run -it --init alpine:3.6 nc -l -p 3000
如上命令启动了nc -l -p 3000
的启动进程。
–help查看帮助
如:
docker update --help
docker --help
任何命令都可以使用--help
选项查看帮助信息。
查看docker日志
- 最新1000行的数据。
docker logs --tail=1000 容器名称
- 进入容器内部查看日志
/var/lib/docker/containers/容器ID/容器ID-json.log
- 实时查看日志
docker attach --sig-proxy=false 容器名称 docker attach 容器名称 --实时查看,但是CTRL+C强制退出以后也会影响容器的进程,导致强制退出