Docker创建MySQL5.7
- 下载镜像
$ docker pull mysql:5.7.23
- 对mysql数据进行挂载
mkdir /opt/mysql
mkdir /opt/mysql/conf
mkdir /opt/mysql/data
创建并修改my.cnf配置文件
vim /opt/mysql/conf/my.cnf
my.cnf添加如下内容:
[mysqld]
user=mysql
lower_case_table_names=1
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
- 创建容器并启动
启动命令:
$ docker run -d -p 3306:3306 --privileged=true --name mysql-5.7.23 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.23
------------------------------------------------------------------------------
参数说明:
--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-v /opt/mysql/conf/my.cnf:/etc/mysql/my.cnf:映射配置文件
-v /opt/mysql/data:/var/lib/mysql:映射数据目录
- 启动报错信息以及解决
Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "write parent: broken pipe"
原因:
linux与docker版本的兼容性问题
使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
- 配置mysql挂载问题
- 5.1. 为啥要映射配置文件?
容器内改变配置文件,重启后,会还原,他只是一个容器,你不能改变容器内的东西。所以需要映射进去。
- 5.2. 为啥要把 数据库的文件 映射到 服务器上?
一样的原因,重启会还原。所以要把保存的数据放到 不还原的地方。
Docker常用命令
镜像操作
$ docker search 关键字
eg: docker search redis
我们经常去docker hub上检索镜像的详细信息,如镜像的TAG
$ docker pull 镜像名:tag
eg: docker pull mysql:5.7.23
:tag是可选的,tag表示标签,多为软件的版本,默认是latest
$ docker images
查看所有本地镜像
docker rmi image-id
删除指定的本地镜像
容器操作
- 搜索镜像
$ docker search tomcat
- 拉取镜像
$ docker pull tomcat
- 根据镜像启动容器
$ docker run ‐‐name mytomcat ‐d tomcat:latest
- 查看运行中的容器
$ docker ps
- 停止运行中的容器
$ docker stop 容器的id
- 查看所有的容器
$ docker ps ‐a
- 启动容器
$ docker start 容器id
- 删除一个容器
$ docker rm 容器id
- 启动一个做了端口映射的tomcat
$ docker run ‐d ‐p 8888:8080 tomcat
‐d:后台运行
‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
- 为了演示简单关闭了linux的防火墙
$ service firewalld status ;查看防火墙状态
$ service firewalld stop:关闭防火墙
- 查看容器的日志
$ docker logs container‐name/container‐id
docker更多命令