程序员PHP经验分享

docker 基础

2019-02-27  本文已影响7人  陈钢镚学财

docker 是为了统一环境、配置、依赖问题而诞生的方案。

历史背景

为了统一环境、配置、依赖问题,曾经出现过虚拟机方案,但虚拟机方案有以下问题:

在虚拟机方案上再做升级之后,出现这样 linux 容器的概念,一种虚拟化技术,对进程进行隔离。

docker就是 linux 容器的封装,提供操作 linux 容器的接口,还将容器状态以版本(镜像)的方式管理。

认识 docker

docker 是服务端/客户端架构,通常服务端是一个服务进程,与客户端运行在同一主机上,可使用如下命令查看 docker 服务进程是否运行:

docker version

这个命令当然也可以查看版本,docker 的版本信息,如果无法查看版本,则说明服务进程没有运行。

docker 用途

镜像与容器

镜像(image)是指只读层的重叠,就像代码版本一样,可以被复制、分享,它是「环境的版本」,将应用程序和依赖打包在一起;

容器实例(container)是指一堆层的统一视角,与镜像的区别在于最上面的「可读写层」,可对容器进行更改写入,生成新的镜像,而一个镜像,也可以生成一个新的运行时容器。

另外,镜像和容器本质上都是文件,如果关闭容器,只是停止容器运行,文件仍然存在,仍然占据空间。

镜像市场

hub.docker.com

docker 专门设立的镜像市场,可以直接从镜像市场上得到你想要的镜像。

但是官方镜像市场是外国服务器,中国访问非常缓慢,国内也有镜像市场,是对官方镜像市场的拷贝。

如何使用中国镜像

常用命令

创建 image

新建 .dockerignore

此文件排除不需要打包进 image 的路径及文件,类似于 .gitignore 。

.git
vendor

新建 Dockerfile

FROM node:8.4       // 代表此镜像继承于官方的 node 8.4 镜像
COPY . /app         // 将当前 . 目录的内容拷贝进容器的 /app 目录,除 .dockerignore 指定的以外
WORKDIR /app        // 指定接下来的工作目录在 /app 下
RUN npm install     // 在 /app 下执行 npm install 命令,安装好的依赖也会被打包进镜像中
EXPOSE 3000         // 开放 3000 端口允许外部连接
CMD node demo/1.js  // 在该此镜像被生成容器运行后,自动执行此命令

Dockerfile 是一个文本文件,用于配置 image ,docker 根据此文件生成 image 文件

生成镜像

docker image build -t name:version 

version 不指定时默认为 latest

运行容器

docker container run –p 8000:3000 –it bash

以该 image 生成容器实例并运行,并将本机的 8000 端口映射到容器的 3000 端口

CMD 与 RUN 的区别:

发布 image 到市场

在 hub.docker.com 注册账号后,执行以下命令:

docker login
docker image tag imagename username/library:version
docker image push library/name:version

docker 编排工具

docker compose 是多个 docker 容器组成一个应用的关联工具,docker-compose.yml 中写好多个容器之间的联系

上一篇 下一篇

猜你喜欢

热点阅读