Docker容器

运行容器

命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name=”my-ubuntu”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=”charlie”: 设置环境变量;
  • –env-file=[]: 从指定文件读入环境变量;
  • –cpuset=”0-2″ or –cpuset=”0,1,2″: 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • –net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • –link=[]: 添加链接到另一个容器;
  • –expose=[]: 开放一个端口或一组端口;
  • –restart 容器退出时要应用的重启策略。
运行命令:

启动一个ubuntu容器docker run -i -t ubuntu,如果本地没有镜像会先去下载,然后再启动

[root@izur9gz docker]# docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete 
05731e63f211: Pull complete 
0bd67c50d6be: Pull complete 
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest
root@97e685431765:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18496  2012 pts/0    Ss   07:49   0:00 /bin/bash
root       510  0.0  0.0  34388  1460 pts/0    R+   08:07   0:00 ps -aux

在这个容器中运行的ubuntu可以像一个正常的ubuntu系统一样运行,可以在里面做任何事情,比如安装个vim软件

root@97e685431765:/# apt update
···
··
·
root@97e685431765:/# apt install -y vim
···
··
·
root@97e685431765:/# vim myfile

当你想退出这个ubuntu命令行界面只需要输入exit就返回到原来状态了,容器也会随之关闭

root@97e685431765:/# exit
exit
[root@izur9gz docker]#

列出容器

命令格式
docker ps [OPTIONS]

OPTIONS说明:

  • -a :显示所有的容器,包括未运行的;
  • -f :根据条件过滤显示的内容;
  • –format :指定返回值的模板文件;
  • -l :显示最近创建的容器;
  • -n :列出最近创建的n个容器;
  • –no-trunc :不截断输出;
  • -q :静默模式,只显示容器编号;
  • -s :显示总的文件大小。
运行命令:

承接上文测试内容,没有正在运行的容器,有一个未运行的容器,容器名字叫“pedantic_snyder”这是启动之后docker自动起得容器名字

