docker是什么?为什么要使用docker?docker的基本原理又是什么?常用命令又有哪些?
这些相关概念已经很多大佬整理出来了,具体参见:
关于命令的参数说明,详见:docker manual
Notice :
下面介绍到的命令中containerID如果不特殊说明,一般都可以用containeName来代替
$ docker version
$ docker info # 或者
Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档)。
$ sudo service docker start #service 命令的用法
$ sudo systemctl start docker #systemctl 命令的用法
Docker 把应用程序及其依赖,打包在 image 文件(静态镜像)里面。只有通过这个文件,才能生成 Docker 容器(动态实例)。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
$ docker image pull library/hello-world
上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。
由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
$ docker image pull hello-world
下载完成后,该镜像被默认保存到 /var/lib/docker 目录下。
$ docker image ls # 列出本机的所有 image 文件。
$ docker images #作用同上
$ docker image rm [imageName] # 删除 image 文件
$ docker rmi [imageName] #同上
docker container run
命令会从 image 文件,生成一个正在运行的容器实例。
注意,docker container run
命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull
命令并不是必需的步骤。
$ docker container run hello-world #将下载好的镜像实例化容器
注意:运行时候可以设置相关运行参数,例如如下样例:
docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
其中:
- -p参数:容器的 3000 端口映射到本机的 8000 端口。
- -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
- koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
- /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
查看容器列表
$ docker ps #查看所有正在运行容器
$ docker container ls #同上
$ docker ps -a #查看所有容器,包括未运行的
进入正在运行容器
docker container exec
命令用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数(-it
参数作用如上样例所述),就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。
$ docker container exec -it [containerID] /bin/bash
docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。
$ docker container logs [containerID]
有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。
对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。
$ docker container kill [containID]
$ docker container stop [containerID]
前面的
docker container kill
命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker container stop
命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。
前面的docker container run
命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用docker container start
命令,它用来启动已经生成、已经停止运行的容器文件。
docker container start [containerID] #docker container start
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
$ docker container ls # 列出本机正在运行的容器
$ docker container ls --all # 列出本机所有容器,包括终止运行的容器
$ docker container rm [containerID] #终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。
拷贝
docker container cp
命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。
$ docker container cp [containID]:[/path/to/file] .