使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)
1.使用Docker虛擬化出一個(gè)Centos7操作系統(tǒng)(140、141機(jī)器上執(zhí)行)
Docker官網(wǎng):https://docs.docker.com/
Docker文檔:https://docs.docker.com/engine/reference/commandline/network_rm/
1.1 Docker安裝
1.1.1 支持的操作系統(tǒng)
Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本
1.1.2 前提條件
目前,CentOS 僅發(fā)行版本中的內(nèi)核支持 Docker。
Docker 運(yùn)行在 CentOS 7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 3.10 以上。
Docker 運(yùn)行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 2.6.32-431 或者更高版本。
Docker要求CentOS系統(tǒng)的內(nèi)核版本高于3.10,查看CentOS版本是否支持Docker.
通過uname –r命令查看你當(dāng)前的內(nèi)核版本
1.1.3 使用yum安裝(CentOS7下)
安裝Docker
Docker軟件包和依賴包已經(jīng)包含在默認(rèn)的CentOS-Extras軟件源里,安裝命令如下:
測(cè)試運(yùn)行hello-world
[root@runoob ~]#docker run hello-world由于本地沒有hello-world這個(gè)鏡像,所以會(huì)下載一個(gè)hello-world的鏡像,并在容器內(nèi)運(yùn)行。
1.1.4 使用腳本安裝Docker(Centos7下)
1.使用sudo或root權(quán)限登錄Centos.
2.確保yum包更新到最新
3.執(zhí)行Docker安裝腳本
$ curl -fsSL https://get.docker.com/ | sh執(zhí)行這個(gè)腳本會(huì)添加docker.repo源并安裝Docker.
4.啟動(dòng)Docker進(jìn)程。
5.驗(yàn)證docker是否安裝成功并在容器中執(zhí)行一個(gè)測(cè)試的鏡像。
$ sudo docker run hello-world docker ps到此,docker在CentOS系統(tǒng)的安裝完成。
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生成的網(wǎng)卡:
#ifconfig docker0 down #brctl delbr docker0docker0這個(gè)網(wǎng)橋是在啟動(dòng)Docker Daemon時(shí)創(chuàng)建的,因此,這種刪除方法并不能根本上刪除docker0,下次daemon啟動(dòng)(假設(shè)沒有指定-b參數(shù))時(shí),又會(huì)自動(dòng)創(chuàng)建docker0網(wǎng)橋。
1.1.6 使用Centos7.5.1804 docker鏡像虛擬一個(gè)操作系統(tǒng)
1.1.6.1 運(yùn)行一個(gè)centos7鏡像
以下是/centos/”>https://hub.docker.com//centos/給出的方式,以下不是最終運(yùn)行方式
docker run --rm -d -i -t centos:centos7.5.1804 /bin/bash注意:要加上-d,如果不加,這個(gè)當(dāng)退出的時(shí)候,發(fā)現(xiàn)沒有docker鏡像了。
1.1.6.2 查看Linux下運(yùn)行了哪些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 進(jìn)入運(yùn)行的Linux操作系統(tǒng)
第一步中使用的后臺(tái)靜默的方式運(yùn)行,通過docker attach 訪問該容器
[root@bigdata1 ~]# docker attach 46ba1c2535fc [root@46ba1c2535fc /]#1.1.6.4 ifconfig的安裝
進(jìn)入Centos之后,發(fā)現(xiàn)沒有ifconfig,接下來配置ifconfig
yum search ifconfig yum install net-tools.x86_64上面運(yùn)行完之后,可以執(zhí)行ifconfig進(jìn)行查看ip了
1.1.6.5 安裝wget
在很多時(shí)候,需要通過wget下載資源
[root@9b291665f9af /]# yum -y install wget1.1.6.6 更新安裝vim,安裝vim增強(qiáng)包
[root@5ec004281336 /]#yum -y install vim-enhanced1.1.6.7 修改docker容器虛擬出來的Linux系統(tǒng)的用戶名和密碼
passwd root然后按照提示進(jìn)行密碼的修改,密碼改成123456
1.1.6.8 安裝sshd
[root@b5926410fe60 /]# yum install passwd openssl openssh-server -y啟動(dòng)sshd(這步驟可以跳過):
# /usr/sbin/sshd -D這時(shí)報(bào)以下錯(cuò)誤:
[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執(zhí)行以下命令解決:
[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 配置信息:
為了讓服務(wù)能夠被遠(yuǎn)程工具連接,配置/etc/ssh/sshd_config中監(jiān)聽的端口和ip地址
Port 22 (這個(gè)可以不設(shè)置,默認(rèn)22端口)
PermitRootLogin yes PasswordAuthentication yes (這里發(fā)現(xiàn)有兩處,一處注釋了,一處沒有注釋,這里不改)修改完后,重新啟動(dòng)sshd
[root@b5926410fe60 /]# /usr/sbin/sshd -D1.1.6.9 將當(dāng)前容器保存為鏡像
要注意的是,要在宿主機(jī)器上另外開啟一個(gè)終端,然后在執(zhí)行下面的命令,或者使用以下命令:
#退出,但不停止容器 (筆者電腦上執(zhí)行,發(fā)現(xiàn)下面的命令不給力,建議另外開一個(gè)終端替代下面的快捷鍵) 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 在宿主機(jī)上基于新創(chuàng)建的鏡像啟動(dòng)新的容器
(退出的時(shí)候看下面的注意說明)
–先刪除之前的容器
–基于新鏡像運(yùn)行容器(下面的命令為測(cè)試命令,在創(chuàng)建好自己網(wǎng)絡(luò)之后(1.1.5.1章節(jié)),可以直接跳到下面的1.1.6章節(jié))
[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 ~]#注意事項(xiàng):
#退出,但不停止容器 Ctrl+P+Q #回到Docker下面,停止容器 (容器ID即:CONTAINER ID) docker stop <容器ID> #提交當(dāng)前容器到鏡像 docker commit <容器ID> <NAME/VERSION> #啟動(dòng)新容器,并且進(jìn)行端口映射(剛才提交的鏡像id即:通過docker images看到的REPOSITORY: REPOSITORY 即:tuzq/centos7-ssh:latest) docker run -itd -p 10022:22 <剛才提交的鏡像ID> /bin/bash1.1.6.11 使用XShell連接到容器
從宿主機(jī)是非Linux操作系統(tǒng),則需要通過docker-machine ip連接到容器
接下來就可以通過ssh進(jìn)行訪問了,訪問方式:
xxx.xxx.xxx.140
連接: port 為10022
用戶名:root
密碼:123456
即:
接下來的用戶名是:root,密碼:123456
1.1.7 使用固定ip的方式創(chuàng)建Docker容器
1.1.7.1 Docker默認(rèn)網(wǎng)絡(luò)
參考博文地址:https://www.jb51.net/article/118396.htm
Docker安裝后,默認(rèn)會(huì)創(chuàng)建下面三種網(wǎng)絡(luò)類型:
[root@bigdata1 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 35fbf8bcb831 bridge bridge local a5baf164f11f host host local 43eba2f0486e none null local [root@bigdata1 ~]#啟動(dòng)Docker的時(shí)候,用—network參數(shù),可以指定網(wǎng)絡(luò)類型,如:
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bashbridge:橋接網(wǎng)絡(luò)
默認(rèn)情況下啟動(dòng)Docker容器,都是使用bridge,Docker安裝時(shí)創(chuàng)建Docker容器重啟時(shí),會(huì)按照順序獲取對(duì)應(yīng)的IP地址,這個(gè)就導(dǎo)致重啟下,Docker的IP地址就變了。
none:無指定網(wǎng)絡(luò)
使用–network=none,docker容器就不分配局域網(wǎng)的IP
host:主機(jī)網(wǎng)絡(luò)
使用–network=host,此時(shí),Docker容器的網(wǎng)絡(luò)會(huì)附屬在主機(jī)上,兩者是互通的。
例如,在容器中運(yùn)行一個(gè)Web服務(wù),監(jiān)聽8080端口,則主機(jī)的8080端口就會(huì)自動(dòng)映射到容器中。
1.1.7.2 創(chuàng)建自定義網(wǎng)絡(luò)
步驟1:創(chuàng)建自定義網(wǎng)絡(luò)
創(chuàng)建自定義網(wǎng)絡(luò),并指定網(wǎng)段:192.168.200.0/24 (注意這里使用的200段,不能和宿主機(jī)器所在的網(wǎng)段相同)
刪除自定義網(wǎng)絡(luò)的方式:
[root@bigdata1 ~]# docker network dockernet1.1.7.3 使用指定ip啟動(dòng)容器
docker run -itd --name dockerOS143 --net dockernet --ip 192.168.200.143 -p 10022:22 tuzq/centos7-ssh:latest /usr/sbin/sshd -D啟動(dòng)完成之后,進(jìn)入容器中查看ip信息(下面的網(wǎng)絡(luò)的ip地址應(yīng)該是192.168.200.143,不是xxx.xxx.xxx.143,配置修改之后,圖沒修改)
1.1.8 為系統(tǒng)指定內(nèi)存和交換空間,并設(shè)置不被宿主機(jī)器殺死
關(guān)于虛擬容器的內(nèi)存參數(shù)設(shè)置參考:https://blog.csdn.net/csdn_duomaomao/article/details/78567859
上面的問題解決之后,發(fā)現(xiàn)就可以繼續(xù)執(zhí)行(140機(jī)器上執(zhí)行下面的命令,測(cè)試發(fā)現(xiàn)使用1G的運(yùn)行時(shí)很卡):
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進(jìn)入Linux系統(tǒng),然后查看內(nèi)存情況:
注意141機(jī)器上執(zhí)行下面的命令(測(cè)試發(fā)現(xiàn)使用1G的運(yùn)行時(shí)很卡):
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 工具訪問:
進(jìn)入虛擬出的Linux服務(wù)器上之后,效果如下:
另外,也可以
1.1.9 常見錯(cuò)誤
1.1.9.1 錯(cuò)誤一
如果在運(yùn)行過程發(fā)現(xiàn)類似如下問題:
/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即執(zhí)行:
[root@bigdata1 ~]# docker rm 987e1127d5ef 987e1127d5ef再次執(zhí)行以下命令,若發(fā)現(xiàn)還有未關(guān)閉的鏡像,再次刪除相關(guān)鏡像:
[root@bigdata1 ~]# docker ps –all1.1.9.2 錯(cuò)誤二
如果出現(xiàn)類似:
[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 restart1.1.10 關(guān)于刪除本地docker鏡像
https://blog.csdn.net/hubanbei2010/article/details/581352341.1.11 141示例容器最終啟動(dòng)方式
在141容器機(jī)器上的145容器中,最后安裝了nginx,imply。
這個(gè)容器重新被打成了鏡像:
其中cfc4762785b1為145容器這個(gè)容器的id docker commit cfc4762785b1 foo/live最終啟動(dòng):
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都是宿主機(jī)器xxx.xxx.xxx.141上的端口號(hào),分別映射到192.168.200.145上的9055、80、3306、22端口。
頁面訪問效果:
注意:訪問的時(shí)候使用宿主機(jī)器的ip:宿主端口號(hào)
總結(jié)
以上是生活随笔為你收集整理的使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑装系统怎么u盘装系统 用U盘安装电脑
- 下一篇: Apache Ranger、业务背景、现