把代码和环境做成docker镜像_制作一个docker镜像:mysql-8-x64-linux

因为个人学习需要,为软件系统的虚拟容器化,以下将mysql制作为docker镜像,并记录下详细步骤。

欢迎大家学习交流和转载,同时写作不易,如果各位觉得不错,请点赞支持。

备注:以下代码和文章,欢迎复制和转载,请在开头备注清楚“原始网址和作者”,谢谢

一、实验环境

1.本地电脑:

windows 10  x64 / git version 2.21.0.windows.1

2. 本地docker 构建环境:

CentOS 7.4 x64 / Docker Engine - Community 18.09.6 x64

3. 阿里云构建环境:

代码库:https://code.aliyun.com/03_docker_base/mysql-single

镜像库:https://cr.console.aliyun.com/repository/cn-hangzhou/kevin_docker_registry/docker_base_mysql-single/details

二、编写代码

本地编写dockerfile代码,目录层次如下

1. 目录层次,

----|----/03_docker_base/mysql-single/

|----soft/   # 放COPY命令,需要复制的小文件,大文件建议通过-v和VOLUMN方式挂载共享卷方式获得。

|----mysql.conf   # mysql的配置参数文件

|----mysql.sh      # mysql的启动脚本文件

|----mysql-single-centos.Dockerfile   # docker镜像的源代码

|----mysql-single.sh  # 个人笔记,记录一下当时操作的命令和步骤

和共享卷的资源目录,如下

----|----/nfs_data/dockerfile/mysql-single/soft/

|----mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar

2. 代码介绍,如下:

提醒:

最初制作mysql镜像的时候,由于是挂载共享卷,所以共享卷的文件只能被CMD或ENTRYPOINT命令访问,RUN是构建时刻,所以访问不了volumn共享卷的文件。

创建的dockerfile/mysql.sh/mysql.conf 等文件,一定要在linux下面创建和编辑,防止产生特殊字符和非法编码。编码都默认使用UTF-8 BOM。

执行测试,可以使用命令 -v host_path:docker_path 进行挂载共享卷,并且dockerfile文件中也要对应写VOLUMN ["docker_path"]

FROMcentos:centos7MAINTAINER tian.dong RUN# yum update -y -q && yum -y -q install libaio -y && yum -y -q install numactl -y && yum clean all

# step1: set enviromentENVDOCKER_DATA /nfs_dataENV DOCKER_PASS pass

ENVMYSQL_BASEDIR /opt/install/mysqlENVMYSQL_DATADIR /opt/data/mysqlENVMYSQL_LOGDIR /opt/log/mysqlENVMYSQL_CONF /opt/install/mysql/confENV SOFT_MYSQL /nfs_data/dockerfile/mysql-single/soft/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar.gzRUNecho‘‘>> /etc/profile && echo‘PATH=$PATH:$MYSQL_BASEDIR/bin:$MYSQL_BASEDIR/lib‘>> /etc/profile

#VOLUMEdocker 方式需要写;K8S 方式不需要写,可通过PV/PVC实现VOLUME ["$DOCKER_DATA"]

# step2: make directoryRUNmkdir -p ${MYSQL_CONF} && groupadd mysql && useradd -g mysql mysql && echo ${DOCKER_PASS} | passwd --stdin mysql

#USERmysql:mysqlCOPYsoft/mysql.conf ${MYSQL_CONF}/COPYsoft/mysql.sh /usr/local/bin/

#COPY soft/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar.gz /opt/install/

#RUN wget -O /opt/install/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar.gz -c # https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar.gz

#COPY soft/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64.tar.gz /opt/install/

# 使用RUN,不用CMD的原因,执行顺序RUN (build) < CMD (starting) < ENTRYPOINT(started)

