自己编译docker镜像

文章讲述了如何基于mariadb的最新官方镜像创建自定义Docker镜像,包括修改容器编码格式为UTF-8,安装额外软件,以及配置pip源。然后,使用这个新镜像启动一个容器,创建了一个名为test01的utf8mb4编码的数据库,并在其中创建了student表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候官方现在的docker镜像并不能很好地符合自己的需求,我们需要自己定制。以下我主要是在官方mariadb:latest镜像的基础上,做一些定制化的操作如修改容器的编码格式。

/root/.pip目录下有两个文件:
在这里插入图片描述
Dockerfile的文件内容如下:

FROM mariadb:latest

RUN mkdir /root/.pip > /dev/null 2>&1

WORKDIR /root/.pip/

# copy ./pip.conf from host to docker container
COPY pip.conf ./

# replace your_name with your_name, your_email with your email
MAINTAINER your_name your_email

# update install resource
RUN apt-get update

# clean cache
RUN apt-get autoclean

# install python3-pip
RUN apt install vim python3-pip -y

# install python lib
RUN pip3 install sqlacodegen pymysql

# set container's coding format
ENV LANG C.UTF-8

CMD ["mysqld_safe"]

pip.conf文件内容如下:

[global]
trusted-host = mirrors.aliyun.com
index-url = https://mirrors.aliyun.com/pypi/simple

编译docker镜像

docker build /root/.pip/ -t my_mariadb:v1

编译完成
在这里插入图片描述
编译成功的docker镜像

docker image ls

在这里插入图片描述
利用刚刚编译的my_mariadb:v1镜像创建容器

docker run --name mariadb_02 -p 3307:3306 \
  -v /opt/docker/mariadb_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root@123 \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD=admin@123 \
  -e MYSQL_ROOT_HOST=% \
  -d my_mariadb:v1 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

查看生成的容器mariadb_02 :

docker ps -a

在这里插入图片描述
进入mariadb_02 容器内并查看容器编码格式:

docker exec -it mariadb_02 bash
locale

在这里插入图片描述
登录进mariadb数据库引擎内并创建test01数据库:

mysql -uroot -p
create database test01 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

指定使用test01数据库,并在其中创建几张数据表:

use test01;
create table student(
id int primary key auto_increment comment '主键',
name varchar(50) comment '学生中文姓名',
e_name varchar(50) comment '学生英文姓名',
dep_id int comment '院系id',
account_address varchar(200) comment '户口地(住)址',
home_address varchar(200) comment '家庭住址',
now_address varchar(200) comment '当前住址',
telephoneNum varchar(20) comment '手机号码',
wechartNum varchar(50) comment '微信号码',
qqNum varchar(20) comment 'QQ号码'
) comment = '学生信息表' charset utf8;

查看创建student数据表时的语句:

show create table student;

在这里插入图片描述
可以看到,已经能在容器内正常输入与显示中文了

### 如何编译构建Docker镜像 #### 准备工作 为了能够顺利地编译和构建Docker镜像,需先安装并配置好Docker引擎。对于Ubuntu操作系统而言,官方文档提供了详细的指南来完成这一过程[^1]。 #### 编写Dockerfile 创建一个名为`Dockerfile`的文本文件,该文件定义了用于组装应用所需的所有组件以及其依赖关系。此文件通常位于项目根目录下,并遵循特定语法结构以指导Docker如何分层构建最终映像。 ```dockerfile # 使用官方Golang基础镜像作为父镜像 FROM golang:latest # 设置工作目录 WORKDIR /app # 将当前项目的源码复制到容器内的/app路径下 COPY . . # 安装必要的包/工具(如果有的话) RUN go mod download && \ CGO_ENABLED=0 GOOS=linux go build -o main . # 暴露应用程序监听端口 EXPOSE 8080 # 启动命令,默认执行程序入口 CMD ["./main"] ``` 上述示例展示了针对Go语言编写的应用程序所使用的典型Dockerfile模板[^4]。 #### 执行构建操作 当准备好所需的资源后,可以通过命令行界面输入如下指令启动实际的构建流程: ```bash $ docker build -t my-app-image . ``` 这里 `-t` 参数指定了新生成镜像的名字;而 `.` 表明将以当前位置下的上下文为基础来进行处理——即包含了之前提到过的 Dockerfile 文件及其关联的内容。 一旦构建顺利完成,则可以在本地仓库中找到名称为 `my-app-image` 的全新自定义镜像实例[^2]。 #### 运行测试 利用刚刚建立好的镜像可以轻松部署新的容器化服务: ```bash $ docker run -p host_port:container_port --name=my-running-app my-app-image ``` 通过指定主机与容器之间的端口映射关系以及其他选项参数,即可让这个基于Spring Boot 或其他框架开发出来的Web 应用对外提供HTTP访问支持[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值