- 查看当前版本
docker --version
root@ubuntu:/# docker --version
Docker version 1.13.1, build 092cba3
- 查看docker环境信息
docker info
- 查看镜像和容器的详细信息
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
root@ubuntu:/# docker inspect ubuntu //查看ubuntu镜像信息
[
{
"Id": "sha256:74f8760a2a8b28abade3fcbcdb6998543f1d9b4a6fb61463c10adc0765c3cb12",
......
root@ubuntu:/# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca35e081d142 ubuntu "/bin/bash" 31 minutes ago Exited (0) 16 minutes ago mytest
root@ubuntu:/# docker inspect mytest//查看ID为ca35e081d142,名字为mytest的容器信息
[
{
"Id": "ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647",
"Created": "2018-07-18T03:21:54.867247035Z",
"Path": "/bin/bash",
- 获取Docker镜像
- Docker Registry地址:<域名/IP>[:端口号], 默认地址是Docker Hub
- 仓库名:仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
root@ubuntu:/# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7996ebd2246a: Pull complete
de532f9a4f9f: Pull complete
7de2709b2a83: Pull complete
70b6ac64a142: Pull complete
23caf550e032: Pull complete
Digest: sha256:5c27f1bbe17a6dd8e6fcf02d8717f68e52e3e7130302c5280fa6f92ad9ae7fec
Status: Downloaded newer image for ubuntu:latest
- 查看本地所有镜像
docker images
- 查看正在运行的容器
-a 参数可以查看所有容器,包括停止的容器;-q 参数表示只显示容器的id
docker ps
- 删除镜像和容器
docker rmi命令用于删除镜像,docker rm命令用来删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rmi [OPTIONS] IMAGE [IMAGE...]
//删除镜像之前,先查看是否有容器在运行,若在运行,先
docker stop CONNTAINER_ID
//然后清除所有已经停止的容器
docker rm $(docker ps -qa)
- 容器的启动、停止和重启
docker start CONTAINER_ID // 启动一个容器
docker stop CONTAINER_ID // 停止一个容器
docker restart CONTAINER_ID // 重启一个容器
- 创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -p: 端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name="nginx-lb": 为容器指定一个名称;
- --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h "mars": 指定容器的hostname;
- -e username="ritchie": 设置环境变量;
- --env-file=[]: 从指定文件读入环境变量;
- --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- --net="bridge": 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型;
- --link=[]: 添加链接到另一个容器;
- --expose=[]: 开放一个端口或一组端口;
使用示例
- 从ubuntu镜像启动一个容器,并执行echo命令打印出“Hello World”之后容器就停止运行。
root@ubuntu:/# docker run ubuntu echo "Hello World"
Hello World
- 从ubuntu镜像启动一个容器,并为它分配一个伪终端执行/bin/bash命令,用户可以在该伪终端与容器进行交互。若不添加-d参数,退出/bin/bash之后,容器也就退出了。
root@ubuntu:/# docker run -i -t --name test ubuntu /bin/bash
root@df613d47e175:/#
- docker run -d 以守护状态运行
root@ubuntu:/# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@ubuntu:/# docker run -idt --name mytest ubuntu /bin/bash
ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647
root@ubuntu:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca35e081d142 ubuntu "/bin/bash" 41 seconds ago Up 40 seconds mytest
- 进入容器
docker exec
- 通过CONTAINER_ID进入容器
docker exec -it CONTAINER_ID /bin/bash
root@ubuntu:/# docker exec -it ca35e081d142 /bin/bash
root@ca35e081d142:/# echo 'hello world'
hello world
root@ca35e081d142:/#
- 通过CONTAINER_NAME进入容器
docker exec -it CONTAINER_NAME /bin/bash
root@ca35e081d142:/# exit
exit
root@ubuntu:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca35e081d142 ubuntu "/bin/bash" 11 minutes ago Up 11 minutes mytest
root@ubuntu:/# docker exec -it mytest /bin/bash
root@ca35e081d142:/# echo 'hello world'
hello world
root@ca35e081d142:/#
docker attach
docker attach [CONTAINER_ID | NAMES]
注意:使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
事实上, docker attach 不是一个用来进入容器的命令, 或者说它不是用来在容器内运行一个 bash(shell) 的命令, 它用来连接到容器中运行中的进程, 也就是容器内 PID=1 的那个进程, 如果这个进程没有 stdout/stderr ,那么你将看不到任何输出, 如果它没有接收 stdin 你也无法发送指令给它。这也就是为什么运行一个 bash 的容器, 就可以 attach 进去执行命令, 而运行一个 mysql server 的容器就无法操作的原因。
如何退出 attach 的容器
使用 CTRL-P /CTRL-Q 来退出容器, 如果使用 CTRL+C 那么会导致容器结束(Exited), 因为它会发送 SIGKILL 给容器的进程, 然后这个容器就 Exited 了, 当然这里可以使用 docker attach --sig-proxy=false 防止发送 SIGKILL 给进程。
root@ubuntu:/# docker attach ca35e081d142
root@ca35e081d142:/# exit
exit
root@ubuntu:/# docker attach mytest
You cannot attach to a stopped container, start it first
root@ubuntu:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@ubuntu:/# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca35e081d142 ubuntu "/bin/bash" 16 minutes ago Exited (0) 49 seconds ago mytest
- 查看容器使用的资源情况
docker stats [OPTIONS] [CONTAINER...]
root@ubuntu:/# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ca35e081d142 0.00% 908 KiB / 3.859 GiB 0.02% 3.67 kB / 648 B 123 kB / 0 B 2
- events、history和logs命令
这三个命令用于查看Docker的系统日志信息。
- events命令会打印出实时的系统事件
详细操作和具体参数介绍可参考该链接
需要开启两个shell来演示实例。
shell1:监听事件
root@ubuntu:/# docker events
shell2:对容器进行操作
root@ubuntu:/# docker start mytest
mytest
root@ubuntu:/# docker exec -it mytest /bin/bash
root@ca35e081d142:/# echo 'Hello'
Hello
shell1:显示刚才的事件
root@ubuntu:/# docker events
2018-07-18T14:52:56.822285857+08:00 network connect d102e20c899b1a51cb220f0ade9e02625680ca48468a1028519beabcd1c63994 (container=ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647, name=bridge, type=bridge)
2018-07-18T14:52:57.057482151+08:00 container start ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
2018-07-18T14:53:42.573138943+08:00 container exec_create: /bin/bash ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
2018-07-18T14:53:42.574748850+08:00 container exec_start: /bin/bash ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
- history命令会打印出指定镜像的历史版本信息,即构建镜像的每一层镜像的命令记录
docker history [OPTIONS] IMAGE
/* OPTIONS说明:
-H :以可读的格式打印镜像大小和日期,默认为true
--no-trunc :显示完整的提交记录
-q :仅列出提交记录I */
root@ubuntu:/# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
74f8760a2a8b 30 hours ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
30 hours ago /bin/sh -c mkdir -p /run/systemd && echo '... 7 B
30 hours ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\... 2.76 kB
30 hours ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B
30 hours ago /bin/sh -c set -xe && echo '#!/bin/sh' >... 745 B
30 hours ago /bin/sh -c #(nop) ADD file:5fabb77ea8d61e0... 82.4 MB
- logs命令会打印出容器中进程的运行日志
想要进一步了解原理可以参考下面链接1和链接2
docker logs [OPTIONS] CONTAINER
/* OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志 */
虽然 docker exec 所执行的进程也是容器的一部分,但是Docker 容器的日志只负责应用本身的标准输出,不包括 docker exec 衍生进程的标准输出。因此:
(1)docker exec 完成容器内外的交互,但希望完成大量标准输出时需谨慎;
(2)每次 docker exec ,Docker Daemon 均会记录一次 execID,切忌过于频繁。
root@ubuntu:/# docker logs -f mytest
root@ca35e081d142:/# exit
exit