Docker

容器工具,用来作资源隔离,如进程空间隔离、文件系统隔离、网络隔离等。

文章目录

    • [1. docker-compose 常用写法](#1. docker-compose 常用写法)
    • [2. 常用镜像下载](#2. 常用镜像下载)
    • [3. docker镜像相关命令](#3. docker镜像相关命令)
    • [4. entrypoint与cmd](#4. entrypoint与cmd)
    • [5. docker容器中报错insufficient memory for the Java Runtime Environment](#5. docker容器中报错insufficient memory for the Java Runtime Environment)

1. docker-compose 常用写法

yaml 复制代码
# docker-compose.yml
version: "3.9"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80" # 宿主机8080端口映射到容器中的80端口
    volumes:
      - ./html:/usr/share/nginx/html # 宿主机./html挂载到容器中的/usr/share/nginx/html目录

2. 常用镜像下载

国内镜像源: https://docker.aityp.com/

bash 复制代码
# jdk8
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8-jdk-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8-jdk-linuxarm64  docker.io/eclipse-temurin:8-jdk

# nginx1.27.3
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest-linuxarm64  docker.io/nginx:latest

#postgresql7.5-1.pgdg120+1
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:latest-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:latest-linuxarm64  docker.io/postgres:latest

3. docker镜像相关命令

bash 复制代码
# 镜像列表
docker images

# 镜像详情
docker inspect <imgid>

4. entrypoint与cmd

在Dockerfile和docker-compose中可以指定entrypoint和cmd,docker-compose会覆盖Dockerfile中的配置。

entrypoint是容器的启动命令,cmd会作为参数追加到entrypoint后面。

entrypoint有两种形式的写法:

  1. ENTRYPOINT ["java", "-jar", "/app.jar"]

    容器启动是直接执行java -jar /app.jar,java进程是容器的1号进程,可以接受发给容器的信号,容器退出时的退出码也是java进程的退出码,但是无法展开环境变量。CMD的内容会拼接在后面作为java的参数。

  2. ENTRYPOINT java -jar /app.jar

    容器启动时实际执行的是sh -c 'java -jar /app.jar',sh进程是1号进程,java是sh的子进程,无法收到发给容器的信号,容器退出时的退出码是sh的退出码,但是可以展开环境变量。CMD的内容会拼接在sh -c 'java -jar /app.jar'的后面,不能成为java程序的参数 ,根据sh -c的解释,其会作为1 2等变量传给java进程。另外需要注意sh无法解析带-的环境变量,因此在docker-compose中配置的带-的环境变量无法传递给java进程。

为了解决数组形式的entrypoint无法展开环境变量:

在Dockerfile中:

COPY ./entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT "/entrypoint.sh"

entrypoint.sh如下:

bash 复制代码
#!/bin/bash

# exec会使用java进程替换掉当前bash进程,而不是作为子进程运行
env # 打印环境变量
exec java ${JAVA_OPT} -jar /app.jar

5. docker容器中报错insufficient memory for the Java Runtime Environment

yaml 复制代码
# 开启特权级能解决
privileged: true
相关推荐
sulikey8 小时前
服务器安装Docker教程。如何在云服务器安装Docker容器?
运维·服务器·ubuntu·docker·安装教程·云服务器
窝子面10 小时前
认识Docker与启动容器与镜像的关系
运维·docker·容器
张忠琳1 天前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
Elastic 中国社区官方博客1 天前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
风曦Kisaki1 天前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着20131 天前
docker 安装 ,在centos7.9
运维·docker·容器
骑上单车去旅行1 天前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka
前端Baymax1 天前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes
spider_xcxc1 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
java_logo1 天前
Docker Compose 部署 Apache Superset:轻松搭建开源 BI 平台
docker·开源·apache·superset·轩辕镜像·superset部署方案·docker superset