本文主要是介绍腾讯云下使用docker一步步虚拟出可运行的线上环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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_configPort 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.rpmlxcfs-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.shcd $HIVE_HOME/bin
nohup hive --service metastore &
nohup hive --service hiveserver2 &
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyservercd $KYLIN_HOME
bin/kylin.sh start
10 、给已经虚拟化好的容器添加端口映射,示例
iptables -t nat -A DOCKER -p tcp --dport 10041 -j DNAT --to-destination 172.19.0.2:8088iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.19.0.2 --destination 172.19.0.2 --dport 8088iptables -A DOCKER -j ACCEPT -p tcp --destination 172.19.0.2 --dport 8088
这篇关于腾讯云下使用docker一步步虚拟出可运行的线上环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!