CNB 云原生开发环境中已经预装了 docker,无需学员手动安装,直接体验即可,可使用如下命令来查看 docker 信息
docker version #查看版本信息 docker info #查看运行时信息
docker run hello-world
学习一门新语言,第一个程序是输出hello world! 学习docker,第一个容器运行输出hello from docker!
docker pull alpine #拉取镜像
docker image ls #查看镜像
[<repository>/]<image>[:<tag>]
repository: 镜像仓库,默认仓库为 Docker Hub image: 镜像名称 tag: 镜像标签,默认值为 latest
我们拉取一个完整的镜像格式的镜像,如下所示
repository 为 docker.cnb.cool
image 为 /xjtu-cs/docker-exercises/my-alpine
tag 为 latest。
docker.cnb.cool/xjtu-cs/docker-exercises/my-alpine:latest
镜像分为 public 和 private 两种,对于 public 的镜像无需登录即可拉取 对于 private 的镜像则需要登录后才能拉取,登录命令如下
docker pull docker.cnb.cool/xjtu-cs/docker-exercises/my-alpine # 公开镜像,正常拉取 docker pull docker.cnb.cool/xjtu-cs/private-repo/my-alpine # 私有镜像,拉取失败,提示需要登录后拉取
docker login [-u ${username}] [-p ${password}] ${repository}
docker run alpine #运行容器
docker ps
为什么看不到刚刚启动的容器? 因为容器运行后,会立即退出,因为容器中并没有任何需要运行的进程,因此容器会立即退出。
docker ps -a
如果希望容器一直运行,可以启动一个交互式终端,
docker run -it alpine #等效于 docker run -it alpine /bin/sh, 使用 -it 参数启动容器进入交互式终
run -it 命令会启动一个交互式终端,退出终端后容器也会停止
如果希望容器在后台运行,可以使用 -d 参数
docker run -it -d alpine
此时通过docker ps即可看到容器正在运行,但是无法进入容器,因为容器没有前台进程,因此需要进入容器后启动一个前台进程,如下所示
docker exec -it <container_id> /bin/sh
/ # ps -ef PID USER TIME COMMAND 1 root 0:00 /bin/sh 13 root 0:00 /bin/sh 19 root 0:00 ps -ef
扩展:还有另一种登入容器的指令
docker attach <container_id>
由于 attach 是接管了 PID=1 的进程,因此如果这个进程是守护进程。在容器内部,我们可以看到进程情况:
/ # ps -ef PID USER TIME COMMAND 1 root 0:00 /bin/sh 7 root 0:00 ps -ef
由于 attach 是接管了 PID=1 的进程,因此如果这个进程是守护进程, 那么 attach 退出后,容器也会退出。所以一般不推荐使用 attach 命令。
docker inspect alpine