ronaldoxzb

一、集装箱?

来自于知乎的通俗解释:
Docker 的思想来自于 集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker 核心概念

镜像(image)

类似于虚拟机中的镜像(image),是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。镜像可以用来创建 Docker 容器

仓库(repository) node.js 镜像仓库

仓库(Repository)是集中存放镜像文件的场所。类似于代码仓库,这里是镜像仓库。

容器(container)

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。可以看作一个简易版的 Linux 环境

对比记忆

Java 号称“一次编译,到处运行”,因为 java 虚拟机解决平台的兼容性问题,所以有 java 虚拟机的地方就能跑 java 代码;
Docker 是:“一次封装,到处运行”,因为 docker 解决了应用环境的问题,安装了 docker 的平台就能跑“docker 包”,这样就决绝了“开发环境能跑,一上线就崩”的尴尬。

常用命令

images      List images
ps          List containers
pull        Pull an image or a repository from a registry
push        Push an image or a repository to a registry
rename      Rename a container
restart     Restart one or more containers
rm          Remove one or more containers
rmi         Remove one or more images
run         Run a command in a new container

快速启动常用软件 有道云笔记

二、Dockerfile

什么是 dockerfile?

Dockerfile 是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker 通过读取Dockerfile中的指令自动生成映像。

docker build命令用于从 Dockerfile 构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的 Dockerfile。

docker build -f /path/to/a/Dockerfile

Dockerfile 文件说明

Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM。一个声明以#字符开头则被视为注释。可以在 Docker 文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

# node镜像
FROM node:12-alpine as build-stage
RUN echo "-------------------- web环境配置 --------------------"
# 指定接下来的工作路径为/app  - 类似于cd命令
WORKDIR /app
# 拷贝前端项目到app目录下
COPY ./web/package*.json ./
# 安装依赖
RUN npm i --registry=https://registry.npm.taobao.org
COPY ./web ./
# 打包 - 目的:丢到nginx下跑
RUN npm run build:prod

三、Docker Compose

什么是 docker-compose?

Docker-compose 是 docker 的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务。

version: '2'
services:
  mysql5.7:
    image: mysql:5.7
    container_name: mysql
    volumes:
      - "./mysql5.7/data:/var/lib/mysql"
      - "./mysql5.7/conf:/etc/mysql/conf.d"
      - ./docker/mysql/init:/docker-entrypoint-initdb.d/ #执行默认脚本
    ports:
      - "3306:3306"
    user: root:root
    tty: true
    restart: always
    environment:
      - PROCESS_NUM=1
      - MYSQL_ROOT_PASSWORD=xier0571
      - TZ=Asia/Shanghai
      - TIME_STYLE="+%F %T"
      - LANG=en_US.UTF-8
  redis4:
    image: redis:4
    container_name: redis
    volumes:
      - "./redis4/conf:/usr/local/etc/redis"
      - "./redis4/data:/data"
    ports:
      - "6379:6379"
    tty: true
    restart: always
    command: redis-server --requirepass xier0571

常用命令

up                 Create and start containers
down               Stop and remove resources
images             List images
ps                 List containers
top                Display the running processes

全站部署项目demo egg-spider

Q.E.D.


Be an interesting person