Docker 于2013年发布。
Docker 到底是什么
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口,是目前最流行的 Linux 容器解决方案,达到软件自带安装环境的效果。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层,像是超轻量级虚拟机。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
解决什么问题
一直以来,环境配置都是一大难题,让软件在各机器上运行,就运行必须保证环境一致:操作系统的设置,各种库和组件的安装,环境变量等等。换一台机器还得重新配置一次,非常繁琐费时。
虚拟机解决方案,有几个缺点,资源暂用多,安装繁琐,启动慢。
好在哪
资源占用少,启动快,更轻量,更简单的解决方案。
(1)提供一次性的环境。方便测试别人的软件。
(2)提供弹性的云服务。
(3)组建微服务架构。
Docker 安装
检查是否安装成功
$ docker version
# 或者
$ docker info
# service 命令的用法
$ sudo service docker start
image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面,根据image文件可生成多个容器实例。一般基于别人的 image 文件进行加工,而不是从零开始制作,一般用制作好的image文件,Docker 的官方仓库 Docker Hub。
# 从仓库拉去image。
docker image pull [image]
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
#根据image生成一个容器实例,该命令会从本地或仓库查找image文件,本地没有时,会自动执行docker image pull [image]
docker container run [image] [bash] 进入命令行模式
#终止实例
docker container kill [containID]
容器文件
image 文件生成的容器实例,是一个称为容器文件的文件。一旦容器生成就会有, image 文件和容器文件。而且关闭容器并不会删除容器文件,并不会释放空间,下面的命令可以在关闭容器是删除容器。
docker container rm [containerID]
Dockerfile 文件
它是一个文本文件,用来配置 image,Docker 根据 该文件生成二进制的 image 文件。
.dockerignore文件,指定不需要打包进image的文件。
Dockerfile文件
FROM node:8.4 该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
COPY . /app 将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
WORKDIR /app 指定接下来的工作路径为/app。
RUN npm install --registry=https://registry.npm.taobao.org在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
EXPOSE 3000 将容器 3000 端口暴露出来, 允许外部连接这个端口。
创建image文件,-t指定image文件名,. 表示Dockerfile文件所在路径是当前目录
docker image build -t [image] .
docker container run -p 8000:3000 -it [image] /bin/bash
-p参数:容器的 3000 端口映射到本机的 8000 端口。
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
image:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
CMD 命令
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
CMD node demos/01.js 容器启动后,自动执行
常用命令
启动容器
docker container start [containerID]
立即结束进程,如果有正在执行的操作可能会丢失数据
docker container kill
会进行一些清理工作
docker container stop
网友评论