# 并且,在RUN命令中,所有VOLUMN或docker -v path:path的外部挂载点,都是处于尚未就绪的状态;只有ENTRYPOINT时刻,才会挂载外部存储介质完毕。RUNchmod +x /usr/local/bin/mysql.sh && chmod -R777${DOCKER_DATA} && mkdir -p ${MYSQL_BASEDIR} && mkdir -p ${MYSQL_DATADIR} && mkdir -p ${MYSQL_LOGDIR} && mkdir -p ${MYSQL_CONF} && mkdir -p ${MYSQL_LOGDIR}/{error,pid,bin,relayidx,relaylog,slow}/ && touch ${MYSQL_LOGDIR}/error/error.log && # tar -zxf ${SOFT_MYSQL} -C ${MYSQL_BASEDIR} && # mv ${MYSQL_BASEDIR}/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64/*${MYSQL_BASEDIR}/ && touch ${MYSQL_LOGDIR}/pid/pid.log && touch ${MYSQL_LOGDIR}/bin/bin.log && touch ${MYSQL_LOGDIR}/relaylog/relay.log && touch ${MYSQL_LOGDIR}/relayidx/relay.index && touch ${MYSQL_LOGDIR}/slow/slow.log && chmod -R 744 ${MYSQL_BASEDIR} && chmod -R 744 ${MYSQL_DATADIR} && chmod -R 744 ${MYSQL_LOGDIR} && chmod -R 644 ${MYSQL_CONF}/mysql.conf && chmod -R 644 ${MYSQL_LOGDIR}/error/error.log && chmod -R 644 ${MYSQL_LOGDIR}/pid/pid.log && chown -R mysql:mysql ${MYSQL_BASEDIR} && chown -R mysql:mysql ${MYSQL_DATADIR} && chown -R mysql:mysql ${MYSQL_LOGDIR} && chown -R mysql:mysql ${MYSQL_CONF}/mysql.conf && chown -R mysql:mysql ${MYSQL_LOGDIR}/error/error.log && chown -R mysql:mysql ${MYSQL_LOGDIR}/pid/pid.log && chown -R mysql:mysql ${MYSQL_LOGDIR}/relaylog/relay.log && chown -R mysql:mysql ${MYSQL_LOGDIR}/relayidx/relay.index && chown -R mysql:mysql ${MYSQL_LOGDIR}/slow/slow.log && # RUN su mysql && rm -rf ${SOFT_MYSQL} && rm -rf ${MYSQL_BASEDIR}/mysql-cluster-8.0.18-rc-linux-glibc2.12-x86_64

# open port

EXPOSE 13306 33060

# step 3: install mysql

# start application

ENTRYPOINT ["/usr/local/bin/mysql.sh"]

三、本地测试

操作环境:本地VM=CentOS 7.4 x64,并且安装有docker软件

1. 构建镜像,

# 首先把本地写好的dockerfile所有文件,复制到下面的linux目录。注意文件要按照linux的编码UTF-8 BOM。

root >> cd /nfs_data/dockerfile/mysql-single

root >> docker build  -f ./mysql-single.Dockerfile .  -t registry.cn-hangzhou.aliyuncs.com/kevin_docker_registry/docker_base_mysql-single:1.0.0

root >> docker images # 查看镜像

2. 测试镜像

root >> docker run -it -v /nfs_data:/nfs_data  registry.cn-hangzhou.aliyuncs.com/kevin_docker_registry/docker_base_mysql-single:1.0.0 /bin/bash

# 就是mysql数据库的初始管理员账号和密码,用户可以使用如下命令,在本机登陆mysql数据库之后修改mysql的root账号密码

# 本机登陆mysql控制台

root >> mysql -u root -p

# 然后输入默认的root密码,注意不是VM机器的密码。

# 修改账号密码(方式1:命令行 链接密码)

mysql >> alter user [email protected] IDENTIFIED BY ‘pass‘;

mysql >> alter user [email protected]%‘ IDENTIFIED BY ‘pass‘;

# 修改账号密码(方式2:Nactive工具 链接密码)

mysql >> alter user [email protected] IDENTIFIED WITH mysql_native_password BY ‘pass‘;

mysql >> alter user [email protected]%‘ IDENTIFIED WITH mysql_native_password BY ‘pass‘;

# 创建新账号

mysql >> create user [email protected]%‘ identified by ‘pass‘;

四、发布镜像

1. 如果想把docker镜像发布到互联网,可以参考我之前的一篇文章,有详细介绍阿里的git代码库和docker镜像库的创建和使用。

https://www.cnblogs.com/itshare/p/11067054.html

2. 另外,如果只是每次从本地手动发布,只需要登陆链接aliyun的docker仓库地,使用如下命令,即可:

# 查询本地镜像

root >> docker images | grep mysql

# 登录远程镜像仓库

root >> docker login [email protected] [email protected]se_mysql-single

# 上传镜像,到远程镜像仓库

# 格式 = docker pull {镜像的仓库}:{镜像的版本}

root >> docker pull registry.cn-hangzhou.aliyuncs.com/kevin_docker_registry/docker_base_mysql-single:1.0.0

3. 查看阿里云的上传后的镜像,地址如下

# 镜像版本和状态

# 构建历史和结果

原文:https://www.cnblogs.com/itshare/p/12350287.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值