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

运行

1
2
3
4
5
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 健康检查

构建

1
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 install
COPY . /app

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

docker-compose

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

1
2
3
docker-compose up -d
docker-compose down
docker-compose logs nginx

格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'
networks:
frontend:
backend:

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

扫一扫,分享到微信

请我喝杯咖啡吧~