天天看點

Docker之漫漫人生路Docker嘗鮮Docker安裝

Docker嘗鮮

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作 虛拟化。容器是完全使用 沙箱 機制,互相之間不會有任何接口。

1.Docker在開發和運維過程中,具有如下幾個方面的優勢

具體說來,Docker在開發和運維過程中,具有如下幾個方面的優勢。

更快速的傳遞和部署。使用Docker,開發人員可以使用鏡像來快速建構一套标準的開發環境;比如在項目開發過程中我會先用Docker将代碼部署到本地進行測試驗證。使用Docker在本地輕松搭建出的和伺服器類似的架構,使開發環境中的測試更貼近于生産環境。開發完成之後,測試和運維人員可以直接使用相同環境來部署代碼。 Docker可以快速建立和删除容器,實作快速疊代,大量節約開發、測試、部署的時間。并且,各個步驟都有明确的配置和操作,整個過程全程可見,使團隊更容易了解應用的建立和工作過程。

更高效的資源利用。 Docker容器的運作不需要額外的虛拟化管理程式(Virtual Machine Manager,VMM,以及Hypervisor)支援,它是核心級的虛拟化,可以實作更高的性能,同時對資源的額外需求很低。

更輕松的遷移和擴充。Docker容器幾乎可以在任意的平台上運作,包括實體機、虛拟機、公有雲、私有雲、個人電腦、伺服器等。 利用這種相容性讓使用者可以在不同平台之間輕松地遷移應用。

更簡單的更新管理。使用Dockerfile,隻需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式進行分發和更新,進而實作自動化并且高效的容器管理。

2.Docker與虛拟機比較

作為一種輕量級的虛拟化方式,Docker在運作應用上跟傳統的虛拟機方式相比具有顯著優勢:

Docker容器很快,啟動和停止可以在秒級實作,這相比傳統的虛拟機方式要快得多。

Docker容器對系統資源需求很少,一台主機上可以同時運作數千個Docker容器。

Docker通過類似Git的操作來友善使用者擷取、分發和更新應用鏡像,指令簡明,學習成本較低。

Docker通過Dockerfile配置檔案來支援靈活的自動化建立和部署機制,提高工作效率。

Docker容器除了運作其中的應用之外,基本不消耗額外的系統資源,保證應用性能的同時,盡量減小系統開銷。傳統虛拟機方式運作N個不同的應用就要啟動N個虛拟機(每個虛拟機需要單獨配置設定獨占的記憶體、磁盤等資源),而Docker隻需要啟動N個隔離的容器,并将應用放到容器内即可。

3.虛拟化容器的優勢

随着公有雲的普及,開發者越來越需要一個快速遷移和高速建構應用的環境。 現在開發者需要能友善地建立運作在雲平台上的應用,也就是說應用必須能夠脫離底層機器。 而且同時必須是友善擷取的。是以,開發者們需要一種建立分布式應用程式的方式,這也是Docker所能夠提供的。

舉個例子: 我在項目中同一台伺服器中同時運作了nginx,forum&wiki(node.js),meteor server(meteor.js)。每個服務又依賴大量的第三方庫,如果用傳統的方式進行部署。則需要安裝大量的依賴子產品,費時費力。假如我需要在國外的AWS及國内的阿裡雲上同時部署多台機器。或者從某個公有雲服務商遷移到另外一個服務商。這中間的重複勞動是很讓人抵觸的。抛開讓人生厭的重複勞動,服務之間也有可能是以互相“污染”導緻性能下降甚至服務異常。而Docker提供了一種更為聰明的方式,通過容器來打包應用,意味着遷移隻需要在新的伺服器上啟動需要的容器就可以了。這無疑将節約大量的寶貴時間,并降低部署過程出現問題的風險。

Docker安裝

Docker之漫漫人生路Docker嘗鮮Docker安裝

Docker tools box的安裝與使用

