在docker容器中安装Mysql
在docker容器中安装Mysql,与直接在centos中安装是没有任何区别的,可以参考这篇文章下载必要的安装包,并进行安装
https://blog.csdn.net/hl_java/article/details/82852627
在docker容器中启动Mysql
使用这篇文章(https://blog.csdn.net/hl_java/article/details/82852627)的启动方式启动时报错,错误内容如下,原因暂时未知(以后再找到了再和大家同步)
/etc/init.d/mysqld start
/etc/init.d/mysqld: line 13: /etc/rc.d/init.d/functions: No such file or directory
所以我接下来随后换了一种方式进行启动Mysql
初始化
mysqld --initialize --user=mysql --datadir=/export/servers/mysql/data
启动(之前的/etc/init.d/mysqld start会隐式初始化)
mysqld_safe --user=mysql --datadir=/export/servers/mysql/data &
验证
# ps axu|grep mysql
root 548 0.0 0.1 11764 1656 ? S 13:12 0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --datadir=/export/servers/mysql/data
mysql 702 0.1 12.5 1124428 127752 ? Sl 13:12 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/export/servers/mysql/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root 739 0.0 0.0 9036 816 ? S+ 13:14 0:00 grep --color=auto mysql
#如果执行netstat时提示命令不存在可以先执行yum install net-tools
# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN -
ok,至此已经安装完成啦,接下来进行端口映射
以守护形式运行容器
我们执行完需要的操作退出容器时,不要使用exit退出,可以利用Ctrl+P Ctrl+Q
代替,以守护式形式退出容器。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc6aa8396dce 4224b90794d0 "/bin/bash" 38 minutes ago Up 38 minutes sick_pasteur
58f31f8936ed lzc:0.1 "/root/run.sh" 38 minutes ago Exited (0) 38 minutes ago lzchello2
bc2d0f08d2c7 4224b90794d0 "/bin/bash" 39 minutes ago Exited (0) 39 minutes ago serene_morse
7efe3f061007 88ec626ba223 "/bin/bash" 40 minutes ago Exited (0) 40 minutes ago boring_archimedes
可以看到上面的第1条,status是Up 38 minutes ,表明处于还在运行状态
附加到运行中的容器
退出正在运行的容器,想要再次进入,需要使用attach命令:docker attach name | id
[root@mylinux1 ~]# docker attach sick_pasteur
[root@dc6aa8396dce mysql]# ps axu|grep mysql
root 548 0.0 0.1 11764 1656 ? S 13:12 0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --datadir=/export/servers/mysql/data
mysql 702 0.0 12.5 1124428 127752 ? Sl 13:12 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/export/servers/mysql/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root 742 0.0 0.0 9036 816 ? S+ 13:20 0:00 grep --color=auto mysql
接下来我们以此容器来创建一个包含了mysql5.7镜像吧
制作mysql5.7镜像
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc6aa8396dce 4224b90794d0 "/bin/bash" 47 minutes ago Up 47 minutes sick_pasteur
58f31f8936ed lzc:0.1 "/root/run.sh" 48 minutes ago Exited (0) 48 minutes ago lzchello2
bc2d0f08d2c7 4224b90794d0 "/bin/bash" 48 minutes ago Exited (0) 48 minutes ago serene_morse
7efe3f061007 88ec626ba223 "/bin/bash" 49 minutes ago Exited (0) 49 minutes ago boring_archimedes
[root@mylinux1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
lzc 0.1 4224b90794d0 49 minutes ago 199.7 MB
nginx latest 7b2ec12a5042 3 months ago 109 MB
tomcat 8 fb269ccd26c4 3 months ago 462.5 MB
redis latest 40b1f67fd3d4 3 months ago 83.38 MB
hello-world latest 3535063d9957 3 months ago 1.848 kB
centos latest 88ec626ba223 5 months ago 199.7 MB
[root@mylinux1 ~]# docker commit dc6aa8396dce lzcmysql5.7:0.1
e9bb7d3653fee7b15a227f52c867b423f7b3f5b1a5aa710f2f8fdfa58f3f6e79
[root@mylinux1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
lzcmysql5.7 0.1 e9bb7d3653fe 48 seconds ago 1.378 GB
lzc 0.1 4224b90794d0 50 minutes ago 199.7 MB
nginx latest 7b2ec12a5042 3 months ago 109 MB
tomcat 8 fb269ccd26c4 3 months ago 462.5 MB
redis latest 40b1f67fd3d4 3 months ago 83.38 MB
hello-world latest 3535063d9957 3 months ago 1.848 kB
centos latest 88ec626ba223 5 months ago 199.7 MB
以自制的mysql5.7镜像进行启动容器
docker run -d -p 13306:3306 -v /export/:/export/ --name lzcmysql4 lzcmysql5.7:0.1 /bin/sh -c “while true;do echo hello docker;sleep 1;done;”
注意:
- 这里虽然进行了端口映射,但是这种方式创建的容器中的mysql是没有启动的,还需要进入容器将mysqlserver启动一下。
- 这里脚本/bin/sh -c "while true;do echo hello docker;sleep 1;done;"这么写,是希望永远执行下去,而不会退出。
接下来我们进入这个docker容器吧
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d892dc773700 lzcmysql5.7:0.1 "/bin/sh -c 'while t 25 minutes ago Up 25 minutes 0.0.0.0:13306->3306/tcp lzcmysql6
#root docker exec -it d892dc773700 /bin/bash
#/usr/bin/mysqld_safe --user=mysql --datadir=/export/servers/mysql/data &
TODO
自制的lzcmysql5.7比较大,达到1.378 GB,可能中途安装了一些工具包造成的,需要尽可能减少镜像包的体积
#参考文章
如何进入Docker容器 https://blog.csdn.net/u010397369/article/details/41045251