docker mysql报错:standard_init_linux.go:228: exec user process caused: exec format error

问题描述:
docker mysql镜像(基础镜像mysql:5.7.31),在windows系统可以正常构建并运行,迁移至麒麟操作系统时,构建时报错:

standard_init_linux.go:228: exec user process caused: exec format error

dockerfile内容:

# 基础镜像
FROM mysql:5.7.31
# author
MAINTAINER whw

# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/

问题分析:
1、查看Windows主机架构(docker version命令):

docker-version-win.pngdocker-version-win.png

docker容器自定义jdk镜像

前言

有官方的jdk镜像,为什么还要自定义jdk镜像?
当我们在官方镜像中找不到我们所需要的版本时,就可以单独下载指定版本的安装包,然后根据安装包自定义jdk镜像。

本文以jdk1.8.0_181为例,详细讲述自定义jdk镜像的步骤。

docker和docker-compose版本说明:

C:\Users\whwtr>docker -v
Docker version 20.10.17, build 100c701

C:\Users\whwtr>docker-compose -v
docker-compose version 1.29.2, build 5becea4c

C:\Users\whwtr>

说明:如果是Windows或macOS系统直接安装docker-desktop即可。

Docker Compose介绍及使用

Docker Compose介绍

Docker Compose是单机多容器部署工具,通过YML文件定义多容器如何部署,使用一个命令就可以从YML配置中创建并启动所有服务,方便多依赖的应用程序快速发布和部署。

Docker Compose安装

WIN/MAC版本默认自带,Linux版本需单独安装。

Linux上安装Docker Compose

下载Docker Compose:
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

添加可执行权限:
$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:
$ docker-compose version
cker-compose version 1.24.1, build 4667896b

Docker容器间数据共享

Docker容器间为什么要进行数据共享?

在集群环境下,每次服务发布时,都需要更新所有容器中的项目文件,在大规模的集群下这个工作量会被无限放大。
所以,这个时候就需要用到数据共享来解决这个问题。即多个容器共享同一个数据副本。

数据共享原理:
在宿主机的硬盘上开辟一个空间, 用来存放共享的数据,多个容器共享这个目录。
同Linux或Windows挂载共享目录类似。

数据共享的方案

(1)通过设置-v挂载宿主机目录

格式:
docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名

Dockerfile构建镜像

Dockerfile镜像描述文件

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Docker通过读取Dockerfile中的命令自动生成镜像。

构建镜像命令:
docker build -t 机构/镜像名<:tags> Dockerfile目录

构建示例一:第一个Dockerfile

镜像描述:基于tomcat镜像,将docker-web发布至webapps目录下。

根据Dockerfile构建镜像