docker虛擬化技術文檔(自己總結最全版本)

目錄

1 使用Docker虛擬化出一個Centos7操作系統(140、141機器上執行) 2
1.1 Docker安裝 3
1.1.1 支持的操作系統 3
1.1.2 前提條件 3
1.1.3 使用yum安裝(CentOS7下) 3
1.1.4 使用腳本安裝Docker(Centos7下) 3
1.1.5 Docker卸載 4
1.1.6 使用Centos7.5.1804 docker鏡像虛擬一個操作系統 5
1.1.2 使用固定ip的方式創建Docker容器 13
1.1.3 爲系統指定內存和交換空間,並設置不被宿主機器殺死 15
1.1.4 常見錯誤 18
1.1.5 關於刪除本地docker鏡像 19
1.1.6 141示例容器最終啓動方式 20
2 162機器docker鏡像安裝 20
2.1 Docker安裝 20
2.1.1 支持的操作系統 20
2.1.2 前提條件 21
2.1.3 使用yum安裝(CentOS7下) 21
2.1.4 使用腳本安裝Docker(Centos7下) 21
2.1.5 創建docker子網 22
2.2 最終啓動: 25
3 docker常見命令 25
4 docker鏡像倉庫搭建 26
5 數據持久化 26
6 安裝內存壓測工具stress 26
7 docker內存限制 27
8 docker限制容器可用的CPU 27
9 Docker集羣管理工具kubernetes搭建 30
10 Centos7基於lxcfs增強Docker隔離能力(docker free顯示問題) 30
11 修改5臺機器的hosts和hostname 32
12 對運行中的Docker容器添加端口映射 32

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
chkconfig docker on

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 remove docker-client.x86_64
[root@bigdata2 ~]# sudo yum -y remove docker-common.x86_64

卸載docker生成的網卡:

[root@youx-pub registry]# ifconfig docker0 downic
[root@youx-pub registry]# ifconfig br-29857dc941f6 down

[root@youx-pub registry]# brctl delbr docker0
[root@youx-pub registry]# brctl delbr br-29857dc941f6 

docker0這個網橋是在啓動Docker Daemon時創建的,因此,這種刪除方法並不能根本上刪除docker0,下次daemon啓動(假設沒有指定-b參數)時,又會自動創建docker0網橋。

刪除docker相關的文件:
[root@youx-pub registry]# find / -name docker
/run/docker
/etc/selinux/targeted/active/modules/disabled/docker
/etc/docker
/var/lib/docker
/var/lib/docker/overlay2/0bfbb9a9704620e83e3f2b700288f15dcd3aec87bce09c9994f582a57c062369/diff/etc/docker
[root@youx-pub registry]# rm -rf /run/docker/
[root@youx-pub registry]# rm -rf /etc/selinux/targeted/active/modules/disabled/docker
[root@youx-pub registry]# rm -rf /etc/docker/
[root@youx-pub registry]# rm -rf /var/lib/docker
[root@youx-pub registry]# rm -rf /docker

1.1.6 使用Centos7.5.1804 docker鏡像虛擬一個操作系統

1.1.6.1 運行一個centos7鏡像

