腾讯云下使用docker一步步虚拟出可运行的线上环境

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/toto1297488504/article/details/88657065

1 腾讯云磁盘挂载和格式化

Linux下磁盘挂载(腾讯云挂载方式)
https://www.cnblogs.com/stulzq/p/7610100.html

格式化分区:
https://blog.csdn.net/nahancy/article/details/52201121

最终挂载磁盘信息
在这里插入图片描述
其中磁盘大小:

/dev/vdb1 /data/disk-one/        1024G
/dev/vdd1 /data/disk-two/        664G
/dev/vdc1 /data/disk-three/      1024G

为了机器重启之后能够让挂载的机器正常运行,需要在[root@VM_0_8_centos ~]# vim /etc/rc.local中添加如下配置文件,让机器启动的时候自动挂载

mount /dev/vdb1 /data/disk-one/
mount /dev/vdd1 /data/disk-two/
mount /dev/vdc1 /data/disk-three/

在这里插入图片描述

2 防火墙配置

新建安全组
在这里插入图片描述
添加所有指定端口能够被访问
在这里插入图片描述

3 使用Docker虚拟化出一个Centos7操作系统

Docker官网:https://docs.docker.com/
Docker文档:https://docs.docker.com/engine/reference/commandline/network_rm/

3.1 Docker安装

3.1.1 支持的操作系统

Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本

3.1.2 前提条件

目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

Docker要求CentOS系统的内核版本高于3.10,查看CentOS版本是否支持Docker.
通过uname –r命令查看你当前的内核版本

[root@bigdata1 ~]# uname -r
3.10.0-693.el7.x86_64

上面的Linux内核的版本大于3.10版本,可以进行安装。

3.1.3 使用yum安装(CentOS7下)

安装Docker
Docker软件包和依赖包已经包含在默认的CentOS-Extras软件源里,安装命令如下:

[root@runoob ~]# yum -y install docker-io

测试运行hello-world

[root@runoob ~]#docker run hello-world

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

3.1.4 使用脚本安装Docker(Centos7下)

1.使用sudo或root权限登录Centos.
2.确保yum包更新到最新

sudo yum update

3.执行Docker安装脚本

$ curl -fsSL https://get.docker.com/ | sh

执行这个脚本会添加docker.repo源并安装Docker.
4.启动Docker进程。

$ sudo service docker start

5.验证docker是否安装成功并在容器中执行一个测试的镜像。

$ sudo docker run hello-world
docker ps

到此,docker在CentOS系统的安装完成。

3.1.5 使用Centos7.5.1804 docker镜像虚拟一个操作系统

3.1.5.1 运行一个centos7镜像

以下是https://hub.docker.com/_/centos/给出的方式,以下不是最终运行方式
docker run --rm -d -i -t centos:centos7.5.1804 /bin/bash
注意:要加上-d,如果不加,这个当退出的时候,发现没有docker镜像了。

3.1.5.2 查看Linux下运行了哪些docker镜像
[root@bigdata1 ~]# docker ps
CONTAINER ID        IMAGE                   COMMAND               CREATED             STATUS              PORTS                   NAMES
46ba1c2535fc        centos:centos7.5.1804   "/bin/bash"           6 seconds ago       Up 5 seconds                                naughty_euler
daaa23c63483        centos:centos7.5.1804   "/bin/bash"           2 minutes ago       Up 2 minutes                                keen_golick
fbb65c980d65        sshd:Dockerfile         "/usr/sbin/sshd -D"   About an hour ago   Up About an hour    0.0.0.0:10022->22/tcp   mycentos2
[root@bigdata1 ~]#
3.1.5.3 进入运行的Linux操作系统
第一步中使用的后台静默的方式运行,通过docker attach <CONTAINER ID >访问该容器
[root@bigdata1 ~]# docker attach 46ba1c2535fc
[root@46ba1c2535fc /]#
3.1.5.4 ifconfig的安装

进入Centos之后,发现没有ifconfig,接下来配置ifconfig

yum search ifconfig
yum install net-tools.x86_64

上面运行完之后,可以执行ifconfig进行查看ip了

3.1.5.5 安装wget

在很多时候,需要通过wget下载资源

[root@9b291665f9af /]# yum -y install wget
3.1.5.6 更新安装vim,安装vim增强包
[root@5ec004281336 /]#yum -y install vim-enhanced
3.1.5.7 修改docker容器虚拟出来的Linux系统的用户名和密码
passwd root

然后按照提示进行密码的修改,密码改成123456

3.1.5.8 安装sshd

[root@b5926410fe60 /]# yum install passwd openssl openssh-server -y

启动sshd(这步骤可以跳过):

# /usr/sbin/sshd -D

这时报以下错误:

[root@ b5926410fe60 /]# /usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key

执行以下命令解决:

ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' 

然后,修改 /etc/ssh/sshd_config 配置信息:
为了让服务能够被远程工具连接,配置/etc/ssh/sshd_config中监听的端口和ip地址

vim /etc/ssh/sshd_config

