CNB 云原生开发环境中已经预装了 docker,无需学员手动安装,直接体验即可,可使用如下命令来查看 docker 信息
docker version #查看版本信息 docker info #查看运行时信息
docker run hello-world
跟所有的技术学习起点一样,上述命令使用 docker 运行一个最简单的 hello-world 容器,它的功能仅仅是在屏幕上打印一些文字。
docker run 首先会去本地寻找 hello-world 镜像,如果本地没有,则会从默认的 Docker 镜像仓库中拉去,也就是 Docker Hub。
镜像的格式一般为
<repository>/<image>:<tag>
如果 repository 为空,默认为 Docker Hub, tag 为空,则默认为 latest,
如下是一个 CNB 制品库中的镜像示例, 其中 repository 为 docker.cnb.cool,
image 为 looc/git-cnb,tag 为 latest。
docker.cnb.cool/looc/git-cnb:latest
镜像分为 public 和 private 两种,对于 public 的镜像无需登录即可拉取,对于 private 的镜像则需要登录后才能拉取,登录命令如下
docker pull docker.cnb.cool/looc/private-git-cnb # 私有镜像,拉取失败,提示需要登录后拉取 docker login [-u ${username}] [-p ${password}] ${repository}
Alpine 镜像在企业生产环境中被广泛应用,它是一个极简的 Linux 发行版,
只包含最基本的命令和工具,因此镜像非常小,只有 5MB 左右,并且内置包管理系统 apk, 使其成为许多其他镜像的常用起点。
拉取镜像
docker pull alpine #拉取镜像 docker image ls #查看镜像
运行容器
docker run alpine ls -a #运行容器 docker ps -a #查看容器
交互式运行容器
docker run 命令默认使用镜像中的 Cmd 作为容器的启动命令,Cmd 可通过如下命令来查看。
docker inspect alpine --format='{{.Config.Cmd}}'
可以看到默认的 Cmd 为 ["/bin/sh"],因此直接使用 docker run alpine 会启动 /bin/sh 这个 shell,
我们 期望可以在这个 shell 中执行一些命令,但实际上它只是启动了 shell,退出了 shell,然后就停止了容器。
如果希望容器一直运行,可以启动一个交互式终端
docker run -it alpine #等效于 docker run -it alpine /bin/sh, 使用 -it 参数启动容器进入交互式终端
后台运行容器
run -it 命令会启动一个交互式终端,退出终端后容器也会停止,如果希望容器在后台运行,可以使用 -d 参数,如下命令会启动一个后台运行的容器。
docker run -it -d alpine #后台运行容器
加上 -d 参数后,容器不会执行完命令后立即退出,而是会进入后台运行,此时会返回一个唯一的 ID,使用 docker ps 命令可以查看容器运行状态。
docker attach 用于连接到一个正在运行的容器,主要作用是 访问容器的主进程(PID=1)的标准输入输出流
docker attach <container_id>
由于 attach 是接管了 PID=1 的进程,因此如果这个进程是守护进程,
那么 attach 退出后,容器也会退出。所以一般不推荐使用 attach 命令。
而是使用 docker exec 命令来连接容器。
docker exec -it <container_id> /bin/sh
此时进入到容器中使用 ps -a 命令可以看到容器中存在两个进程,其中 PID=1 的进程为 /bin/sh,
而另一个 /bin/sh 进程则是我们通过 exec 命令启动的,这个进程退出不会影响 PID=1 的进程,也就不会导致容器的退出。