因為Docker Engine守護程式使用特定于Linux的核心功能,是以無法在Windows上本機運作Docker Engine。相反,你必須使用docker指令 docker-machine,建立并連接配接到一個小型的Linux VM您的計算機上。該VM在Windows系統上為您托管Docker Engine。

要運作Docker,您的計算機必須具有運作Windows 7或更高版本的64位作業系統。另外,您必須確定在您的計算機上啟用虛拟化。

輕按兩下運作後會出現三個圖示

Docker之漫漫人生路Docker嘗鮮Docker安裝

這裡因為virtualBox不是最新的,導緻安裝出錯,重新去官方網站下載下傳就可以運作docker了

Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #3"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
           

這裡出現了一個報錯,是因為鏡像boot2docker.iso不是最新的,是以報錯,重去官網下載下傳就好了。這裡我沒有科學上網,下了一個小時。

點選Docker Quickstart Terminal便可以運作docker

出現一隻小鲸魚就說明運作成功了

Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
Regenerate TLS machine certs?  Warning: this is irreversible. (y/n): Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...



                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Start interactive shell

[email protected] MINGW64 ~
$ docker -h
Usage: docker [OPTIONS] COMMAND [arg...]
       docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

  --config=%USERPROFILE%\.docker                                       Location of client config files
  -D, --debug                                                          Enable debug mode
  -H, --host=[]                                                        Daemon socket(s) to connect to
  -h, --help                                                           Print usage
  -l, --log-level=info                                                 Set the logging level
  --tls                                                                Use TLS; implied by --tlsverify
  --tlscacert=%USERPROFILE%\.docker\machine\machines\default\ca.pem    Trust certs signed only by this CA
  --tlscert=%USERPROFILE%\.docker\machine\machines\default\cert.pem    Path to TLS certificate file
  --tlskey=%USERPROFILE%\.docker\machine\machines\default\key.pem      Path to TLS key file
  --tlsverify=true                                                     Use TLS and verify the remote
  -v, --version
           

接下來就是打開docker

[email protected] MINGW64 ~
$ cd E:\Docker

[email protected] MINGW64 /e/Docker
$ ls
boot2docker.iso  docker_kali.mp4  DockerToolbox-1.12.5.exe*  kali.tar

[email protected] MINGW64 /e/Docker
$ docker import kali.tar kali
sha256:5a62e5b46f6136bb2a273314358d7de3c35a09e391b4d5f699bb489c74c45494

[email protected] MINGW64 /e/Docker
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kali                latest              5a62e5b46f61        2 minutes ago       347.3 MB
           

[email protected] MINGW64 /e/Docker

$ docker attach kali                 //開啟容器

You cannot attach to a stopped container, start it first

[email protected] MINGW64 /e/Docker

$ docker attach kali             //連接配接容器

You cannot attach to a stopped container, start it first

[email protected] MINGW64 /e/Docker

$ docker start kali              //進入docker

apt-get update && apt-get upgrade -y&&apt-get clean          //更新kali

docker run -i -t  -v /C/Users/49974:/root  -p :4444 -p :5555 -p :22 kali /bin/bash    //挂載目錄

docker cp struts_code_exec_jakarta.rb kali:/usr/share/metasploit-framework/modules/exploits/multi/http //傳輸檔案

docker run -i -t --net=host kali bash    //将鏡像改用為host網絡模式

docker run -i -t --name=kali1 --net=host -v /c/Users/49974:/root -p 8081:80  -p 8080:8080  -p 4444:4444  -p 5555:5555  -p 2222:22 kali /bin/bash   //以host網絡模式下開啟一個新的容器

msfdb init    //重新開機資料庫

service postgresql start                 //開啟資料庫

docker設定的預設賬号密碼            //ssh 連接配接,winSCP連接配接

msf > db_connect

[*]    Usage: db_connect <user:pass>@<host:port>/<database>

[*]       OR: db_connect -y [path/to/database.yml]

[*] Examples:

[*]        db_connect [email protected]

[*]        db_connect user:[email protected]/metasploit3

[*]        db_connect user:[email protected]:1500/metasploit3

Docker之漫漫人生路Docker嘗鮮Docker安裝
Docker之漫漫人生路Docker嘗鮮Docker安裝

圖形化管理出現問題的原因為以下:

啟動Terminal視窗工具之後,我運作hello world報錯了
$ docker run hello-world
docker: An error occurred trying to connect: Post http://127.0.0.1:2375/v1.22/co
ntainers/create: dial tcp 127.0.0.1:2375: connectex: No connection could be made
 because the target machine actively refused it..
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
上面問題的解決辦法:經過多方查資料,可能的原因是本機安裝的其他虛拟網絡,如VMWare, VPN等可能造成網絡沖突導緻。是以我打算重建自定義網絡,在重建之前,我打開"Oracle VM VirtualBox",删除了預設的default虛拟機和兩個Host-only網絡。本來打算執行一個指令來自定義建立的的,結果當我啟動"Docker Quickstart Terminal"時,系統自動重建了虛拟機和網絡,然後進入結果就OK了。是以,解決辦法就是删除預設的虛拟機和網絡,讓系統幫你重建一次。
           

接下來更新源

apt-get update出現報錯

Docker之漫漫人生路Docker嘗鮮Docker安裝

在貼吧找到了問題所在處

http://tieba.baidu.com/p/5543689575?traceid=
我們也可以從GPG的密鑰釋出伺服器上下載下傳Kali的新公鑰。是的,GPG 是有自己官方密鑰釋出伺服器的。作為一個受信的仲裁方,GPG 在全球提供大量的密鑰伺服器,這些伺服器之間會進行定期的資料同步,我們可以任選一個 GPG 密鑰伺服器來下載下傳密鑰。這些伺服器也是我們用來驗證密鑰所有者的重要途徑。
既然是Kali官方的密鑰過期,那就需要 Kali 官方自己先更新一下,然後再把更新後的公鑰發給我們。其實這件事Kali官方已經做了,但作為 Kali 系統使用者的我們,也要更新一下自己電腦中的對應公鑰。


獲得新的公鑰可以有幾種方法,我們可以到Kali官方的密鑰下載下傳站上自己下載下傳,然後将下載下傳的新公鑰導入自己系統。這個過程可以通過系統指令直接完成,也可以手動下載下傳後,再使用系統指令導入密鑰。
具體更新方法有以下幾種方法:(任選一種即可)
1、# apt-key adv --keyserver keys.gnupg.net --recv-keys ED444FF07D8D0BF6
2、# wget -q -O - archive.kali.org/archive-key.asc | apt-key add
3、# gpg --keyserver hkp://pgpkeys.mit.edu --recv-key ED444FF07D8D0BF6
# gpg -a --export ED444FF07D8D0BF6 | sudo apt-key add -
4、# wget https://http.kali.org/kali/pool/ ... ring_2018.1_all.deb
# apt install ./kali-archive-keyring_2018.1_all.deb
成功更新密鑰之後,我們就可以正常的 update / upgrade 了。
開啟容器 docker start <容器名>或者<id>
           

接下來就是安裝 apt-get install metasploit-framework

這裡要注意運作msfconsole需要下載下傳perl運作vulEmu.pl

在service.cfg加載出自己需要的子產品

D:\管理\視訊管理\滲透\Metasploit系列課程\metasploi系列課程1\metasploit-vulnerability-emulator>perl vulEmu.pl
>>act auxiliary/scanner/http/concrete5_member_list
listening on port 80
>>can't find a match for request GET / HTTP/1.1
Host: 192.168.211.137
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

 of size 384
can't find a match for request GET /robots.txt HTTP/1.1
Host: 192.168.211.137
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

 of size 282
           
Docker之漫漫人生路Docker嘗鮮Docker安裝

這樣你就可以在docker運作你的滲透大殺器了

好了開篇就介紹完了。接下來還要慢慢學習docker。

----------------------------------------------------------------------------------------------

msfconsole連接配接不上資料庫?

重裝一遍metasploit,沒效果,以為是端口問題再次重裝,沒想到還是

