docker核心概念
image文件、container文件
- Docker把应用程序及其依赖打包在一个image文件里面,可以理解为一个容器的说明书。
- 通过这个image文件可以生成容器的实例,在文件系统中体现为一个container文件。
- 同一个image文件可以生成同时运行的多个实例。
image文件
image文件是一个二进制文件。一个image文件通常继承自另外一个image文件(例如docker官网的node image文件),而后加上一些个性化设置而成。
举例来说:你可以在ubuntu的image基础上加上Apache服务器,形成你自己的image。
image制作完成后,可以上传到网上的仓库,Docker 的官方仓库 https://hub.docker.com/ 是最重要、最常用的 image 仓库。
docker命令
主要有两种命令:image相关 、 container相关。
本文全部以对 koa-demo 应用的操作为例。
image相关命令
- 列出本机所有image文件
docker image ls
- 删除image文件
docker image rm
- 从docker仓库拉取image文件到本地
docker image pull library/hello-world
library是hello-world所在的组,docker官方仓库默认组就是library,所以可以省略。
docker image pull hello-world
- 自己创建image文件
docker image build -t imagename
- 以koa-demos 项目为例,先将源码下载到本地。
git clone https://github.com/ruanyf/koa-demos.git $ cd koa-demos
- 在要打包的应用程序的项目根目录下,创建一个文本文件.dockerignore,用来排除不需打包到image中的文件。例如
.git debug.log
- 再创建一个Dockerfile文本文件,内容如下
FROM node:8.4 #该image继承自官方的node image,冒号表示标签,这里表示8.4,即8.4版本的node. COPY . /app #将当前目录下的所有文件都拷贝到image文件的 /app 目录. WORKDIR /app #指定接下来的工作目录为 /app . RUN npm install --registry=https://registry.npm.taobao.org #在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。 EXPOSE 3000 #将容器的3000 端口暴露出来,允许外部连接这个端口
FORM:继承自哪个image; EXPOSE 容器要暴露的端口号
- 最后,创建image,此命令中最后有个.,表示Dockerfile文件的所在目录,本例是当前目录,所以用.来表示。
docker image build -t koa-demo:0.0.1 .
- 发布image文件到仓库。例如发布自己的image到docker官方的仓库,首先需要注册一个账号
- 登录到docker官网
```docker login `` - 为本地的image标注用户名和版本
docker image tag koa-demo:0.0.1 dockerAccount/koa-demo:0.0.1
docker仓库会直接根据你的dockerAccoutn为你的账号开辟一个组。 - 最后将本地image发布到仓库
docker image push userAccount/koa-demo:0.0.1
- 登录到docker官网
container相关
- 创建一个cotainer
docker container run -p 8000:3000 -it userAccount/koa-demo:0.0.1 /bin/bash
-p:本地端口与docker容器的端口的映射关系
-it:容器的shell会映射到当前本地的shell,你在当前窗口中输入的命令会传递到容器中去
/bin/bash:容器启动后,第一个执行的命令。这里是启用bash,以确保用户可以使用shell
如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
root@6be4c4a279df:/app#
6be4c4a279df为imageid?coainterId?
/app则是image打包时默认创建的一个目录
每运行一次run命令,就会创建一个新的容器文件。
2. 查看所有docker容器的信息及状态
docker container ls --all
3. 停止容器的运行,可以用ctrl+c停止进程,或者ctrl+d or exit退出container
docker cotainer kill containerId
或者
docker cotainer stop [container_id]
需要注意的是,以上命令只是停止运行,但是并不会删除容器文件。
4. 启动一个contialer
docker cotainer start [container_id]
5. 自动删除容器文件 --rm
docker container run --rm -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
会在容器运行结束后,自动删除容器文件
6. 进入容器:如果在启动容器时,没有加-it参数,那么就只能通过以下命令进入容器,然后进入shell执行命令
docker container exec [container_id] /bin/bash
7. 查看日志:如果在启动容器时,没有加-it参数,那么就只能通过以下命令查看输出
docker container logs [container_id]
8. 从正在运行的容器里,拷贝文件到本机
docker container cp [container_id]:/path/to/file