[root@izur9gz docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@izur9gz docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
97e685431765        ubuntu              "/bin/bash"         25 minutes ago      Exited (0) 4 minutes ago                       pedantic_snyder

容器命名

前文的运行容器命令中有个参数--name是用来起名字的,这里也特地说下,命名只能有下划线_,圆点·,横线-三种特殊符号
运行命令:
启动个ubuntu容器然后命名为Charlie-ubuntu,退出容器命令行,然后看生成了一个名为Charlie-ubuntu的容器

[root@izur9gz docker]# docker run --name Charlie-ubuntu -i -t ubuntu /bin/bash
root@c9c17b86b97e:/# exit
exit
[root@izur9gz docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c9c17b86b97e        ubuntu              "/bin/bash"         11 seconds ago      Exited (0) 7 seconds ago                        Charlie-ubuntu
97e685431765        ubuntu              "/bin/bash"         38 minutes ago      Exited (0) 17 minutes ago                       pedantic_snyder

容器启动

命令格式:
docker start [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • –attach , -a:Attach STDOUT/STDERR and forward signals
  • –interactive , -i:Attach container’s STDIN
运行命令:

可以启动一个或多个,启动可以用CONTAINER ID也可以用NAMES

[root@izur9gz docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c9c17b86b97e        ubuntu              "/bin/bash"         11 seconds ago      Exited (0) 7 seconds ago                        Charlie-ubuntu
97e685431765        ubuntu              "/bin/bash"         38 minutes ago      Exited (0) 17 minutes ago                       pedantic_snyder
[root@izur9gz docker]# docker start Charlie-ubuntu
Charlie-ubuntu
[root@izur9gz docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c9c17b86b97e        ubuntu              "/bin/bash"         33 minutes ago      Up 10 seconds                           Charlie-ubuntu
[root@izur9gz docker]# docker stop Charlie-ubuntu
Charlie-ubuntu
[root@izur9gz docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@izur9gz docker]# docker start Charlie-ubuntu 97e685431765
Charlie-ubuntu
97e685431765
[root@izur9gz docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c9c17b86b97e        ubuntu              "/bin/bash"         35 minutes ago      Up 5 seconds                            Charlie-ubuntu
97e685431765        ubuntu              "/bin/bash"         About an hour ago   Up 5 seconds                            pedantic_snyder

容器停止

命令格式:
docker stop [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -t int:在杀死容器之前等待停止的秒数,默认10秒
运行命令:

停止名为Charlie-ubuntu容器

[root@izur9gz docker]# docker stop Charlie-ubuntu
Charlie-ubuntu

容器重启

命令格式:
docker restart [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -t int:在杀死容器之前等待停止的秒数,默认10秒
运行命令:

重启名为Charlie-ubuntu容器

[root@izur9gz docker]# docker restart Charlie-ubuntu
Charlie-ubuntu

连接到正在运行中的容器

命令格式:
docker attach [OPTIONS] CONTAINER
运行命令:

跟run命令-i -t效果相同,exit退出会停止容器

[root@izur9gz docker]# docker attach Charlie-ubuntu
root@c9c17b86b97e:/#

后台运行容器

前文提到的run命令的-d参数表示后台运行容器,并返回容器ID;
后台运行一个ubuntu的容器,里面每隔一秒打印一次hello world

[root@izur9gz docker]# docker run --name Charlie2-ubuntu -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done"
2d543a799a38ad2c00204b633dad77f2ac831b5cd44801d48f5cff59c30b40f8

获取容器的日志

命令格式:
docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f : 跟踪日志输出
  • –since :显示某个开始时间的所有日志
  • -t : 显示时间戳
  • –tail :仅列出最新N条容器日志
运行命令:

前文有个每秒打印一次hello world的ubuntu容器,查看这个容器后五条日志

[root@izur9gz docker]# docker logs --tail 5 Charlie2-ubuntu
hello world
hello world
hello world
hello world
hello world
[root@izur9gz docker]#

查看容器中运行的进程信息

命令格式:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
运行命令:
[root@izur9gz docker]# docker top Charlie2-ubuntu
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12260               12210               0                   18:22               ?                   00:00:00            /bin/bash -c while true;do echo hello world;sleep 1;done
root                12894               12260               0                   18:30               ?                   00:00:00            sleep 1
[root@izur9gz docker]# 

在运行的容器中执行命令

命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d :分离模式: 在后台运行
  • -i :即使没有附加也保持STDIN 打开
  • -t :分配一个伪终端
运行命令:

先后台运行创建一个newFile文件,然后进入终端查看,exit不会停止容器

[root@izur9gz docker]# docker exec -d Charlie-ubuntu touch ~/newFile
[root@izur9gz docker]# docker exec -t -i Charlie-ubuntu /bin/bash
root@c9c17b86b97e:/# cd ~
root@c9c17b86b97e:~# ls
newFile
root@c9c17b86b97e:~# exit
exit
[root@izuf6barrnre7hruzsy99gz docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c9c17b86b97e        ubuntu              "/bin/bash"              2 hours ago         Up 6 minutes                            Charlie-ubuntu

重启策略

run命令的参数--restart有四种策略

策略 用途
no 默认策略,退出时不要自动重新启动容器。
on-failure[:max-retries] 指定退出时尝试重启的次数
unless-stop 始终重新启动容器,但是如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart
always 无论退出状态如何,始终重新启动容器。当您指定always时,docker守护进程将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护进程启动时启动
运行命令:

运行redis如果退出会尝试启动三次

docker run --restart=on-failure:3 redis

获取容器详细信息

命令格式:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • –type :为指定类型返回JSON。
运行命令:

回去容器名为Charlie-ubuntu的详情,然后获取详情中的ip地址信息

[root@izur9gz docker]# docker inspect Charlie-ubuntu
[
    {
        "Id": "c9c17b86b97e9528535abd1ffce67945442ca985b91ce3dff3ac4fa82e5e2025",
        "Created": "2019-05-22T08:27:53.091120726Z",
···
···
···
        },
        "NetworkSettings": {
···
···
···
            "IPAddress": "172.17.0.4",
···
···
···
            }
        }
    }
]
[root@izur9gz docker]# docker inspect --format '{{.NetworkSettings.IPAddress}}' Charlie-ubuntu
172.17.0.4

删除容器

命令格式:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
运行命令:
[root@izur9gz docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
dc834aace694        ubuntu              "-d"                     16 minutes ago      Created                                         loving_vaughan
[root@izur9gz docker]# docker rm dc834aace694
dc834aace694
[root@izur9gz docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

删除所有已经停止的容器
docker rm $(docker ps --filter status=exited -q)

发表评论

邮箱地址不会被公开。 必填项已用*标注