Port 22 (这个可以不设置,默认22端口)
PermitRootLogin yes
PasswordAuthentication yes  (这里发现有两处,一处注释了,一处没有注释,这里不改)

vi /etc/ssh/sshd_config(或下面的命令)
sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

修改完后,重新启动sshd

[root@b5926410fe60 /]# /usr/sbin/sshd -D

3.1.5.9 解决docker容器时间与本地时间不一致

进入容器(也可以xshell远程进入)

docker exec -t -i b5926410fe60 /bin/bash    // b5926410fe60为容器id

在/usr/share/zoneinfo目录下找上海时区

cd  /usr/share/zoneinfo/Asia

3)复制上海时区到 /etc 重命名localtime文件

cp -i Shanghai /etc/localtime

完成后的效果:
在这里插入图片描述

程序运行过程中,docker容器中的时间比实际容器中的时间慢8小时,解决办法是在容器中执行:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

3.1.5.10 将当前容器保存为镜像

要注意的是,要在宿主机器上另外开启一个终端,然后在执行下面的命令,或者使用以下命令:
#退出,但不停止容器 (笔者电脑上执行,发现下面的命令不给力,建议另外开一个终端替代下面的快捷键)

Ctrl+P+Q

[root@bigdata2 ~]# docker ps -all
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
9a1e3ceb3768       centos:centos7.5.1804   "/bin/bash"         12 minutes ago      Up 12 minutes                           hopeful_hypatia

使用docker commit <CONTAINER ID> REPOSITORY
[root@bigdata2 ~]# docker commit 9a1e3ceb3768 centos7.5.1804.v0.1
sha256:bbb85bb5c0cdefb070162c9791cbec85942c4e25ac4714b19da060ecf91ab03e
[root@bigdata2 ~]# 

docker images查看是否有新的docker镜像
[root@bigdata1 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
centos/centos7.5.1804.v0.1   latest              1fef90b99396        33 seconds ago      358 MB
docker.io/centos             centos7.5.1804      76d6bc25b8a5        3 weeks ago         200 MB
[root@VM_0_8_centos ~]# 
[root@bigdata1 ~]#

4 docker网络创建

安装brctl命令包

yum install bridge-utils

删除旧的网络

[root@VM_0_8_centos test]# ifconfig docker0 down
[root@VM_0_8_centos test]# brctl delbr docker0

[root@VM_0_8_centos test]# service docker restart

由于腾讯云本身的网络ip地址是172.17.0.0/16段的,所有这里不能再配置成17段,这里我配置成了19段

docker network create --subnet=172.19.0.0/16 zjnet

如果创建过程中出现:

Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-3559d3701627 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))
解决办法是重启docker网络,然后再创建即可
[root@VM_0_8_centos ~]# service docker restart

5 Centos7基于lxcfs增强Docker隔离能力(docker free显示问题)

参考博文:https://blog.csdn.net/shida_csdn/article/details/79196258
在宿主操作系统为Centos7上安装lxcfs软件

wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpm yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm
  lxcfs-2.0.5-3.el7.centos.x86_64.rpm(下载地址:https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/)

将文件放到:/root目录下
lxcfs-2.0.5-3.el7.centos.x86_64.rpm
在这里插入图片描述
在这里插入图片描述

启动lxcfs

systemctl start lxcfs

或者直接执行启动命令:

lxcfs /var/lib/lxcfs &

配置容器启动参数
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw

-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw

 -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw

-v /var/lib/lxcfs/proc/stat:/proc/stat:rw

-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw

-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw

只要容器启动时映射了宿主机的这些文件,即可修正 free、top等命令的错误显示

6 用新镜像在宿主机上创建新的容器

--先查看有哪些镜像
[root@VM_0_8_centos lost+found]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
centos/centos7.5.1804.v0.1   latest              1fef90b99396        About an hour ago   358 MB
docker.io/centos             centos7.5.1804      76d6bc25b8a5        3 weeks ago   

以镜像centos/centos7.5.1804.v0.1进行安装
例:
在这里插入图片描述
其中命令为(下面使用了8个CPU核心):

docker run -itd -m 40g --memory-swap=40g --cpus=8 --cpuset-cpus="0,1,2,3,20,21,22,23" --restart=always --name bigdata2 -v /data/disk-three/lost+found/bigdata2:/data  -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw -v /var/lib/lxcfs/proc/stat:/proc/stat:rw -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw -v /etc/localtime:/etc/localtime:ro --privileged=true --net zjnet --ip 172.19.0.2 -p 10022:22 centos7.5.1804.v0.2:latest /usr/sbin/sshd -D

最后docker虚拟容器内存调整:

docker update -m 40g --memory-swap=40g bigdata2
docker update -m 30g --memory-swap=30g bigdata3
docker update -m 30g --memory-swap=30g bigdata4
docker update -m 30g --memory-swap=30g bigdata5
docker update -m 30g --memory-swap=30g bigdata6
docker update -m 8g --memory-swap=24g rbmq
docker update -m 8g --memory-swap=24g azkaban

