docker 容器化时的几个小技巧

1 使用make文件:make file可以简化平时打的命令,并且可以将命令托管到github,改动也比较容易表现

PORT = 8081
IMAGE=127.0.0.1:5000/base-image
TAG=latest
NAME=my-project-$(PORT)

prepare:
    wget http://am1.php.net/distributions/php-7.2.12.tar.gz -P install/
    wget https://nginx.org/download/nginx-1.14.0.tar.gz -P install/

docker-context:

build: docker-context
    docker build -t $(IMAGE):$(TAG) .

build72: docker-context
        docker build -t $(IMAGE):php72 -f Dockerfile72 .

run:
    docker run -d -p $(PORT):80 -v $(shell pwd)/html:/tool/nginx-1.14.0/html --name $(NAME) $(IMAGE):$(TAG)

debug:
    docker run -ti -p $(PORT):80 -v $(shell pwd)/html:/tool/nginx-1.14.0/html --name $(NAME) $(IMAGE):$(TAG) /bin/bash

clean:
    docker stop ${NAME}
    docker rm ${NAME}

logs:
    docker logs ${NAME}

publish:
    docker push ${IMAGE}

prod-pre:
    git clone https://github/xxxxx.git html
    cp env/prod.env html/.env
prod-up:
    docker-compose -f docker-compose-prod.yml up -d
    docker exec my-project-80 /tool/nginx-1.14.0/html/init-prod.sh
prod-start:
    docker-compose -f docker-compose-prod.yml start 
    docker exec my-project-80 /tool/nginx-1.14.0/html/start-prod.sh
prod-stop:
    docker-compose -f docker-compose-prod.yml stop 
prod-rebuild:
    docker exec my-project-80 /tool/nginx-1.14.0/html/start-prod.sh
prod-down:
    docker-compose -f docker-compose-prod.yml down

2 调试

docker run -d -p 8081:80 -v .:/tool/nginx-1.14.0/html   --privileged=true --restart=always --name test 127.0.0.1:5000/my-project:latest

# Debug
docker run -it -p 8081:80 -v .:/tool/nginx-1.14.0/html   --privileged=true  --name test 127.0.0.1:5000/my-project:latest /bin/bash

docker run 命令使用 -it 可以直接进入容器,进行调试之类的很方便
同样,如果容器在运行中,可以使用docker exec 容器名 /bin/bash

  1. 减少镜像大小的方法

    1. 使用适量的基础镜像:选择一个合适的基础镜像作为起点,可以根据应用程序的需求选择官方提供的轻量级镜像,如Alpine Linux。这样可以避免使用庞大的基础镜像,减少镜像的体积。

    2. 最小化安装软件包:在容器中只安装必要的软件包和依赖项,避免不需要的组件。可以通过在Dockerfile中使用尽量精确的软件包安装命令,避免使用通配符,以减少镜像的大小。

    3. 使用多阶段构建(Multi-stage builds):如果应用程序有编译阶段和运行阶段,可以使用多阶段构建来减少镜像的大小。在构建阶段中安装编译工具和依赖项,完成编译后,将构建好的二进制文件复制到最终的运行阶段。这样可以避免将编译工具和源代码包含在最终的镜像中,减小镜像的体积。

      # Stage 1: 编译阶段
      FROM golang:1.16-alpine AS builder
      WORKDIR /app
      
      # 将源代码复制到容器中
      COPY . .
      
      # 执行编译命令
      RUN go build -o myapp
      
      # Stage 2: 运行阶段
      FROM alpine:latest
      WORKDIR /app
      
      # 从编译阶段复制编译好的二进制文件到最终镜像中
      COPY --from=builder /app/myapp .
      
      # 指定容器启动时执行的命令
      CMD ["./myapp"]
    4. 合并多个命令:在 Dockerfile 中,可以将多个命令合并为一个 RUN 命令,这样可以避免创建多个镜像层,减少镜像的层数,从而减小镜像的大小。

      RUN yum -y update \
      && yum install -y wget gcc make \
      && yum install -y openssl-devel \
      && yum install -y zlib-devel pcre-devel \
      && yum -y install libxml2-devel curl-devel libjpeg-devel libpng-devel freetype-devel freetype \
      && yum install -y epel-release \
      && yum install -y supervisor \
      && curl --silent --location https://rpm.nodesource.com/setup_8.x | bash - \
      && yum install -y nodejs \
      && yum install -y gmp-devel \
      && yum install -y git \
      && yum install -y sqlite \
      && yum install -y sqlite-devel \
      && yum install -y oniguruma \
      && yum install -y oniguruma-devel \
      && mkdir -p /tool \
      && mkdir -p /install \
      && yum install -y crontabs
    5. 删除不需要的文件和缓存:在镜像构建过程中,确保在使用完文件后将其删除,避免不必要的文件留在镜像中。另外,可以使用 apt-getyum 命令后跟 cleanautoclean 来清理软件包管理器的缓存文件,减小镜像的大小。

    6. 使用压缩和归档:在复制文件到镜像中时,可以将文件压缩为 tar 归档格式,然后在容器中解压缩。这样可以减小镜像的体积,并提高文件复制的效率。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!