LV070-开始docker之旅
CNB 云原生开发环境中已经预装了 docker,不需要手动安装,直接体验即可,不在CNB的话前面已经知道了怎么安装啦。我们可使用如下命令来查看 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 容器
1. Alpine简介
Alpine 镜像在企业生产环境中被广泛应用,它是一个极简的 Linux 发行版, 只包含最基本的命令和工具,因此镜像非常小,只有 5MB 左右,并且内置包管理系统 apk, 使其成为许多其他镜像的常用起点。
2. 拉取镜像
docker pull alpine #拉取镜像
docker image ls #查看镜像3. 运行容器
docker run alpine ls -a #运行容器
docker ps -a #查看容器4. 交互式运行容器
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 参数启动容器进入交互式终端5. 后台运行容器
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 的进程,也就不会导致容器的退出。
6. 自动清理
在运行容器的过程中,停止的容器会占用磁盘空间,可以使用 --rm 参数让容器在退出后自动删除。
docker run --rm alpine echo "Hello, World!" #容器退出后自动删除使用 --rm 参数后,容器在退出时会自动被删除,不再需要手动清理。这对于临时性的容器任务非常有用。
如果希望清理所有停止的容器,可以使用如下命令
docker container prune #清理所有停止的容器此外,还可以清理未使用的镜像和网络资源
docker image prune #清理未使用的镜像
docker network prune #清理未使用的网络
docker system prune #清理所有未使用的资源docker system prune 命令会清理所有未使用的容器、镜像、网络和构建缓存,是一个非常实用的清理命令。