??本文主要针对M2下,相应进行开发环境搭建,然后做一个文档记录,希望对相关人有帮助。如果只想要Docker-Compose文件,请转到第四节。
??由于docker是海外,所以需要翻墙,为了下载镜像OK,所以在M2 Docker中设置代理,否则,Docker登录会异常。Docker Destop的安装教程这里则不重复累赘,在官网比较容易。
为了使得代理生效,由于Docker Destop使用CLI的方式的Docker生效,需要将代理软件设置全局代理。每个代理软件设置的方式不同。最后需要在Command输入如下命令使得生效。
export all_proxy=http://127.0.0.1:8001
如果想取消,则输入下面命令,
unset all_proxy
每个人的代理软件不同,所以代理地址也会不一样,所以需要看好自己的代理地址,目前举例子的情况下,我以自己的代理软件的代理地址为例,代理地址设置的是8001。
点击 MYSQL官方镜像说明,注意如何Docker命令的官方信息。
官方地址需要VPN才能访问
本节是针对文档的一些关键性提取,官方文档主要是介绍如何Docker CLI的方式启动Mysql。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
通过mysql的命令行客户端连接mysql
docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
这里的some-nework,我觉得在上一个命令没有指定的情况下,是容器启动对外暴露的localhost:随机端口,这个在docker destop中一般会展示随机接口是什么,只是我没有试过这个命令。我认为构建docker-compose指定暴露宿主机的同样端口比较好,否则暴露是随机端口,不会进行连接。
官方介绍了简易版的docker-compose,但是没有一些自定义设置,比如字符集设置之类,本文第三大部分则是以这个为基础,研究了一下docker-compose语法,然后写了一个docker-compose,具体步骤请看后文第四章。
# Use root/example as user/password credentials
version: '3.1'
services:
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
然后运行
docker stack deploy -c stack.yml mysql
或者
docker-compose -f stack.yml up
等待初始化完成访问 http://swarm-ip:8080
, http://localhost:8080,
或者 http://host-ip:8080
访问页面的adminer。
adminer是页面管理mysql的一种工具
当容器起来后,如何登录mysql内部?
docker exec -it some-mysql bash
some-mysql就是你起的容器id名字。
如果想知道自己启动的容器名,则用
docker ps
然后看列表输出,后面会介绍。
MySQL的默认配置可以在/etc/mysql/my.cnf
中找到,可以通过外部指定容器配置目录的方式,把自定义的/my/custom/config-file.cnf
的配置文件作为docker启动mysql容器时的默认设置。
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
多配置选项可以作为标志传递给mysqld,然后能够自定义容器,而无需cnf文件。例如,如果想要更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),只需运行以下命令:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
如何想知道其他自定义配置项:
docker run -it --rm mysql:tag --verbose --help
注意,这里是提前下载好了docker的image
如果没有改命令的方式,下载mysql的5.7x版本,会爆 “no matching manifest for linux/arm64/v8 in the manifest list entries”
,实际上mac兼容amd64架构,所以下载镜像,指定platform。
docker pull --platform linux/amd64 mysql:5.7.42
然后在自己的机器随意找一个目录,做宿主机和Docker的文件关联,例如,我在docker-dev目录下,创建mysql,以及相关的目录和文件。
mkdir /Users/tanqiwei/docker-dev/mysql
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/conf
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/data
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/logs
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/mysql-files
然后进入/Users/tanqiwei/docker-dev/mysql/env-volumn/conf
,创建my.cnf
,内容如下所示:
[client]
default_character_set=utf8
[mysqld]
default_character_set=utf8
最后在/Users/tanqiwei/docker-dev/mysql
下编辑docker-compose.yml
文件。
# Use root/example as user/password credentials
version: '3.1'
services:
mysql-dev:
image: mysql:5.7.42
# 针对M1/M2的毛病
platform: linux/amd64
# 当docker启动时,该容器也重新启动
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
# 将宿主机的my.cnf文件映射到Docker容器中
- /Users/tanqiwei/docker-dev/mysql/env-volumn/conf:/etc/mysql/conf.d
# 将容器的/var/lib/mysql目录挂载到宿主机的/Users/tanqiwei/docker-dev/mysql/env-volumn/data目录
- app_db:/var/lib/mysql
# 将容器的/var/log/mysql目录挂载到宿主机的/Users/tanqiwei/docker-dev/mysql/env-volumn/logs目录
- /Users/tanqiwei/docker-dev/mysql/env-volumn/logs:/var/log/mysql
- /Users/tanqiwei/docker-dev/mysql/env-volumn/mysql-files:/var/lib/mysql-files
adminer:
image: adminer
restart: always
ports:
- 8101:8080
environment:
ADMINER_DEFAULT_SERVER: mysql-dev
depends_on:
- mysql-dev
volumes:
app_db:
driver: local
driver_opts:
type: none
o: bind
device: /Users/tanqiwei/docker-dev/mysql/env-volumn/data
networks:
nt_mysql-dev:
driver: bridge
最后使用Docker Compose命令启动
接下来进入mysql中命令,先输入docker ps得到运行列表(从log也可以看出mysql启动实例名字)。
tanqiwei@tanqiweideMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
faf7e3cd831c adminer "entrypoint.sh php -…" About an hour ago Up About an hour 0.0.0.0:8101->8080/tcp mysql-adminer-1
27cd34e2146c mysql:5.7.42 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-mysql-dev-1
429226c9d199 mariadb:10.6.4-focal "docker-entrypoint.s…" 25 hours ago Up 3 hours 3306/tcp, 33060/tcp mysql-test-db-1
这里可以看出来是mysql-mysql-dev-1
,然后执行下面命令
docker exec -it mysql-mysql-dev-1 bash
接着创建数据库test,命令简单不展示了。
然后打开浏览器,http://localhost:8101.
这里是由于我登录过,所以左侧保留有信息
于是mysql的开发环境就搭建好了。
如果想关闭,则新建terminal,在/Users/tanqiwei/docker-dev/mysql
的目录下,即原来docker-compose.yml文件所在的目录,执行如下命令关闭即可:
docker compose stop
这篇文章主要是我安装mysql的一些笔记,希望对其他人有帮助