1.使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)

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

1.1 Docker安装

1.1.1 支持的操作系统

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

1.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版本,可以进行安装。

1.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的镜像,并在容器内运行。

1.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系统的安装完成。

1.1.5 Docker卸载

[root@bigdata2 ~]# yum list installed | grep docker
docker.x86_64                        2:1.13.1-68.gitdded712.el7.centos @extras
docker-client.x86_64                 2:1.13.1-68.gitdded712.el7.centos @extras
docker-common.x86_64                 2:1.13.1-68.gitdded712.el7.centos @extras
[root@bigdata2 ~]# sudo yum -y remove docker.x86_64
[root@bigdata2 ~]# sudo yum -y docker-client.x86_64
[root@bigdata2 ~]# sudo yum -y remove docker-common.x86_64

卸载docker生成的网卡:

#ifconfig docker0 down
#brctl delbr docker0

docker0这个网桥是在启动Docker Daemon时创建的,因此,这种删除方法并不能根本上删除docker0,下次daemon启动(假设没有指定-b参数)时,又会自动创建docker0网桥。

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

1.1.6.1 运行一个centos7镜像

以下是/centos/”>https://hub.docker.com//centos/给出的方式,以下不是最终运行方式

docker run --rm -d -i -t centos:centos7.5.1804 /bin/bash

注意:要加上-d,如果不加,这个当退出的时候,发现没有docker镜像了。

1.1.6.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 ~]#

1.1.6.3 进入运行的Linux操作系统

第一步中使用的后台静默的方式运行,通过docker attach 访问该容器

[root@bigdata1 ~]# docker attach 46ba1c2535fc
[root@46ba1c2535fc /]#

1.1.6.4 ifconfig的安装

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

yum search ifconfig
yum install net-tools.x86_64

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

1.1.6.5 安装wget

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

[root@9b291665f9af /]# yum -y install wget

1.1.6.6 更新安装vim,安装vim增强包

[root@5ec004281336 /]#yum -y install vim-enhanced

1.1.6.7 修改docker容器虚拟出来的Linux系统的用户名和密码

passwd root

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

1.1.6.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

执行以下命令解决:

[root@b5926410fe60 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@b5926410fe60 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@b5926410fe60 /]# 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  (这里发现有两处,一处注释了,一处没有注释,这里不改)

修改完后,重新启动sshd

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

1.1.6.9 将当前容器保存为镜像

要注意的是,要在宿主机器上另外开启一个终端,然后在执行下面的命令,或者使用以下命令:

#退出,但不停止容器   (笔者电脑上执行,发现下面的命令不给力,建议另外开一个终端替代下面的快捷键)
Ctrl+P+Q[root@bigdata2 ~]# docker ps -all
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
5ec004281336        centos:centos7.5.1804   "/bin/bash"         12 minutes ago      Up 12 minutes                           hopeful_hypatia

使用docker commit REPOSITORY

[root@bigdata2 ~]# docker commit 5ec004281336 tuzq/centos7-ssh
sha256:bbb85bb5c0cdefb070162c9791cbec85942c4e25ac4714b19da060ecf91ab03e
[root@bigdata2 ~]# 

docker images查看是否有新的docker镜像