Docker之漫漫人生路Docker嘗鮮Docker安裝

然後在重裝過程中發現

Docker之漫漫人生路Docker嘗鮮Docker安裝

網上查找了相關資料https://parrotsec-china.org/t/metasploit/95

解決:

grep "port =" /etc/postgresql/9.6/main/postgresql.conf
如果你看到端口不是5432,就改成5432,如果你的端口是5433,使用這條指令去更新

sed -i 's/\(port = \)5433/\15432/' /etc/postgresql/9.6/main/postgresql.conf
重新開機 postgresql 服務

service postgresql restart
重新初始化msf資料庫

msfdb reinit
           

重裝成功

Docker之漫漫人生路Docker嘗鮮Docker安裝

-----------------------------------------------------------------------------------------------------

pentestbox的安裝與連接配接資料庫

修改兩個檔案

E:\PentestBox\bin\metasploit-framework\config\database.yml

Docker之漫漫人生路Docker嘗鮮Docker安裝

E:\PentestBox\bin\customtools\customaliases

Docker之漫漫人生路Docker嘗鮮Docker安裝

  database: msf       //建立的資料庫名稱

  username: postgres  //資料庫使用者

  password: root    //資料庫使用者的密碼

  db_connect postgres:[email protected]/msf          //賬号postgres密碼root localhost本機   msf資料庫

  db_status          //資料庫狀态

Docker之漫漫人生路Docker嘗鮮Docker安裝

------------------------------------------------------------------------------------------------------------

安裝mono

Docker之漫漫人生路Docker嘗鮮Docker安裝
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF


echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list


echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list

echo "deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list

apt-get update


apt-get install mono-devel mono-complete referenceassemblies-pcl ca-certificates-mono
           

docker後續

記一些常用的指令以及這幾天學習docker的心得

今天開啟容器kali發現還是一樣卡死,在和一個學長交流才明白,這是因為docker attach惹的禍

Docker之漫漫人生路Docker嘗鮮Docker安裝

1.docker ps                                    檢視正在運作的容器

2.docker ps -a                                檢視所有容器(包括已終止)

3.Ctrl-q + Ctrl-p                             退出不結束(連續按Ctrl+q和Ctrl+p)

4.docker run -it -v /localDir:/dockerDir image(rna:v1.7) /bin/bash                         挂載本地路徑到docker内 其中localDir為一個本地路徑,dockerDir為docker虛拟機内路徑,image為一個現有鏡像,格式為name:tag

docker start containername        重新啟動一個結束的容器,containername為檢視容器時最後一列NAME

5.docker run ubuntu echo "hello world"       使用image建立container并執行相應指令,然後停止

6.docker run -i -t --name mytest centos:centos6 /bin/bash    使用image建立container并進入互動模式, login shell是/bin/bash

7.docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID            檢視容器的内部IP

8.開啟/停止/重新開機container(start/stop/restart)

容器可以通過run建立一個來運作,也可以重新start已經停止的container,但start不能夠再指定容器啟動時運作的指令,因為docker隻能有一個前台程序。

9.容器stop(或Ctrl+D)時,會在儲存目前容器的狀态之後退出,下次start時保有上次關閉時更改。而且每次進入attach進去的界面是一樣的,與第一次run啟動或commit送出的時刻相同。

10.在docker内exit  結束退出, 退出的容器還可以再次進入

11.docker attach containername 進入一個容器(已啟動但未進入或者退出沒有結束狀态的容器,docker ps 中所列所有容器均是此狀态)docker commit kali KALI  當你對某一個容器做了修改之後(通過在容器中運作某一個指令),可以把對容器的修改儲存下來,這樣下次可以從儲存後的最新狀态運作該容器。docker中儲存狀态的過程稱之為committing,它儲存的新舊狀态之間的差別,進而産生一個新的版本。

docker stop $CONTAINER_ID

docker restart $CONTAINER_ID

參考:https://www.cnblogs.com/ginponson/p/8601320.html