构建MySQL镜像
📌 构建MySQL镜像
🚁 准备工作
FROM mysql
ENV MYSQL_ROOT_PASSWORD=123456
ENV LANG=C.UTF-8
COPY my.cnf /etc/mysql/my.cnf
COPY init.sql /docker-entrypoint-initdb.d/
# 持久化数据卷,-v未指定时,docker会自动创建匿名卷
VOLUME /var/lib/mysql
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com');
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=100
🚁 构建镜像
准备好以上文件后,在Windows PowerShell中执行build指令,构建MySQL镜像。
# -f:指定Dockerfile文件路径
docker build -t my-mysql .
🚁 运行容器并检查状态
首次运行容器会进行初始化,记得关注日志。
# -d:守护态运行容器,实现容器的持久化运行,即使终端关闭或主机重启,容器仍然会自动启动并继续提供服务。
# -v:直接输入windows的路径会报错,${pwd}代表当前目录(要求空目录),即把容器的`/var/lib/mysql`挂载到宿主机的当前目录下
# 或者使用数据卷进行挂载,即-v {volume_name}:/var/lib/mysql
docker run -d -p 53306:3306 --name my-mysql -v ${pwd}:/var/lib/mysql my-mysql
🚁 其他指令补充
命令 | 说明 |
---|---|
docker ps |
查看容器运行状态,找到对应的容器ID |
docker exec -it {container_id} sh |
进入容器 |
docker start {container_id} |
启动容器 |
docker stop {container_id} |
停用容器 |
docker restart {container_id} |
重启容器 |
docker logs -f --tail=200 {container_id} |
日志尾部200行并持续刷新 |
docker volume create {volume_name} |
创建数据卷 |
docker tag {image:version} {alias:ver} |
给镜像起别名,实际是复制一份 |
🚁 连接数据库
mysql -p mydb
当容器正常运行,在容器内输入命令连数据库
📌 镜像复用
- 导出为tar文件,手动上传至服务器
- 或者推送镜像到镜像仓库
- 使用
docker commit
命令保存为新的镜像
参考资料: Docker commit命令
🚁 导出镜像
# 导出镜像为 tar 文件
docker save -o my-mysql.tar my-mysql
# 在其他机器上导入镜像,然后运行容器即可
docker load -i my-mysql.tar
🚁 推送镜像
先建好阿里云容器镜像服务-个人实例,并配置命名空间。
# 登录阿里云容器镜像仓库
docker login -u {username} -p {password} registry.cn-hangzhou.aliyuncs.com
# 标记镜像
docker tag my-mysql registry.cn-hangzhou.aliyuncs.com/{namespace}/my-mysql
# 推送镜像,不包含运行时产生的数据
docker push registry.cn-hangzhou.aliyuncs.com/{namespace}/my-mysql
🚁 拉取镜像
# 拉取镜像,然后运行容器即可
docker pull registry.cn-hangzhou.aliyuncs.com/{namespace}/my-mysql:latest
docker tag registry.cn-hangzhou.aliyuncs.com/{namespace}/my-mysql:latest whm_mysql:20240817