Dawn's Blogs

分享技术 记录成长

0%

Docker学习笔记 (3) 容器和仓库操作

操作容器

列出容器

使用 docker ps [OPTIONS] 命令列出容器:

OPTIONS说明(常用):
-a:列出当前所有正在运行的容器+历史上运行过的容器。
-l:显示最近创建的容器。
-n:显示最近n个创建的容器。
-q:静默模式,只显示容器编号。

启动

启动容器有两种方式:

  • 一种是基于镜像新建一个容器并启动 docker run

    1
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    OPTIONS 说明:

    • –name=”容器新名字”: 为容器指定一个名称;

    • -d:后台运行容器并返回容器ID,也即启动守护式容器;

    • -i:以交互模式运行容器,通常与 -t 同时使用;

    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

    • -P:随机端口映射;

    • -p:指定端口映射;

    image-20221223100302221

    启动交互式容器:

    1
    docker run -it ubuntu /bin/bash

    使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行 /bin/bash 命令。

  • 另外一个是将在终止状态(stopped)的容器重新启动 docker start

  • 重启容器:docker restart 容器名/容器ID

后台运行

可以通过 -d 参数实现容器的后台运行:

1
2
C:\Users\63544>docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
905b8470023fe399cdc97f579cfef7def7450cf62874685ca64e7c7d223b4e78

此时容器会在后台运行并不会把输出的结果打印到宿主机的STDOUT上面(输出结果可以用 docker logs 查看):

1
2
3
4
5
6
7
8
C:\Users\63544>docker container logs 905b
hello world
hello world
hello world
hello world
hello world
hello world
hello world

使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker container ls 命令来查看容器信息(docker ps 命令也可以查看容器信息):

1
2
3
C:\Users\63544>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
905b8470023f ubuntu:18.04 "/bin/sh -c 'while t…" About a minute ago Up About a minute stupefied_pike

终止容器

可以使用 docker stop 来终止一个运行中的容器。

此外,当 Docker 容器中指定的应用终结时,容器也自动终止。

进入容器

在使用 -d 参数时,容器会在后台运行。那么可以使用 attach 或者 exec 命令进入容器:

  • docker attach 命令:如果从这个 stdin 中 exit,会导致容器的停止。

  • docker exec 命令:如果从这个 stdin 中 exit,不会导致容器的停止。推荐使用 exec 命令

    • -i 参数:只是打开容器的 STDIN,此时没有 Linux 命令提示符。
    • -it 参数:可以看到 Linux 命令提示符。

导入和导出容器

  • docker export 命令:可以导出容器。
1
docker export 7691a814370e > ubuntu.tar
  • docker import 命令:从容器快照文件中再导入为镜像。

删除容器

  • 可以使用 docker rm 来删除一个处于终止状态的容器。
    • 如果要删除一个运行中的容器,可以添加 -f 参数。
  • docker container prune 清除所有处于终止状态的容器。

重要操作

启动守护式容器

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的后台运行模式。

1
docker run -d 容器名

启动前台交互式容器

1
2
3
$ docker run -it 容器名 bashShell
UID PID PPID C STIME TTY TIME CMD
root 5007 4987 0 02:54 ? 00:00:00 bash

查看容器日志

1
docker logs 容器ID

查看容器内运行的进程

1
docker top 容器ID

查看容器内部细节

1
docker inspect 容器ID

进入正在运行的容器并以命令行交互

可以用两个命令:

  • docker exec -it 容器ID bashShell
  • docker attach 容器ID

两种命令的区别:

  • attach 直接进入容器启动命令的终端,不会启动新的进程。用 exit 退出,会导致容器的停止。
  • exec 是在容器中打开新的终端,并且可以启动新的进程。用 exit 退出,不会导致容器的停止

推荐使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。

从容器内拷贝文件到主机上

1
docker cp 容器ID:容器内路径 目的主机路径

导入和导出容器

  • export:导出容器的内容留作为一个tar归档文件。

    1
    docker export 容器ID > 文件名.tar
  • import:从tar包中的内容创建一个新的文件系统再导入为镜像。

    1
    cat 文件名.tar | docker import - 镜像名:镜像版本号

访问仓库

Docker Hub

Docker 官方维护了一个公共仓库 Docker Hub:

  • docker search 命令可以查找官方仓库中的镜像。

  • docker pull 命令下载镜像到本地。

  • 在登录后,可以使用 docker push username/镜像名:标签 将自己的镜像推送到 Docker Hub 中。


若不想使用官方的 Docker Hub 仓库,也可以创建私有仓库。