docker-basic

快速过一遍

概念 #

镜像 容器 网络 数据卷

其他略。 https://www.zhihu.com/question/28300645/answer/67707287 docker把开源项目修改成 moby 了,所以github上搜不到。

安装和配置 #

安装 #

配置加速服务 #

使用阿里云的加速器,加速访问。在阿里云中,每个加速器用户的地址是不一样的。 具体的在这里看 https://cr.console.aliyun.com/ 也可以使用腾讯云服务 参考网址 https://cloud.tencent.com/document/product/457/9113

运行 #

docker pull images:tag # 拉取镜像
docker images # 列出镜像列表
docker start 容器名 -d
docker stop 容器名
docker exec -it nginx bash 

其他的一般通过 dockerfile 运行,比较详细。

dockerfile #

https://yeasy.gitbooks.io/docker_practice/

.dockerignore #

.git node_modules

alipine #

精简版Linux,推荐使用 比如 alpine 4.4M,Ubuntu 84M, debian 101M, centos 200M 比如 python:3.6-alpine 74M, python:3.6-jessie 697M 优点,体积小。缺点,要改造很复杂,不如完整的比如Ubuntu方便。

技术细节 #

  • FROM: node:12.13-alpine
    • FROM scrach 表示空白镜像
  • LABEL 元数据,基础信息
  • ENV key value
  • ARG 可被env覆盖的变量
  • WORKDIR 工作目录,baseURL
  • RUN 给镜像构建时候创建新层,执行命令。要及时合并RUN
  • ADD 支持远程,压缩包自动解压
  • COPY 复制文件,推荐
  • VOLUME 挂载
  • EXPOSE 对外暴露的端口
  • CMD 容器启动默认运行的命令。只有最后一个生效
  • ENTRYPOINT 容器初始化,一般外置脚本文件
  • healthcheck 健康检查

构建 #

docker build -t myApp:1 . #最后有个点,用来指定构建过程的上下文环境的目录。

RUN CMD ENTRYPOINT 区别:

  • RUN 构建镜像执行。CMD ENTRYPOINT 容器启动执行
  • CMD 容器启动默认运行的命令。
  • ENTRYPOINT 优先级比 CMD 高。容器初始化。把脚本文件外置引入。

优化 #

  • 务必创建 .dockerignore 文件。
  • 容器只运行一个应用,多容器使用 compose
  • 以为run分层,RUN及时合并
  • 指定images标签,保持一致
  • RUN之后删除无关文件。比如 apt-get update 之后,删除 /var/lib/apt/lists/目录。
  • 镜像尽量使用 alipine
  • 合理调整copy和run顺序

不要每次都安装npm。 先 COPY package.json /app。 在 RUN npm installCOPY . /app

run时候 RUN npm config set registry xxx && npm i

docker-compose #

通过 docker compose 统一调度,同时管理多个容器。

docker-compose up -d
docker-compose down
docker-compose logs nginx

格式 #

version: '3'
networks:
    frontend:
    backend:

services:
    redis:
        images: a
        networks:
            - backend
        volumes:
            - a:b
        command: []
        ports: