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

2024-04-19 17:38

本文主要是介绍腾讯云下使用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一步步虚拟出可运行的线上环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918186

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装