zhaoyu@home:~$

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日志

  1. 最新1000行的数据。
    docker logs --tail=1000 容器名称
    
  2. 进入容器内部查看日志
    /var/lib/docker/containers/容器ID/容器ID-json.log
    
  3. 实时查看日志
    docker attach --sig-proxy=false 容器名称
    docker attach 容器名称 --实时查看,但是CTRL+C强制退出以后也会影响容器的进程,导致强制退出