如何进入启动的mysql docker容器
公司主营业务:成都网站制作、成都网站设计、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出运河免费做网站回馈大家。
第一: 启动容器后用link 链接, 官方的mysql 容器有以下几个环境变量。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql
docker run -it --link some-mysql:mysql daocloud.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,可以用如下命令链接
docker run -ti --link pythondjangocdsample_mysql_1:mysql daocloud.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"'
或者用busybox 链接mysql 容器查看环境变量, 以下为myblog_mysql_1 中的环境变量。
docker run -ti --link myblog_mysql_1:mysql busybox
/ # env
HOSTNAME=2f0ab0a2e9c5
SHLVL=1
HOME=/root
MYSQL_ENV_MYSQL_DATABASE=myblog
MYSQL_ENV_MYSQL_MAJOR=5.7
TERM=xterm
MYSQL_PORT_3306_TCP_ADDR=172.17.0.3
MYSQL_ENV_MYSQL_ROOT_PASSWORD=mysql
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_PORT=tcp://172.17.0.3:3306
MYSQL_ENV_MYSQL_VERSION=5.7.11-1debian8
MYSQL_PORT_3306_TCP=tcp://172.17.0.3:3306
PWD=/
MYSQL_NAME=/pensive_morse/mysql
以下为myblog_myblog_1链接到myblog_mysql_1 中的环境变量。
docker run -ti --link myblog_myblog_1:myblog busybox
/ # env
MYBLOG_ENV_PYTHON_VERSION=2.7.11
MYBLOG_ENV_MYSQL_PORT_3306_TCP_ADDR=mysql
MYBLOG_ENV_MYSQL_PASSWORD=mysql
MYBLOG_PORT=tcp://172.17.0.4:80
HOSTNAME=5ae02b948c2c
SHLVL=1
HOME=/root
MYBLOG_ENV_MYSQL_PORT_3306_TCP_PORT=3306
MYBLOG_ENV_MYSQL_INSTANCE_NAME=myblog
MYBLOG_NAME=/nostalgic_darwin/myblog
MYBLOG_PORT_80_TCP_ADDR=172.17.0.4
MYBLOG_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
MYBLOG_PORT_80_TCP_PORT=80
MYBLOG_PORT_80_TCP_PROTO=tcp
TERM=xterm
MYBLOG_ENV_PYTHON_PIP_VERSION=8.1.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MYBLOG_PORT_80_TCP=tcp://172.17.0.4:80
MYBLOG_ENV_LANG=C.UTF-8
MYBLOG_ENV_MYSQL_USERNAME=root
PWD=/
第三种方法:直接以client 端登陆mysql
sudo apt-get install mysql-client
mysql -h172.17.0.3 -P3306 -uroot -pmysql
第四种: 在容器里面添加ssh-server
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:httpd]
command=/bin/bash -c "exec /usr/sbin/httpd -DFOREGROUND"
Ambari是Apache的开源项目,它帮助用户在GUI页面上简单的部署、管理、监控Hadoop集群环境。Ambari支持的Hadoop组件包括HDFS、Hive、HBase、Spark、Yarn等,HortonWorks官方也是采用Ambari来完成自家HDP套件的安装、管理及监控的。除了预置的组件之外,Ambari还支持自定义组件的安装,同时,支持RESTful的API,继而可以通过命令行等方式调用Ambari来完成一些自动化的任务。
本文共分为两部分,第一部分介绍如何在Docker虚拟化环境中部署Ambari;第二部分介绍如何基于Ambari来部署和管理Hadoop集群。
### 环境信息
* Docker发行版:Docker for Mac
* Docker版本:17.06.2-ce
* Docker容器OS:Ubuntu 14.04
* Ambari版本:2.5.2.0
Docker环境准备
拉取Docker镜像:在宿主机上执行命令docker pull ubuntu:14.04从远端仓库中获取Ubuntu的镜像,也可以获取其他OS的镜像,本文以Ubuntu为例
启动Docker容器:执行如下命令,以ubuntu:14.04镜像为基础启动容器:
docker run -itd --name ambari_new -p 8080:8080 -p 3306:3306 -v /Users/yuxiaolei/Workspace/dockerShared:/dockerShared ubuntu:14.04 /bin/bash
由于Ambari启动Web程序的时候占用8080端口,因此要从Docker宿主机上访问Ambari页面,需要通过参数 -p 来制定端口映射;
作为新手,笔者在容器内部署好Ambari之后,才发现Web页面的8080端口和MySQL的3306端口(可选)没有暴露给Docker宿主机,也就没法从宿主机上通过浏览器来登陆Ambari,因此必须想办法在已有容器上开放端口。
有两个方法:
1)如果宿主机为Linux系统,则修改iptables防火墙来指定端口映射规则;
2)如果是非Linux系统,可以将已装Ambari的容器commit为新的镜像,再基于该镜像创建新的容器。此时,就可以在docker run命令中添加参数 -p 来指定端口映射了。
还有一个问题,Ambari将其数据存储在数据库中,支持MySQL、PostgreSQL等数据库;容器内安装MySQL之后,基于上一步创建的新容器里,会发现MySQL启动不起来,执行命令/etc/init.d/mysql restart启动失败,在/var/log/mysql/error.log日志文件中打印有170802 14:02:59 [ERROR] Fatal error: Can't open and lock privilege tables: Got error 140 from storage engine的错误,经过网上查资料,需要在创建容器的时候添加参数-v /var/lib/mysql将MySQL数据存储路径声明为数据卷,即可解决问题。
启动容器之后,执行命令docker exec -it ambari /bin/bash进入容器内部。
Ambari安装
配置Ubuntu的软件仓库源:
国内建议采用阿里云的软件源,在root账号下用vim打开/etc/apt/sources.list文件,删除文件所有内容,粘贴如下内容:
deb trusty main restricted universe multiverse
deb trusty-security main restricted universe multiverse
deb trusty-updates main restricted universe multiverse
deb trusty-proposed main restricted universe multiverse
deb trusty-backports main restricted universe multiverse
deb-src trusty main restricted universe multiverse
deb-src trusty-security main restricted universe multiverse
deb-src trusty-updates main restricted universe multiverse
deb-src trusty-proposed main restricted universe multiverse
deb-src trusty-backports main restricted universe multiverse
执行命令apt-get update完成软件列表更新
安装Ambari所依赖的软件
apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
完成安装之后,在 ~/.bashrc 文件末尾添加命令 `export JAVA_HOME=/usr/lib/jvm/java-8-oracle ` 以配置JAVA\_HOME 环境变量。
create database ambari;use ambari;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root_password' WITH GRANT OPTION;FLUSH PRIVILEGES;exit;
由于Ambari的数据存储在MySQL数据库中,这里为Ambari单独创建了database,并为其赋了完全控制权限;说明:假设MySQL数据库root用户的密码为:root\_password
修改 `/etc/mysql/my.conf`,将`skip-external-locking`注释掉,并确保 `bind-address = 0.0.0.0` 配置,以使MySQL可被远程主机访问。
执行命令`/etc/init.d/mysql restart`重启MySQL 服务。
时间同步服务器ntp:执行命令apt-get install ntp安装ntp时间同步服务器,以便于集群环境中各节点的时钟一致;执行命令sudo service ntp restart重启ntp服务。
MySQL:执行命令apt-get install mysql-server安装MySQL服务器,安装完成后执行命令mysql -uroot -proot进入MySQL客户端,执行如下SQL代码:
Oracle JDK:逐条执行如下命令,以添加WebUpd8团队()提供的Oracle JDK仓库源,并从该仓库安装JDK:
下载Ambari仓库文件
进入cd /etc/apt/sources.list.d目录,执行命令wget 从HortonWorks仓库中下载Ambari源文件,下载后切勿修改list文件名;
执行命令apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD以信任远端仓库的GPG签名
执行命令apt-get update更新Ambari软件源
执行命令apt-get install ambari安装Ambari套件,由于软件包较大(700多MB),这里情耐心等待,不过apt-get支持断点下载,网络终端后重新执行命令时不会从零开始下载
配置Ambari:
执行命令mysql -uroot -proot进入MySQL客户端,执行命令source ambari进入ambari的数据库,并执行命令source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql来完成Ambari的数据库表初始化操作;
执行命令ambari-server setup启动Ambari的引导式配置操作,根据指导做配置即可。需要注意的是,JDK不要选择由Ambari从网络下载,应该选择自定义路径,然后输入/usr/lib/jvm/java-8-oracle即可;
启动Ambari:执行命令ambari-server start,启动日志存储路径为/var/log/ambari-server/ambari-server.log
启动之后,由于我们之前做了Docker容器的端口映射,因此可以在宿主机上打开浏览器输入即可访问Ambari登陆页面
登陆用户名和密码均为admin,登陆之后就可以看到Ambari的首页了,如下图:
{% asset_img
1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下
[plain] view plain copy print?
FROM centos:centos6
MAINTAINER Fanbin Kong "kongxx@hotmail.com"
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"]
-