以下是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 <CONTAINER ID >訪問該容器
[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 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
1.1.6.10 解決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
1.1.6.11 將當前容器保存爲鏡像

要注意的是,要在宿主機器上另外開啓一個終端,然後在執行下面的命令,或者使用以下命令:
#退出,但不停止容器 (筆者電腦上執行,發現下面的命令不給力,建議另外開一個終端替代下面的快捷鍵)

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 <CONTAINER ID> 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.12 在宿主機上基於新創建的鏡像啓動新的容器
(退出的時候看下面的注意說明)
--先刪除之前的容器
[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

--基於新鏡像運行容器(下面的命令爲測試命令,在創建好自己網絡之後(30.1.5.1章節),可以直接跳到下面的30.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.1.4 使用XShell連接到容器

從宿主機是非Linux操作系統,則需要通過docker-machine ip連接到容器
接下來就可以通過ssh進行訪問了,訪問方式:
192.168.18.140

連接: port 爲10022

用戶名:root
密碼:123456

即:
在這裏插入圖片描述

接下來的用戶名是:root,密碼:123456

1.1.2 使用固定ip的方式創建Docker容器

1.1.2.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.2.2 創建自定義網絡

步驟1:創建自定義網絡
創建自定義網絡,並指定網段:192.168.200.0/24 (注意這裏使用的200段,不能和宿主機器所在的網段相同)
注意:162機器docker的這個的網段是:192.168.18.100.0

[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 rm dockernet
1.1.2.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,不是192.168.18.143,配置修改之後,圖沒修改)
在這裏插入圖片描述

1.1.3 爲系統指定內存和交換空間,並設置不被宿主機器殺死

關於虛擬容器的內存參數設置參考: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.4 常見錯誤

1.1.4.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.4.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 192.168.18.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.5 關於刪除本地docker鏡像

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

1.1.6 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都是宿主機器192.168.18.141上的端口號,分別映射到192.168.200.145上的9055、80、3306、22端口。

頁面訪問效果:
在這裏插入圖片描述
注意:訪問的時候使用宿主機器的ip:宿主端口號

2 162機器docker鏡像安裝

2.1 Docker安裝

2.1.1 支持的操作系統

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

2.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版本,可以進行安裝。

2.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的鏡像,並在容器內運行。

2.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系統的安裝完成。

2.1.5 創建docker子網

[root@youx-pub ~]# docker network create --subnet=192.168.100.0/24 dockernet

[root@youx-pub ~]# docker run -itd --name dockerOS --net dockernet --ip 192.168.100.100 -p 29095:9095 -p 20080:80 -p 23306:3306 -p 10022:22 centos:centos7.5.1804 /bin/bash

[root@youx-pub ~]# docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                                                                                            NAMES
2b0f4e86048d        centos:centos7.5.1804   "/bin/bash"         15 seconds ago      Up 13 seconds       0.0.0.0:10022->22/tcp, 0.0.0.0:20080->80/tcp, 0.0.0.0:23306->3306/tcp, 0.0.0.0:29095->9095/tcp   dockerOS
[root@youx-pub ~]# docker attach 2b0f4e86048d
2.1.5.1 ifconfig的安裝

進入Centos之後,發現沒有ifconfig,接下來配置ifconfig

[root@2b0f4e86048d /]# yum search ifconfig
[root@2b0f4e86048d /]# yum install net-tools.x86_64

上面運行完之後,可以執行ifconfig進行查看ip了

2.1.5.2 安裝wget

在很多時候,需要通過wget下載資源

[root@2b0f4e86048d /]# yum -y install wget
2.1.5.3 更新安裝vim,安裝vim增強包
[root@2b0f4e86048d /]# yum -y install vim-enhanced
2.1.5.4 修改docker容器虛擬出來的Linux系統的用戶名和密碼

passwd root

然後按照提示進行密碼的修改,密碼改成123456

2.1.5.5 安裝sshd
[root@2b0f4e86048d /]# yum install passwd openssl openssh-server -y

啓動sshd(這步驟可以跳過):

# /usr/sbin/sshd -D

這時報以下錯誤:

[root@2b0f4e86048d /]# /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@2b0f4e86048d /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
[root@2b0f4e86048d /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@2b0f4e86048d /]# 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@2b0f4e86048d /]# /usr/sbin/sshd -D
2.1.5.6 將當前容器保存爲鏡像

要注意的是,要在宿主機器上另外開啓一個終端,然後在執行下面的命令,或者使用以下命令:
#退出,但不停止容器 (筆者電腦上執行,發現下面的命令不給力,建議另外開一個終端替代下面的快捷鍵)

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@youx-pub ~]# docker commit 2b0f4e86048d youx-v1.0/centos7.5.1804
> sha256:d41832c8bf0bfe4e9d050ffa96a6892ce3ed53e14e04c8740b0bb7f55b13a24b
> [root@bigdata2 ~]#

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

[root@youx-pub ~]#docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
youx/centos7.5.1804   latest              d41832c8bf0b        4 seconds ago       353 MB
docker.io/centos      centos7.5.1804      fdf13fa91c6e        4 weeks ago         200 MB
[root@youx-pub ~]#

刪除舊的docker鏡像,然後啓動新的鏡像。

docker run -itd --name dockerOS --net dockernet --ip 192.168.100.100 -p 19095:9095 -p 10080:80 -p 13306:3306 -p 10022:22 youx/centos7.5.1804:latest /usr/sbin/sshd -D

使用下面的方式連接虛擬容器:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.2 最終啓動:

docker run -itd --name dockerOS --net dockernet --ip 192.168.100.145 -p 29095:9095 -p 10080:80 -p 13306:3306 -p 10022:22 localhost:5000/centos7:1.0 /usr/sbin/sshd -D

3 docker常見命令

docker start < CONTAINER ID>
docker stop < CONTAINER ID>
docker restart < CONTAINER ID>

更新運行着的容器的內存

docker update -m 2048m <name>

4 docker鏡像倉庫搭建

參考:https://blog.csdn.net/tototuzuoquan/article/details/82025954

5 數據持久化

案例:

docker run -itd --restart=always --name bigdata1 -p 20080:80 -p 20022:22 -v /home/docker/volum/node-pub2:/data --privileged=true centos7:v0.2 /usr/sbin/sshd -D

說明:

/home/docker/volum/node-pub2   :爲宿主機器上的目錄
/data                          :爲容器上的目錄
--privileged=true                 :目的是爲了能夠在容器中訪問/data下的內容

運行起來之後,在宿主機器上的/home/docker/volum/node-pub2 和 在容器中的/data目錄中產生新數據之後,兩者都可以互相看到。

6 安裝內存壓測工具stress

安裝命令:

yum install -y epel-release
yum install -y stress

下面命令會創建一個線程並通過malloc函數分配內存(以下命令在容器中查看):

stress --vm 1 --vm-bytes 500M

再如:

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

在容器所在的宿主機器上查看實際狀態:

docker stats

結果類似如下:
在這裏插入圖片描述

7 docker內存限制

docker run -itd -m 1024M --memory-swap=1024M --restart=always --name bigdata1 -p 20080:80 -p 20022:22 -v /home/docker/volum/node-pub2:/data --privileged=true centos7:v0.2 /usr/sbin/sshd -D

說明:
A:docker run命令中通過-m選項限制使用的內存上限爲300M.同時設置memory-swap值爲-1,它表示容器程序使用內存的受限,而可以使用的swap空間使用不受限制(宿主機有多少swap容器就可以使用多少)

2、可以限制使用的swap
要注意的是–memory-swap是必須要與–memory 一起使用的。
正常情況下,–memory-swap 的值包含容器可用內存和可用swap。所以 --memory=“300m” --memory-swap=“1g” 的含義爲:
容器可以使用 300M 的物理內存,並且可以使用 700M(1G -300M) 的 swap。–memory-swap 居然是容器可以使用的物理內存和可以使用的 swap 之和!
把 --memory-swap 設置爲 0 和不設置是一樣的,此時如果設置了 --memory,容器可以使用的 swap 大小爲 --memory 值的兩倍。
如果 --memory-swap 的值和 --memory 相同,則容器不能使用 swap。

8 docker限制容器可用的CPU

參考博文:https://m.jb51.net/article/135395.htm

通過下面的命令創建容器,–cpus=1表示容器最多可以使用主機上兩個CPU:

docker run -itd -m 1024M --memory-swap=1024M --cpus=1 --restart=always --name bigdata1 -p 20080:80 -p 20022:22 -v /home/docker/volum/node-pub2:/data --privileged=true centos7:v0.2 /usr/sbin/sshd -D
然後由 stress 命令創建四個繁忙的進程消耗 CPU 資源:
stress -c 2

我們先來看看 docker stats 命令的輸出:
在這裏插入圖片描述
從上面看出,其cpu使用情況是100%、

在容器內部查看現象是:
在這裏插入圖片描述
在宿主機器上查看機器的CPU使用情況:
在這裏插入圖片描述
上面四個線程加起來爲100%。

停止掉容器,然後開始使用指定數量的CPU

[root@youx-pub ~]# docker rm -f f68ae32581e6

指定固定的 CPU
查看數組機器上的CPU數量(top,然後再按數字1)
在這裏插入圖片描述
通過 --cpus 選項我們無法讓容器始終在一個或某幾個 CPU 上運行,但是通過 --cpuset-cpus 選項卻可以做到!這是非常有意義的,因爲現在的多核系統中每個核心都有自己的緩存,如果頻繁的調度進程在不同的核心上執行勢必會帶來緩存失效等開銷。下面我們就演示如何設置容器使用固定的 CPU,下面的命令爲容器設置了 --cpuset-cpus 選項,指定運行容器的 CPU 編號爲 1:

docker run -itd -m 1024M --memory-swap=1024M --cpus=1 --cpuset-cpus="1" --restart=always --name bigdata1 -p 20080:80 -p 20022:22 -v /home/docker/volum/node-pub2:/data --privileged=true centos7:v0.2 /usr/sbin/sshd -D

然後在宿主機器上安裝stress,然後執行以下命令:、

[root@753d19cb5dcb ~]# stress -c 4

查看宿主機器上的CPU使用狀況
在這裏插入圖片描述

CPU不止是使用一個CPU,可以使用多個CPU,例如如下配置:

[root@youx-pub ~]# docker run -itd -m 1024M --memory-swap=1024M --cpus=1.5 --cpuset-cpus="1,3" --restart=always --name bigdata1 -p 20080:80 -p 20022:22 -v /home/docker/volum/node-pub2:/data --privileged=true centos7:v0.2 /usr/sbin/sshd -D

上面的表示使用第二,第四個CPU,使用CPU核心數量是1.5個。
然後再在。
在這裏插入圖片描述

9 Docker集羣管理工具kubernetes搭建

參考博文:https://blog.csdn.net/jay763836801/article/details/52648280

10 Centos7基於lxcfs增強Docker隔離能力(docker free顯示問題)

參考博文:https://blog.csdn.net/shida_csdn/article/details/79196258
在宿主操作系統爲Centos7上安裝lxcfs軟件

yum install 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等命令的錯誤顯示

示例:

docker run -itd -m 20g --memory-swap=20g --cpus=4 --cpuset-cpus="16,17,18,19" --restart=always --name bigdata6 -v /data/disk-two/lost+found/bigdata6:/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 --privileged=true --net zjnet --ip xxx.xxx.xxx.xxx -p xxxx:22 centos7.5.1804.v0.2:latest /usr/sbin/sshd -D

11 修改5臺機器的hosts和hostname

分別類似如下:

vim /etc/hosts
172.19.0.2      bigdata2
172.19.0.3      bigdata3
172.19.0.4      bigdata4
172.19.0.5      bigdata5
172.19.0.6      bigdata6

修改各自hostname

vim /etc/hostname

bigdata2     (依次類推,配置後面各臺機器)

修改完成之後,發現宿主機器上有如下變化:
在這裏插入圖片描述

12 對運行中的Docker容器添加端口映射

原文:https://blog.csdn.net/weixin_36343850/article/details/79954174
解決方案:

iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT} -j DNAT --to-destination ${CONTAINERIP}:${YOURPORT}

iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source ${CONTAINERIP} --destination ${CONTAINERIP} --dport ${YOURPORT}

iptables -A DOCKER -j ACCEPT -p tcp --destination ${CONTAINERIP} --dport ${YOURPORT}

總共有3條命令,把他們運行在安裝了docker的宿主機上。其中就修改兩個參數:
${CONTAINERIP} 就是對應容器的ip地址,比如我的容器ip地址是 172.19.0.2 ,(容器的IP可以通過如下方式查看:a.在容器中:ip addr;b.在宿主機中: docker inspect 容器名 |grep IPAddress )所以我就把上述的參數換成我的IP地址。
${YOURPORT} 就是要映射出來的端口,我配置的是一個hadoop平臺,其端口是8088

最終我的命令是:

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

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

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

騰訊雲上安全組中添加規則:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章