一、Docker概述
1.环境配置难题
软件开发麻烦事--环境配置。如果两台计算机环境不同,那么运行前还需要配置环境,安装依赖等等。
2.虚拟机
虚拟机就是带环境安装的一种解决方案,它可以在一个操作系统上运行另一个操作系统,但是虚拟机占用资源多、冗余步骤多、启动慢等等缺点。
3.linux容器
针对于虚拟机的缺点,linux开发了另一种虚拟化技术:linux容器。
linux容器是对进程进行隔离,即在正常进程外套了一个保护层。
4.docker
docker属于linux容器的一种封装,提供简单易用的容器使用接口,它是目前最流行的linux容器解决方案。
docker将应用程序与该程序的依赖,打包在一个文件里面,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了docker,就不用担心环境问题。
二、docker应用
docker把应用程序及其依赖,打包在image文件里,只有通过这个文件,才能生成docker容器。image文件可以看做是容器的模板,docker根据image文件生成容器的示例,同一个image文件,可以生成多个同时运行的容器示例。
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。
为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。
1.示例
①将image拉取到本地
$ docker image pull library/hello-world
利用docker image pull 命令将library/hello-world image文件拉取到本地。(library是image所在的组,可省略)
②运行image文件
$ docker container run hello-world
利用docker container run 命令将image文件生成一个运行的容器实例。运行之后hello world容器会自动终止。但有些容器不会自动终止,例如提供某服务,手动终止命令为
$ docker container kill [containID]
2.容器文件
image文件生成的容器示例也是一个文件,称为容器文件,即一旦容器生成,则存在image文件和容器文件,而且关闭容器不会删除容器文件。
$ docker container ls 列出本机正在运行的容器 $ docker container ls -all 列出所有容器,包括停止的容器 $ docker container rm [containerID]
删除容器文件
3.制作自己的docker容器
如果制作自己的image,需要用到Dockerfile文件,它本身是一个文本文件,用来配置image。Docker根据该文件生成二进制的image文件。
①编写Dockerfile文件
在项目的根目录新建.dockerignore文件,填写打包时要排除的路径,例如.git、依赖等
在项目的根目录新建Dockerfile,填写(示例):
FROM ubuntu:16.04RUN apt upgrade
RUN apt install python3
RUN apt install vim
RUN apt install pip3
EXPOSE 3000
CMD cd ..
- FROM node:8.4 : 指定使用哪个镜像源。
- RUN npm install : RUN指令是告诉docker在镜像内执行的命令,安装了什么等。
- EXPOSE 3000 : 将容器3000端口暴露出来,允许外部连接这个端口。
②创建image文件
有了Dockerfile文件后,就可以使用docker image build命令创建image文件。
$ docker image build -t koa-demo . 或 $ docker image build -t koa-demo:0.0.1 .
-t表示指定image文件名字,后面还可以用冒号指定标签,如果不指定默认的标签就是latest。最后的 . 表示Dockerfile的路径,即当前路径。运行之后就可以看到生成的image文件了。
③生成容器
参考:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html
参考自:阮一峰的网络日志