下载镜像
既然有了docker,就一步步学习docker的容器技术,也方便开发,不用外部安装一坨又大又跑不动的软件
刚刚起步docker,遇到到很多的坑,还是决定记录一下,转个身就忘了
此次的系统是Mac, 从镜像中心pull一个mysql镜像,进入网易云的镜像中心,点复制即可,也可以从其他仓库下载,都一样
大多仓库下方都带有该应用的说明、版本、操作、注意点解决方式,作为新手还是耐心的看一下比较好,实在看不懂英文,可以找翻译,比百度、Google漫天找答案准确的多
复制pull的信息,直接上终端,等待下载完,docker images查看我的镜像
删除镜像
hello-world是之前做docker测试使用,另外redis和mysql是本次下载的,放着后面用
作为有文件洁癖的我,还是要把hello-world给删掉,删掉image也是有套路操作的
①命令 docker ps -a 查看镜像生成的容器,(如果容器中没有,就跳过①②步)
②命令 docker rm fe58 删除容器,输入容器ID(ID是64位的,展示只展示16位,如果容器不多且ID前几位不重复,可以直接自由输入几位都可以被标识到该目标)
③命令 docker rmi 2cb 删除镜像(比删除容器命令多了一个 i ), 完成
关于重命名
如果有美感的同学想重复名镜像容器的话,提醒一下: 不能以大写字母和下划线命名
在下认为还是不要重命名了,虽然有点长,但这名字记录着我们当时在哪里搞到她的,也就可以去哪里查看相关的文档信息,毕竟婆家这么多
mysql
下面对文档做个翻译,跟着操作 ☟☟☟
①启动一个mysql服务器实例
启动MySQL实例很简单:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
some-mysql是要分配给容器的名称,my-secret-pw是为MySQL root用户设置的密码,tag是指定所需MySQL版本的标记。 请参阅上面的列表以获取相关标签。
≡≡》跟着①说明操作一波,运行成功并返回一个64位ID, -d命令是将mysql至于后台运行,然后我们就可以继续打命令
②从Docker另一个容器应用程序连接到MySQL
此镜像暴露标准MySQL端口(3306),因此容器链接使MySQL实例可用于其他应用程序容器。 像这样启动你的应用程序容器,将它链接到MySQL容器:
$ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
≡≡》这边还没有应用服务,先留着
③从MySQL命令行客户端连接到MySQL
以下命令启动另一个mysql容器实例并对原始mysql容器运行mysql命令行客户端,允许您对数据库实例执行SQL语句 (以下是一行命令):
$ docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql h\"$MYSQL_PORT_3306_TCP_ADDR\" -P\"$MYSQL_PORT_3306_TCP_PORT\" -uroot -p\"$MYSQL_ENV_MYSQL_ROOT_PASSWORD\"'
some-mysql是原始mysql容器的名称。
此镜像还可以用作非Docker或远程MySQL实例的客户端:
$ docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
有关MySQL命令行客户端的更多信息可以在MySQL文档中找到
≡≡》文档记录的都是docker run,说明都是从头执行镜像,现在刚刚已经运行了mysql,接着写就好了,执行sql也就是操作数据库了,操作数据库就要先进入数据库
docker exec -it 8e22 bash 命令进运行的容器查看,必须是运行时的容器,看到进入了root@...的伪终端,不知道命令的时候,比如docker exec --help,上面就会提示各种操作以及说明,到了伪终端就好操作了,常规数据库命令,仔细的人会发现上面启动mysql的时候,打id是redis的id,不是mysql的,后面怎么操作都不会正确,粗心是会把自己弄死的,尴尬
重新run mysql镜像,并exec进入运行容器:
跳出mysql> 就熟悉了,就可以showdatabases; create ...一顿操作,退出命令: exit
学习微服务的时候,经常提到服务的高可用、负载均衡,当然mysql在这里也可以做到一样的效果,实现docker中mysql主从式高可用数据库,也在于docker的优点,具有隔离性,妈妈再也不用担心机子不够用的问题,所以我们只需要多run 几个mysql,一个作为主数据库(master),另外几个作为从数据库(slave),配置容器属性,后面用到再学习
继续翻译
④容器shell访问和查看MySQL日志
docker exec命令允许您在Docker容器内运行命令。 以下命令行将在mysql容器中为您提供一个bash shell:
$ docker exec -it some-mysql bash
MySQL Server日志可通过Docker的容器日志获得:
$ docker logs some-mysql
≡≡》进入运行时容器已经操作过了,查看日志是要退出bash,在docker中访问日志,会打印在终端上
⑤使用自定义MySQL配置文件
MySQL启动配置在文件/etc/mysql/my.cnf中指定,该文件又包含在/etc/mysql/conf.d目录中以.cnf结尾的所有文件。 此目录中的文件中的设置将扩充和/或覆盖/etc/mysql/my.cnf中的设置。 如果要使用自定义的MySQL配置,可以在主机上的目录中创建备用配置文件,然后将该目录位置挂载到mysql容器中的/etc/mysql/conf.d
如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以像这样启动mysql容器(请注意,此命令中仅使用自定义配置文件的目录路径):
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
这将启动一个新容器some-mysql,其中MySQL实例使用/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf中的组合启动设置,后者的设置优先。
请注意,启用了SELinux的主机系统上的用户可能会遇到此问题。 当前的解决方法是将相关的SELinux策略类型分配给新的配置文件,以便允许容器装入它:
$ chcon -Rt svirt_sandbox_file_t /my/custom
≡≡》这里会出现问题,就像文档中说的一样,需要被允许,才可以执行自定义配置文件方式
就学到这里,休息下,太长了,不容易消化,一个mysql应用的操作,大部分应用也有类似的套路
-------------------------------------------------