Docker 启动
Docker 是服务器 —- 客户端架构。命令行运行 docker
命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动:
1 | # service 命令的用法 |
image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
1 | # 列出本机的所有 image 文件。 |
image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。
为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。
实例:hello world
首先,运行下面的命令,将 image 文件从仓库抓取到本地。
1
2 > $ docker image pull library/hello-world
>
上面代码中,docker image pull
是抓取 image 文件的命令。library/hello-world
是 image 文件在仓库里面的位置,其中 library
是 image 文件所在的组,hello-world
是 image 文件的名字。
由于 Docker 官方提供的 image 文件,都放在 library
组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
1
2 > $ docker image pull hello-world
>
抓取成功以后,就可以在本机看到这个 image 文件了。
1
2 > $ docker image ls
>
现在,运行这个 image 文件。
1
2 > $ docker container run hello-world
>
docker container run
命令会从 image 文件,生成一个正在运行的容器实例。
注意,docker container run
命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的 docker image pull
命令并不是必需的步骤。
如果运行成功,你会在屏幕上读到下面的输出。
1
2
3
4
5
6
7 > $ docker container run hello-world
>
> Hello from Docker!
> This message shows that your installation appears to be working correctly.
>
> ... ...
>
输出这段提示以后,hello world
就会停止运行,容器自动终止。
有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。
下面命令,生成并启动了 Ubuntu 的 image(的实例),并在控制台输出 “Hello”,最后终止这个 Ubuntu 容器实例
1 | $ docker container run ubuntu /bin/echo "Hello" |
管理容器
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
新建
通过 docker 的两个参数 -i -t,让 docker 运行的容器实现” 对话” 的能力
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
其他参数:
- —name:为该容器指定名称
- -p:指定端口映射
比如,我们新建并启动一个 Ubuntu 容器实例,并将当前控制台作为这个实例的控制台。并在这个实例中输入 cat /proc/version
和 ls
以分别查看当前系统版本信息和当前目录下文件列表
1 | $ docker container run -it ubuntu /bin/bash |
我们可以在控制台中再打开一个 tab,以查看刚才这个 Ubuntu 容器实例的运行情况:
docker container run
命令是新建并启动容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用 docker container start
命令,它用来启动已经生成、已经停止运行的容器文件。
1
2 > $ docker container start [containerID/containerName]
>
比如这里 docker start -i ubuntu2
与 docker start -i 9aaa62cc0621
是完全等效的。
使用 Dockerfile 定制镜像
Dockerfile 是一个文本文件,其内包含了一条条的指令 (Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile
:
1 | $ mkdir mynginx |
Dockerfile 文件:
1 | FROM debian:jessie |
共享 docker 镜像
方法 1:打成.tar 包,复制该.tar 到其他主机
1 | sudo docker save -o demo.tar demo |