天天看點

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

作者:碼上咖啡館

一.已經下載下傳好了docker鏡像,如何利用這個鏡像建立一個容器?

二.建立容器成功後,裡面有一些服務是通過提供的端口号和外部進行通信的,但是有一個問題是容器内部的端口号是不能直接和外部用戶端如xshell進行通信的,而是需要将容器裡面服務的端口号映射到主控端(實體機)上,外部用戶端如xshell和主控端上的這個端口進行通信

現在使用ubuntu鏡像建立一個容器,并且在容器裡使用ssh服務和外部進行通信為例子進行講解。

具體做法:

管理者賬号進入系統,使用docker ps檢視目前正在運作的容器有哪些以及這些容器是使用什麼鏡像建立的

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

docker ps檢視正在運作的容器資訊

可以看到裡面有很多正在運作的容器及對應的資訊,看最後一個容器hansifan,其使用的鏡像是ubuntu:18.04-full,那麼,我們現在使用這個鏡像再建立一個名為hsftrial的容器,但是這一步要注意,端口映射是在建立容器這一步完成的,是以我們要首先知道這個容器裡将要提供什麼服務,以及這個服務的預設端口号是多少,并且在建立容器的時候做好端口映射,我們這裡就在容器裡提供ssh服務,ssh服務的預設端口号是22,我們這裡将它和主控端做端口映射的時候将它映射為20001,使用指令docker run -it -p 想要映射到主控端上的端口号:容器内部服務的端口号 --name hsftrial 鏡像名稱 /bin/bash進行操作。

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

建立容器并完成端口映射

這個時候回車,不顯示任何資訊,操作完成。要注意的是,這條指令中的/bin/bash的作用是建立完容器後自動進入該容器,是以可以看到上述建立完成後自動進入了該容器。

此時,搭建ssh服務

具體兩條指令

apt update

apt install -y openssh-server

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

apt update

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

apt install -y openssh-server

再啟動容器裡的ssh服務,為了友善,可以再使用管理者賬号用xshell連接配接一次伺服器,進入後用docker ps檢視正在運作的容器

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

再次檢視正在運作的容器

可以發現剛剛建立并下載下傳安裝了ssh的容器hsftrial正在運作,此時用docker exec -it 容器名/容器ID bash進入這個容器,并用service ssh status檢視容器中的ssh服務是否已經啟動,若沒有啟動則使用service ssh start進行啟動

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

進入容器啟動ssh服務

此時發現容器裡的ssh服務已經啟動。

再切出來,用docker ps發現hsftrial停止了,那麼使用docker start 容器名啟動容器

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

啟動容器

此時可以發現,容器啟動,ssh服務也搭建好了,并且端口映射也做好了(容器裡的ssh服務端口映射到主控端20001端口供外部通路),最後,再給容器設定個密碼

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

給容器設定密碼

此時,一切都設定好了,那麼,是否就可以用xshell進行連接配接了呢?

在連接配接前可以在容器中使用whoami确定使用者名以便于待會兒登入

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

确當使用者名

可知使用者名是root

進行登入

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

進行登入

發現登入失敗

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

登入失敗

這是因為還要對/etc/ssh/sshd_config進行修改配置檔案才能通過密碼登入,具體修改如下

找到這兩行,如果注釋就放開注釋并将其改為yes

PasswordAuthentication yes

PermitRootLogin yes

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

用vim打開配置檔案(沒有vim先apt install vim安裝vim)

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

修改配置檔案

為了讓ssh配置檔案生效要用service ssh restart進行重載

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

修改配置檔案後重載生效

此時再嘗試登入

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

進入系統

成功進入系統!!

注:要點是在進行端口映射的時候要預先知道将要提供的服務的預設端口才能在建立容器的時候做好端口映射。

最後,不想要了的容器可以先停止它,再删除它

docker stop 容器名字

docker rm 容器名字

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

正在運作的容器

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

docker stop hsftrial docker rm hsftrial之後的情況

注:docker ps -a可以檢視所有容器包括存在但是不正在運作的容器

如何利用docker鏡像建立一個容器并為容器中的服務進行端口映射?

檢視所有容器

可以發現剛剛的容器确實删除了!