7 docker 容器中设置中文语言包的问题

参考博文:https://blog.csdn.net/hnmpf/article/details/81478972

由于使用镜像安装的Centos7没有中文语言包,所以在查看日志等的时候发现是乱码,为了解决这个问题,需要安装中文语言包。
进入虚拟的Linux操作系统之后,采用”locale”查看,发现没有配置语言LANG
在这里插入图片描述
可以采用”locale -a”,查看系统语言包,会发现没有中文包

[root@9f117c915dea software]# locale -a
C
POSIX
en_AG
en_AG.utf8
en_AU
en_AU.iso88591
en_AU.utf8
en_BW
en_BW.iso88591
en_BW.utf8
en_CA
en_CA.iso88591
en_CA.utf8
en_DK
en_DK.iso88591
en_DK.utf8
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.iso88591
en_HK.utf8
en_IE
en_IE.iso88591
en_IE.iso885915@euro
en_IE.utf8
en_IE@euro
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ
en_NZ.iso88591
en_NZ.utf8
en_PH
en_PH.iso88591
en_PH.utf8
en_SG
en_SG.iso88591
en_SG.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.iso88591
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW
en_ZW.iso88591
en_ZW.utf8
[root@9f117c915dea software]

解决办法:

1、yum -y install kde-l10n-Chinese 安装语言包(针对centos 7)
2、yum -y reinstall glibc-common 更新gitbc 包(因为该镜像已阉割了该包的部分功能,所以需要更新)

3、localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 (设置系统语言包),执行完成之后,再查看语言,结果如下:
在这里插入图片描述
然后在/etc/profile中配置:

export LC_ALL=zh_CN.utf8

在这里插入图片描述
4、ENV LC_ALL zh_CN.UTF-8 通过设置环境变量的方式设置(可以采用直接修改/etc/locale.conf 文件来实现,不过需要reboot),这里通过修改/etc/locale.conf的方式实现,最终修改的结果为(经过上面步骤之后,经过验证,此步不要也可以了):

LANG="zh_CN.utf8"     (其中,原始的配置是:LANG="en_US.UTF-8")

由于要reboot,这里重启docker容器的方式进行实现(以下命令在宿主机器上执行)。

[root@VM_0_8_centos ~]# systemctl restart docker

8、mysql安装

腾讯云上运行mysql

docker run -itd -m 2g --memory-swap=2g --name mysql -p 13306:3306 -v /data/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=fasdfr343asfrs --net zjnet --ip 172.19.0.7 mysql:5.7 --character-set-server=utf8 --collation-server=utf8_general_ci

参数说明:

--name 容器名称
-p 端口映射
-v 配置文件映射
-e MYSQL_ROOT_PASSWORD   设置root密码
-d 守护进程模式运行
-character-set-server --collation-server 字符集设置

如果想调整mysql的内存

docker update -m 4g --memory-swap=4g mysql

8.1.1 修改root用户名、密码、授权远程登录

docker exec -it mysql bash 通过这种方式进入mysql这个容器

root@e05c4083b391:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> update user set authentication_string = PASSWORD('fasdfr343asfrs') where user = 'root';
中间略:
mysql> grant all privileges on *.* to 'root'@'%' identified by 'fasdfr343asfrs' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

至此,mysql安装成功

设置腾讯云安全组
在这里插入图片描述

9 整个过程重启hadoop环境的脚本

hadoop

cd $HADOOP_HOME 
sbin/stop-all.sh 
cd $SPARK_HOME
sbin/stop-all.sh 
cd $HBASE_HOME 
bin/stop-hbase.sh
cd $KYLIN_HOME
bin/kylin.sh stop
kill -9 `ps -ef | grep RunJar | grep -v grep | awk '{print $2}'`
kill -9 `ps -ef | grep YarnChild | grep -v grep | awk '{print $2}'`
kill -9 `ps -ef | grep metastore | grep -v grep | awk '{print $2}'`
kill -9 `ps -ef | grep hiveserver2 | grep -v grep | awk '{print $2}'`
kill -9 `ps -ef | grep JobHistoryServer | grep -v grep | awk '{print $2}'`



cd $HADOOP_HOME 
sbin/start-all.sh 
cd $SPARK_HOME
sbin/start-all.sh 
cd $HBASE_HOME 
bin/start-hbase.sh


cd $HIVE_HOME/bin
nohup hive --service metastore &
nohup  hive --service hiveserver2 &
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver

cd $KYLIN_HOME
bin/kylin.sh start

10 、给已经虚拟化好的容器添加端口映射,示例

iptables -t nat -A  DOCKER -p tcp --dport 10041 -j DNAT --to-destination 172.19.0.2:8088

iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.19.0.2 --destination 172.19.0.2 --dport 8088

iptables -A DOCKER -j ACCEPT -p tcp --destination 172.19.0.2 --dport 8088

猜你喜欢

转载自blog.csdn.net/toto1297488504/article/details/88657065
今日推荐