[root@bigdata1 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
tuzq/centos7-ssh      latest              953019243206        2 minutes ago       350 MB
sshd                    Dockerfile          38f1fe25a171        2 hours ago         399 MB
sshd                    dockerfile          38f1fe25a171        2 hours ago         399 MB
docker.io/centos        7.5.1804            fdf13fa91c6e        8 days ago          200 MB
[root@bigdata1 ~]#

1.1.6.10 在宿主机上基于新创建的镜像启动新的容器

(退出的时候看下面的注意说明)
–先删除之前的容器

[root@bigdata1 ~]# docker ps -all
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
9b291665f9af        centos:centos7.5.1804   "/bin/bash"         12 minutes ago      Up 12 minutes                           wonderful_cori
[root@bigdata1 ~]#hr:centos7 hr$ docker rm -f 9b291665f9af

–基于新镜像运行容器(下面的命令为测试命令,在创建好自己网络之后(1.1.5.1章节),可以直接跳到下面的1.1.6章节)

[root@bigdata1 ~]# docker run -d -p 10022:22 tuzq/centos7-ssh:latest /usr/sbin/sshd -D
d8fda5ddf55b1876e70f9cd82de888402538ebcbcadac46f3f5044f2e02b302a
[root@bigdata1 ~]# docker ps -all
CONTAINER ID        IMAGE                       COMMAND               CREATED             STATUS              PORTS                   NAMES
d8fda5ddf55b        tuzq/centos7-ssh:latest   "/usr/sbin/sshd -D"   6 seconds ago       Up 5 seconds        0.0.0.0:10022->22/tcp   eloquent_carson
--查看映射端口是否成功
[root@bigdata1 ~]# docker port d8fda5ddf55b
22/tcp -> 0.0.0.0:10022
[root@bigdata1 ~]#

注意事项:

#退出,但不停止容器
Ctrl+P+Q
#回到Docker下面,停止容器 (容器ID即:CONTAINER ID)
docker stop <容器ID>
#提交当前容器到镜像
docker commit <容器ID> <NAME/VERSION>
#启动新容器,并且进行端口映射(刚才提交的镜像id即:通过docker images看到的REPOSITORY: REPOSITORY 即:tuzq/centos7-ssh:latest)
docker run -itd -p 10022:22 <刚才提交的镜像ID>  /bin/bash

1.1.6.11 使用XShell连接到容器

从宿主机是非Linux操作系统,则需要通过docker-machine ip连接到容器
接下来就可以通过ssh进行访问了,访问方式:
xxx.xxx.xxx.140

连接: port 为10022

用户名:root
密码:123456

即:

接下来的用户名是:root,密码:123456

1.1.7 使用固定ip的方式创建Docker容器

1.1.7.1 Docker默认网络

参考博文地址:https://www.jb51.net/article/118396.htm

Docker安装后,默认会创建下面三种网络类型:

[root@bigdata1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
35fbf8bcb831        bridge              bridge              local
a5baf164f11f        host                host                local
43eba2f0486e        none                null                local
[root@bigdata1 ~]#

启动Docker的时候,用—network参数,可以指定网络类型,如:

docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash

bridge:桥接网络
默认情况下启动Docker容器,都是使用bridge,Docker安装时创建Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了。

none:无指定网络
使用–network=none,docker容器就不分配局域网的IP

host:主机网络
使用–network=host,此时,Docker容器的网络会附属在主机上,两者是互通的。

例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

1.1.7.2 创建自定义网络

步骤1:创建自定义网络
创建自定义网络,并指定网段:192.168.200.0/24 (注意这里使用的200段,不能和宿主机器所在的网段相同)

[root@bigdata1 ~]# docker network create --subnet=192.168.200.0/24 dockernet
985d0b115bc9593943be74942330025fd75fbcb87ddad6a154bb584cc4ff5a69
[root@bigdata1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
35fbf8bcb831        bridge              bridge              local
985d0b115bc9        dockernet           bridge              local
a5baf164f11f        host                host                local
43eba2f0486e        none                null                local

删除自定义网络的方式:

[root@bigdata1 ~]# docker network dockernet

1.1.7.3 使用指定ip启动容器

docker run -itd --name dockerOS143 --net dockernet --ip 192.168.200.143 -p 10022:22 tuzq/centos7-ssh:latest /usr/sbin/sshd -D

启动完成之后,进入容器中查看ip信息(下面的网络的ip地址应该是192.168.200.143,不是xxx.xxx.xxx.143,配置修改之后,图没修改)

1.1.8 为系统指定内存和交换空间,并设置不被宿主机器杀死

关于虚拟容器的内存参数设置参考:https://blog.csdn.net/csdn_duomaomao/article/details/78567859

上面的问题解决之后,发现就可以继续执行(140机器上执行下面的命令,测试发现使用1G的运行时很卡):

docker run -itd --name dockerOS143 --net dockernet --ip 192.168.200.143 -p 10022:22 -m 1G --memory-swap=1G --oom-kill-disable tuzq/centos7-ssh:latest /usr/sbin/sshd -D

进入Linux系统,然后查看内存情况:

注意141机器上执行下面的命令(测试发现使用1G的运行时很卡):

docker run -itd --name dockerOS145 --net dockernet --ip 192.168.200.145 -p 10022:22 -m 1G --memory-swap=1G --oom-kill-disable tuzq/centos7-ssh:latest /usr/sbin/sshd -D

使用xshell 工具访问:



进入虚拟出的Linux服务器上之后,效果如下:

另外,也可以

1.1.9 常见错误

1.1.9.1 错误一

如果在运行过程发现类似如下问题:

/usr/bin/docker-current: Error response from daemon: Conflict. The container name "/dockerOS143" is already in use by container 987e1127d5ef543f459807a4b33f84144bcfec9bca97d218f98af870ade3ca47. You have to remove (or rename) that container to be able to reuse that name..
See '/usr/bin/docker-current run --help'.
[root@bigdata1 ~]#

解决办法是:

docker rm (镜像ID)

查看镜像ID的方式如下:

[root@bigdata1 ~]# docker ps -all
CONTAINER ID        IMAGE                       COMMAND               CREATED             STATUS                      PORTS               NAMES
987e1127d5ef        herong/centos7-ssh:latest   "/usr/sbin/sshd -D"   38 minutes ago      Exited (0) 14 minutes ago                       dockerOS143
[root@bigdata1 ~]# l

即执行:

[root@bigdata1 ~]# docker rm 987e1127d5ef
987e1127d5ef

再次执行以下命令,若发现还有未关闭的镜像,再次删除相关镜像:

[root@bigdata1 ~]# docker ps –all

1.1.9.2 错误二

如果出现类似:

[root@bigdata2 ~]# docker run -itd --name dockerOS --net dockernet --ip 192.168.200.145 -p 10022:22 tuzq/centos7-ssh:latest /usr/sbin/sshd -D
43f876ec1f3f67478d4a7757c2e996111f9987b8566b7f597aab00aaede3ed7a
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint dockerOS (a449051624b7701e619e3c3cb996e3c84190df984dce09cc7a4a119d6a43d775):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10022 -j DNAT --to-destination xxx.xxx.xxx.145:22 ! -i br-3989d73e540e: iptables: No chain/target/match by that name.

解决办法:

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
service docker restart

1.1.10 关于删除本地docker镜像

https://blog.csdn.net/hubanbei2010/article/details/58135234

1.1.11 141示例容器最终启动方式

在141容器机器上的145容器中,最后安装了nginx,imply。

这个容器重新被打成了镜像:

其中cfc4762785b1为145容器这个容器的id
docker commit cfc4762785b1 foo/live

最终启动:

docker run -itd --name dockerOS --net dockernet --ip 192.168.200.145 -p 29095:9095 -p 20080:80 -p 23306:3306 -p 10022:22 foo/live:latest /usr/sbin/sshd -D

说明:上面的29095、20080、23306、10022都是宿主机器xxx.xxx.xxx.141上的端口号,分别映射到192.168.200.145上的9055、80、3306、22端口。

页面访问效果:

注意:访问的时候使用宿主机器的ip:宿主端口号

使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)相关推荐

  1. mysql数据库如何克隆好友怎么弄_怎么把mysql一个数据库从一台机器上 拷贝到另外一台...

    诶?这项技术又是什么玩意(What)? 这项技术为什么会存在?我们已经有那么多解决方案(Method)了,我们为什么要用它(Why)? 如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的 ...

  2. 半个月可以写出一个电脑操作系统吗?

    作为一名计算机专业的同学回答这个问题:可以个锤子.理由如下:windows 7操作系统,据微软官方给出的数据,就有超过5000万行代码,并且这套操作系统是微软的平均约40人的25个研发小组历时三年研发 ...

  3. 101.编译是如何把一个机器的语言拿到另一台机器语言机器上执行的?

    计算机系统五层层次结构: 微程序机器------传统机器-----操作系统机器-----汇编机器------高级语言机器 代码----高级语言 编译 把高级语言----汇编语言

  4. docker虚拟化技术文档(自己总结最全版本)

    目录 1 使用Docker虚拟化出一个Centos7操作系统(140.141机器上执行) 2 1.1 Docker安装 3 1.1.1 支持的操作系统 3 1.1.2 前提条件 3 1.1.3 使用y ...

  5. docker 部署了一个网站玩

    docker 部署了一个网站玩,结果网页上有很多乱码(数据库查出来的部分),也有正常显示的中文(静态页面部分). 就研究了很久服务器的编码问题.docker 镜像的编码问题,搞了很久最终发现是数据库编 ...

  6. 企业级Docker虚拟化平台实战

    企业级Docker虚拟化平台实战 1.虚拟化技术概述及简介 通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件 ...

  7. 实战Docker虚拟化技术 安装negix tomcat 企业案例 等

    Docker入门简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化. 容器是完全使用沙箱机制 ...

  8. Docker虚拟化解析

    开发人员利用 Docker 可以消除协作编码时"在我的机器上可正常工作"的问题.开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境不过,即便如此,仍然常常发生部署失败的 ...

  9. 以Mesos和Docker为核心的云操作系统

    11月18日,北京数人云COO谢乐冰老师在DBA+社群中间件用户组进行了一次主题为"以Mesos和Docker为核心的云操作系统"的线上分享.小编特别整理出其中精华内容,供大家学习 ...

最新文章

  1. 配置网络(静态ip)
  2. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
  3. 在ubuntu14.04中安装搜狗输入法
  4. vue 实例化几种方式_Vue双向数据绑定
  5. 第4章 字符串和格式化输入/输出
  6. Linux环境下搭建Java Web测试环境的具体步骤
  7. Selenium2学习笔记——自动化环境搭建
  8. SAS的安装过程和遇到的问题(提供安装包)
  9. NOPIExcel读写扩展
  10. hadoop面试题汇总
  11. Java中的封装、继承、多态理解
  12. xslx-style导出,表头样式表格样式,指定条件
  13. armbian清理_N1刷入Armbian后保护emmc – 禁止varlog日志
  14. #书籍《量子力学》读后感
  15. 发外链的平台有哪些,分享六个免费发外链的平台
  16. java 输出乘法口诀第一列_java输出乘法口诀表
  17. php 字体好看点,字丑不用怕,带你轻松画出好看字体!
  18. 买不起书的来下电子书吧
  19. import上一级目录的模块(Python)
  20. 【学习笔记】汇编:关于CMP的使用实例

热门文章

  1. Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)
  2. opencv学习笔记17:梯度运算之laplacian算子及其应用
  3. VTK:标记关键点用法实战
  4. JavaScript实现combine Without Repetitions不重复地结合算法(附完整源码)
  5. boost::intrusive::slist用法的测试程序
  6. boost::log模块实现将日志记录初始化到远程 syslog 服务器
  7. boost::gregorian模块实现使用周期来计算日期信息的测试程序
  8. GDCM:gdcm::File的测试程序
  9. GDCM:png文件转为dcm文件的测试程序
  10. boost::container实现多态双端队列的测试程序