❶ 怎么读mysqldocker容器的服务
步骤:
1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下
[plain] view plain print?
FROM centos:centos6
MAINTAINER Fanbin Kong "[email protected]"
RUN yum install -y mysql-server mysql
RUN /etc/init.d/mysqld start &&\
mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
mysql -u root -pletmein -e "show databases;"
EXPOSE 3306
CMD ["/usr/bin/mysqld_safe"]
2. 在Dockerfile所在目录下运行build命令来生成image文件,这里使用mysql_server作为image文件名
[plain] view plain print?
sudo docker build -t mysql_server .
运行完build命令后,可以使用“sudo docker images”来查看。
3. 启动容器
3.1 首先使用下面的命令来启动容器
[plain] view plain print?
sudo docker run --name=mysqlserver -d -P mysql_server
启动完容器后,可以使用“sudo docker ps”来查看,此时可以看PORTS列内容为“0.0.0.0:49153->3306/tcp”,容器的3306端口会被映射到宿主机器的49153端口,这样我们就可以通过宿主机器的49153端口来连接了,比如:
[plain] view plain print?
mysql -h <宿主机器> -u root -pletmein -P 49153
3.2 另外在运行容器的时候也可以通过下面的命令
[plain] view plain print?
sudo docker run --name=mysqlserver -d -p 3306:3306 mysql_server
此时容器的3306端口会被映射到宿主机器的3306端口,这样我们就可以通过宿主机器的3306端口访问mysql了
[plain] view plain print?
mysql -h <宿主机器> -u root -pletmein
3.3 还有一种情况就是为了安全考虑,我只希望当前的宿主机器可以访问mysql服务,此时我们可以
[plain] view plain print?
sudo docker run --name=mysqlserver -d -p 127.0.0.1:3306:3306 mysql_server
❷ 如何理解LXC与Docker之间的主要区别
LXC
LXC起源于cgroup和namespaces在Linux内核方面的发展,它支持轻便的虚拟技术操作系统环境(容器技术),Daniel Lezcano和Serge Hallyn做了一些它的早期工作,这个可以追溯到2009年在IBM的时候。
LXC系统提供工具来管理容器,先进的网络和存储支持,还有最小容器操作系统模板的广泛选择。它目前由一个两人的团队领导:来自Ubuntu的Stephane Graber和Serge Hallyn。LXC是由Ubuntu支持的。
如何区分他们
生产Docker的目的是为了尽可能减少容器中运营的程序,减少到只运营单个程序,并且通过Docker来管理这个程序。
有了Docker,可以从底层应用程序通过Docker来配置,网络,存储和编排。
LXC用正常操作系统环境回避那个问题,并且因此可以快速兼容所有应用程序和工具,以及任意管理和编制层次,来替代虚拟机。
除此之外,Docker使用层次,禁用存储持久性。LXC支持AUFS层次和覆盖,对COW克隆和用brtfs、ZFS、LVM Thin快照广泛支持,并且将选择留给用户。LXC容器技术里的分散存储是绑定安装的,来为用户达到主机或者另一个容器。
Docker和LXC都设置了一个默认的NAT网络。另外,Docker设置一个端口转发到主机上,就会有一个-p标记,比如“-p80:80”就是80从主机转发到容器。有NAT,本地主机就可以直接通过IP访问容器,外部服务需要的时候可以通过IPtable规则来简单完成,当外部服务被消耗的时候,只需要端口转发就可以。至于为什么需要这么做,原因目前还不是很明确。
要把事项复合起来,Docker只给了很少的IP和主机文件控制权,所以不能给容器设置静态IP,这对于IP的分配任务来说有点让人疑惑。我们需要使用“--Links”标记来连接容器,这个容器中要在被连接的容器中加一个入口在/etc/主机上。
有了LXC,分配静态IP,动态IP,使用多网络设备就简单多了,可以使用/etc/hosts文件,基本上使用Linux网络全栈是没有限制的。您希望在主机上连接容器吗?用户使用GRE,L2TPV3或者VXLAN来快速设置层次,或者是任意的在使用的网络技术。
LXC容器技术可以无缝运行虚拟机运行的一切。
Docker
Docker是dotCloud也就是现在的Docker公司在2013年3月发布的,一开始是基于LXC项目来创建单个应用程序容器。Docker现在已经开发了他们自己的直接使用核心namespaces和cgroup的工具:libcontainer。
分层容器
Docker最开始是基于LXC对Aufs的支持来建立分层容器,因为Aufs可能无法被合并到核心中,所以现在对Brtfs、设备映射和覆盖也添加支持,
Docker容器技术是由基底镜像构成,当提交变成Docker镜像的时候会再加上一个分层面板。当运行一个镜像的时候,它的复本就作为容器被启动了,在提交之前,它的任何数据都只是暂时的。每一个提交都是一个独立的镜像,所以可以从镜像开始。
我们在《如何用LXC覆盖》里有一个指导说明,它给用户描述了分层结构是如何工作的。有了像Aufs或者覆盖(他们在实施上、性能上有区别,而且支持一定数量的低一点的层次)这样的文件系统的联合,较低一点的层次是只读的,而较高一点的层次是在运行的时候是可读可写的。在容器内容中通常是基底操作系统,但是也不是很必要,而上层的图层面板则是由你来修改。
虽然图层面板的想法听起来很不错,但是分层文件系统在技术上仍然是不成熟的,在使用图层面板的时候,还有有一个固有的复杂性和性能的损失。《陷入图层面板》是一个真实的冒险实例,大家不妨看看。
单个应用程序容器
Docker将容器技术限制到只能运行单个进程。Docker的底层镜像操作系统模版不是为运行多个应用程序,进程设计,也不是为像init,cron,syslog,ssh等服务而设计。
我们来看早期的东西,它介绍了日复一日的用户场景有一定的复杂性。因为目前的架构,应用程序和服务是为正常的多程序操作系统环境设计的,所以需要去寻找一种以Docker的方式来工作或使用工具来支持Docker。
拿一个简单的应用程序举个例子,比如WordPress。你可能需要建立3个容器来互相消耗服务。PHP容器,Nginx容器和MySQL容器加上2个分别用来放MysqlDB和WordPress文件持久性数据的容器。然后通过适当的权限将WordPress文件安装成PHP-FPM和Nginx两种语言都可用,然后为了把东西弄得更加让人兴奋,找出一种能够让容器在本地网络上可以互相交流的方法,不需要对网络不定时的控制,也不需要Docker后台程序设置IP!但是我们还没有计算WordPress账户管理的cron和Email。哎!
为了在Docker里运行多个程序,你需要shell 脚本,或者是一个分开的程序管理,比如runit或者管理器。但是Docker生态系统会将之视为“反模式“,而且Docker的整个架构是建立在运行单个程序的容器上的。
代码库
Docker为用户提供公共或者个人push和pull镜像的数据库。这个跟Flockport app Store为用户使用容器做好准备有点相似。这样做,对用户来说,分享和分布应用程序就很简单了。
Dockerfile
Dockerfile是一个告诉Docker如何从镜像用特定的应用程序来创建容器的脚本。跟使用特定的安装好的应用程序通过bash脚本来创建一个LXC容器相似。
跟LXC拉开距离
LXC的特点需要通过Docker团队来重载实现,使之在Docker中可用,比如LXC现在支持让非根用户创建和配置容器的未经授权容器,LXC现在还致力于实时迁移和多主机管理。这些对容器来说都是很大的进步,也为更好的安全性,多租户工作量以及虚拟平价铺平了道路。
Docker还不支持这些。随着最近的libcontainer声明,推测两者间的差距还将增大。
运行容器的方法没有对错之分,容器怎么用主要取决于用户,docker方法是独特的,而且还将在每个阶段自定义途径成为必须途径,并以此来找到Docker的方法从安装和运行应用程序来完成任务,完成弹性扩容。
❸ docker mysql 容器 数据库文件怎么娴宿主机器上
原因是文件夹没权限,同时把宿主和容器中相应的文件夹设置为归属mysql用户,但结果是只有一个文件夹归属mysql用户,再次把不是归属mysql的文件夹设置为归属mysql用户后,另一个文件夹又变成不归属mysql用户,这是什么原因?如下所示: 宿主: chmod +w /data/volumes-mysql chown -R mysql:mysql /data/volumes-mysql chcon -R -t mysqld_db_t /data/volumes-mysql 容器: chmod +w /home/databases/mysql/data chown -R mysql:mysql /home/databases/mysql/data chcon -R -t mysqld_db_t /home/databases/mysql/data cd /data/volumes-mysql ls -al drwxr-xr-x. 2 27 27 4096 12月 3 20:09 . drwxr-xr-x. 6 root root 4096 12月 3 19:54 .. -rw-rw----. 1 27 27 18874368 12月 3 20:09 ibdata1 -rw-rw----. 1 27 27 5242880 12月 3 20:09 ib_logfile0 -rw-rw----. 1 27 27 5242880 12月 3 20:09 ib_logfile1 cd /home/databases/mysql/data ls -al drwxr-xr-x. 2 mysql mysql 4096 Dec 3 12:09 . drwxr-xr-x. 3 root root 4096 Dec 3 12:02 .. -rw-rw----. 1 mysql mysql 5242880 Dec 3 12:09 ib_logfile0 -rw-rw----. 1 mysql mysql 5242880 Dec 3 12:09 ib_logfile1 -rw-rw----. 1 mysql mysql 18874368 Dec 3 12:09 ibdata1
❹ 为什么后端工资普遍比前端高
前端和后端哪个工资高?事实上,两个都是属于技术研发岗位,都是高薪有前途的职业,不存在说哪个工资更高些,都基本在一万到五万之间,工资的差别主要体现在个人技术上。要问做前端好还是做后端好?其实无论做前端还是做后端,只要有实力,其实差别并不大。主要还是要看你喜欢哪个,适合哪个。
前端工作内容:
前端开发主要做的是用户所能看到的前端展示界面。前端开发用到的技术包括但不限于html5、css3、javascript、jquery、Bootstrap、Node.js 、AngularJs等技术。从开始的切页面,到现在复杂的前端单页应用,node服务端应用,移动端react-native等,前端的技术更新速度远远超过服务端的更新速度,这也就要求前端同学,需要不停的学习新的技术来跟上前端技术的升级,一旦松懈,就可能被淘汰。前端现在所覆盖的场景已经越来越广,从传统的前端,已经延伸到服务端,工具链,移动端等。
而对于新手来说,前端入门是最容易的,现在很多人直接从主流框架开始学习前端,react, vue 看一看就可以直接开始项目开发了(但是不推荐,还是从HTML, CSS, ECMAScript 基础学期)前端入门容易,但是比较容易陷入API型程序员,各类框架和库都会用,但是都不够深入。服务端入门相对难,但是时间长了,比较容易构建技术壁垒,拉开差距。
后端工作内容:
开发主要做的是逻辑功能等模块,是用户不可见的。后端开发 以java为例 主要用到的 是包括但不限于Struts spring springmvc Hibernate Http协议 Servlet Tomcat服务器等技术。后端适合重逻辑,逻辑思维强的同学,技术难度相对是要比前端深的,虽然会基本的CURD就能从事后端开发,但是在云计算时代,只会CURD是迟早会被淘汰的,docker容器技术,serverless ,函数计算, devops 越来越多的新技术和新架构出来,需要很长时间去慢慢学习和积累,后端的学习是一个漫长的过程。
前端晋升发展:
一方面可以这样发展:初级程序员 → 中/高级程序员 → 架构师 → 技术经理 → 技术总监CTO。工资从最初的一万到两三万,再到四五万,最后年薪百万也是没问题的。不想做前端开发,可以考虑去转产品岗。前端转产品有着天然的优势,其次是产品经理的工资水平也不低,月薪四、五万多了去了。而且都说优秀的产品经理简直就是一个CEO的前身,这话一点也不假。因此前端无论是做技术还是转管理都是大有前途的。
后端晋升发展:
都说核心技术栈都是后端的,这话也有一定道理,毕竟做后端要求有扎实的技术能力。因此做后端专攻技术的比较多,一开始也是一万左右,四、五后工资可以翻四五倍都是小意思。JAVA是作为后端开发的。现在后端开发主要是PHP和JAVA,当然还要加上数据库MySQL、Oracle。PHP比较适合交互比较少的后端,适合小规模的应用。JAVA做后端安全性、稳定性都较好,所以大、中企业用JAVA开发。当然后端开发还有C 等语言,C 的特点是开发快、成本低,一些手机游戏就用C 作为后端语言。因此后端的需求还是十分广泛的。总之做后端只要有过硬的技术,在企业里一定有自己的一席之地。
总之,前端和后端工资和职业发展前景就都不错。大家在选择做前端还是做后端的时候,最重要的是看自己的喜好,毕竟适合自己的才是最好的。
❺ 什么数据存储软件的兼容性比较高
1. Ceph
Ceph是一个强大的存储系统,它在同一个系统中同时提供了对象,块(通过RBD)和文件存储。无论您是希望在虚拟机中使用块设备,还是将非结构化数据存储在对象存储中,Ceph都可以在一个平台上提供所有功能,并且还能获得出色的灵活性。 Ceph中的所有内容都以对象的形式存储,不管原始的数据类型是什么,RADOS(reliable autonomic distributed object store)都会把它们当做对象来进行存储。
RADOS层确保数据始终保持一致状态并且可靠。Ceph会通过数据复制,故障检测和恢复,以及跨群集节点进行数据迁移和重新平衡来实现数据一致性。 Ceph提供了一个符合POSIX的网络文件系统(CephFS),旨在实现高性能,大数据存储以及与传统应用程序的最大兼容。Ceph可以通过各种编程语言或者radosgw(RGW)实现无缝的访问对象存储,(RGW)这是一种REST接口,它与为S3和Swift编写的应用程序兼容。另一方面,Ceph的RADOS块设备(RBD)可以访问在整个存储集群中条带化和复制的块设备映像。
Ceph的特性
独立、开放和统一的平台:将块,对象和文件存储组合到一个平台中,包括最新添加的CephFS
兼容性:您可以使用Ceph 存储对外提供最兼容Amazon Web Services(AWS)S3的对象存储。
精简配置模式:分配存储空间时,只是虚拟分配容量,在跟进使用情况占用实际磁盘空间。这种模式提供了更多的灵活性和磁盘空间利用率。
副本:在Ceph Storage中,所有存储的数据都会自动从一个节点复制到多个其他节点。默认任何时间群集中的都有三份数据。
自我修复:Ceph Monitors会不断监控你的数据集。一旦出现一个副本丢失,Ceph会自动生成一个新副本,以确保始终有三份副本。
高可用:在Ceph Storage中,所有存储的数据会自动从一个节点复制到多个其他的节点。这意味着,任意节点中的数据集被破坏或被意外删除,在其他节点上都有超过两个以上副本可用,保证您的数据具有很高的可用性。
Ceph很强大:您的集群可以用于任何场景。无论您希望存储非结构化数据或为数据提供块存储或提供文件系统,或者希望您的应用程序直接通过librados使用您的存储,而这些都已经集成在一个Ceph平台上了。
可伸缩性:C
❻ docker容器跑起mysql后,在宿主机无法进去mysql
这不很正常嘛
宿主机又没安装MySQL(至少要安装客户端啊)
❼ docker容器内怎么连接外部的mysql
推荐使用Dockerfile方式。
服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想通过ssh去管理容器还要有mysql服务的启动起来 cmd的方式就无法实现,当然容器不需要以sshd的方式去管理,这些也都是看自己怎么去使用,比如说我想备份容器里的数据 我完全可以使用 –volumes-from <容器name> , 重启使用 docker restart <容器id>, 我个人也是使用ssh习惯了 所以依赖的镜像把ssh服务栽进去了。
# docker 版本:
复制代码
代码如下:
[root@private_network mysql]# docker version
Client version: 1.6.0-rc5
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): fc4825d
OS/Arch (client): linux/amd64
Server version: 1.6.0-rc5
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): fc4825d
OS/Arch (server): linux/amd64[/code]
# 目录结构
复制代码
代码如下:
mysql/
|-- cmake-3.2.2.tar.gz
|-- create_mysql_user.sh # mysql用户初始化脚本
|-- Dockerfile
|-- install_mysql-5.6.24.sh # mysql服务安装脚本
|-- my.cnf # mysql服务配置文件
|-- mysql-5.6.24.tar.gz
`-- supervisord.conf # 服务管理工具配置文件
# Dockerfile
复制代码
代码如下:
# FROM: 依赖的镜像
FROM ted1993/mysql:5.6.24
#MAINTAINER: 个人信息
MAINTAINER xuqiangqiang "[email protected]"
# RUN: 执行命令
RUN yum -y install tar gcc-c++ supervisor ncurses-devel libtool bison bison-devel pwgen
RUN mkdir -p /var/log/supervisor
# ADD: 添加本地文件到容器中,如果是压缩包会在目标目录进行自动解压,如果只想添加文件可以使用 COPY命令
ADD ./supervisord.conf /etc/supervisord.conf
ADD ./cmake-3.2.2.tar.gz /root/tools/
ADD ./mysql-5.6.24.tar.gz /root/tools/
ADD ./install_mysql-5.6.24.sh /root/tools/
ADD ./create_mysql_user.sh /create_mysql_user.sh
# WORKDIR: 当前的工作目录
WORKDIR /root/tools/
RUN sh install_mysql-5.6.24.sh
ADD ./my.cnf /data/server/mysql-5.6.24/etc/my.cnf
RUN rm -rf /root/tools/mysql-5.6.24
RUN rm -rf /root/tools/mysql-5.6.24.tar.gz
RUN rm -rf /root/tools/cmake-3.2.2
RUN rm -rf /root/tools/cmake-3.2.2.tar.gz
# EXPOSE: 公开的端口,会暴露在外的端口
EXPOSE 22 3306
# CMD: 容器启动执行的命令 一个dockerfile只有一个cmd生效。
CMD ["/usr/bin/supervisord"]
# supervisord.conf 服务管理工具通过supervisord管理服务
复制代码
代码如下:
[supervisord]
nodaemon=true
[program:mysqld]
command=/etc/init.d/mysqld start
numprocs=1
autostart=true
autorestart=true
[program:sshd]
command=/usr/sbin/sshd -D
numprocs=1
autostart=true
autorestart=true
# install_mysql-5.6.24.sh
复制代码
代码如下:
#!/bin/bash
grep "^mysql:" /etc/passwd &> /dev/null || groupadd mysql && useradd -g mysql -s /sbin/nologin mysql
if [ ! -d cmake-3.2.2 ];then
tar xzvf cmake-3.2.2.tar.gz
fi
cd cmake-3.2.2
./bootstrap && gmake && gmake install && cd ..
if [ ! -d mysql-5.6.24 ];then
tar xzf mysql-5.6.24.tar.gz
fi
cd mysql-5.6.24
cmake \
-DCMAKE_INSTALL_PREFIX=/data/server/mysql-5.6.24 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql-5.6.24/ \
-DSYSCONFDIR=/data/server/mysql-5.6.24/etc/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=complex \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_unicode_ci \
-DWITH_DEBUG=0
CPU_NUM=$(cat /proc/cpuinfo | grep processor | wc -l)
if [ $CPU_NUM -gt 1 ];then
make -j$CPU_NUM
else
make
fi
make install
echo "PATH=\$PATH:/data/server/mysql/bin" >> /etc/profile && . /etc/profile
ln -s /data/server/mysql-5.6.24/ /data/server/mysql
rm -rf /etc/my.cnf
mkdir -p /data/server/mysql-5.6.24/etc/
mkdir -p /data/server/mysql/data/
mkdir -p /data/log/mysql/
chown -R mysql:mysql /data/server/mysql/
chown -R mysql:mysql /data/server/mysql/data/
chown -R mysql:mysql /data/log/mysql
\cp -f /data/server/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^basedir=$#basedir=/data/server/mysql#' /etc/init.d/mysqld
sed -i 's#^datadir=$#datadir=/data/server/mysql/data#' /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
/data/server/mysql/scripts/mysql_install_db --datadir=/data/server/mysql/data/ --basedir=/data/server/mysql --user=mysql
# create_mysql_user.sh
复制代码
代码如下:
#!/bin/bash
/data/server/mysql/bin/mysqld_safe >> /dev/null 2>&1 &
RET=1
while [[ RET -ne 0 ]]; do
echo "=> Waiting for confirmation of MySQL service startup"
sleep 5
/data/server/mysql/bin/mysql -uroot -e "status" > /dev/null 2>&1
RET=$?
done
echo "============================MYSQL_PASS_INFO=============================== "
echo ""
PASS_ROOT=${MYSQL_PASS:-$(pwgen -s 8 1)}
PASS_DBA=${MYSQL_PASS:-$(pwgen -s 8 1)}
echo ""
echo "=> Creating MySQL root user with ${PASS_ROOT} password"
echo "=> Creating MySQL dba user with ${PASS_DBA} password"
echo ""
/data/server/mysql/bin/mysql -uroot -e "grant all privileges on *.* to 'dba'@'%' identified by '${PASS_DBA}'";
/data/server/mysql/bin/mysql -uroot -e "update mysql.user set password=PASSWORD('${PASS_ROOT}') where user='root' and host='localhost'";
echo ""
echo "===================================END====================================="
echo ""
echo "=> Done!"
echo ""
echo ""
echo "==============================REMOTE_MYSQL_PASSWORD====================="
echo "You can now connect to this MySQL Server using:"
echo ""
echo " mysql -udba -p${PASS_DBA} -h<host> -P<port>"
echo ""
echo "Please remember to change the above password as soon as possible!"
echo "MySQL user 'root' has no password but only allows local connections"
echo "========================================================================"
# 通过docker build命令提交镜像
复制代码
代码如下:
docker build -t ted1993/mysql:5.6.24 . # 注意最后面有一个"."
# 使用docker images 命令查看镜像
复制代码
代码如下:
[root@private_network mysql]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ted1993/mysql 5.6.24 d3ed9c578f4c 5 days ago 902.8 MB
# 使用docker run 命令启动容器 -P 使用随机端口映射容器端口 -p 3306:3306 使用指定端口
复制代码
代码如下:
docker run -d -P ted1993/mysql:5.6.24
# 使用docker ps 命令查看运行容器id
复制代码
代码如下:
[root@private_network mysql]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab622592bf1e mysql:5.6.24 "/usr/bin/supervisor 3 days ago Up 3 days 0.0.0.0:5000->22/tcp, 0.0.0.0:5001->3306/tcp jolly_swartz
# 使用docker commit 提交新的镜像
docker commit ab622592bf1e ted1993/mysql:2015-06-02[/code]
Docker使用Link在容器之间建立连接
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务。比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务。下面我们就来看看Docker是怎样通过Link来实现这种功能的。
这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java等的应用。
先创建一个mysql_server目录并在其下创建一个Dockerfile文件,内容如下
复制代码
代码如下:
FROM centos:centos6
MAINTAINER Fanbin Kong "[email protected]"
RUN yum install -y mysql-server mysql
RUN /etc/init.d/mysqld start &&\
mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
mysql -u root -pletmein -e "show databases;"
EXPOSE 3306
CMD ["/usr/bin/mysqld_safe"]
然后根据Dockerfile来创建image
复制代码
代码如下:
sudo docker build -t kongxx/mysql_server .
创建一个mysql_client目录并在其下创建一个Dockerfile文件,内容如下
复制代码
代码如下:
FROM centos:centos6
MAINTAINER Fanbin Kong "[email protected]"
RUN yum install -y mysql
然后根据Dockerfile来创建image
复制代码
代码如下:
sudo docker build -t kongxx/mysql_client .
创建完image之后,我们可以使用下面命令来查看结果
复制代码
代码如下:
$ sudo docker images | grep kongxx
kongxx/mysql_client latest aa31f22f6fc5 2 hours ago 303.7 MB
kongxx/mysql_server latest 3b9b08c8dda4 2 hours ago 353.3 MB
第二步是根据image来创建我们的应用场景
首先创建提供mysql数据库服务的容器
复制代码
代码如下:
sudo docker run --name=mysql_server -d -P kongxx/mysql_server
分别创建两个使用上一步创建出来mysql数据库服务的容器
第一个应用容器
复制代码
代码如下:
sudo docker run --name=mysql_client1 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
第二个应用容器
复制代码
代码如下:
sudo docker run --name=mysql_client2 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
这里需要特别注意一下“–link=mysql_server:db”,这个参数就是告诉Docker容器需要使用“mysql_server”容器,并将其别名命名为db,这样在这两个容器里就可以使用“db”来作为提供mysql数据库服务的机器名。所以在最后启动参数里我们使用的是“/usr/bin/mysql -h db -u root -pletmein”来连接mysql数据库的。
运行完上面两个命令,我们就会在创建了两个mysql的client的容器,此时我们可以使用下面命令来查看状态
复制代码
代码如下:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac0c76c627c0 kongxx/mysql_client:latest /usr/bin/mysql -h db 10 seconds ago Up 9 seconds mysql_client2
763c4825722d kongxx/mysql_client:latest /usr/bin/mysql -h db 41 minutes ago Up 40 minutes mysql_client
32f7839f7e9d kongxx/mysql_server:latest /usr/bin/mysqld_safe About an hour ago Up About an hour 0.0.0.0:49153->3306/tcp mysql_client1/db,mysql_client2/db,mysql_server
这里注意一下最后一行,也就是mysql_server容器的“NAMES”列的内容“mysql_client/db,mysql_client2/db,mysql_server”,这就说明mysql_client1和mysql_client2都和db建立的连接。
❽ MySQL管理器是什么意思 IoC容器又是什么意思
MYSQL是数据库IOC全称是Inversion Of Control, 可译为反转控制。在软件开发技术中是一种通过容器管理对象约束关系。在早期是依赖注入Dependence Injection.
❾ 如何进入启动的mysql docker容器
第一: 启动容器后用link 链接, 官方的mysql 容器有以下几个环境变量。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d cloud.io/mysql
docker run -it --link some-mysql:mysql cloud.io/mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
第二种方法:已经有compose 启动的容器用link链接, 比如我的docker image 为pythondjangocdsample_mysql_1,可以用如下命令链接