宿主机-免密登录Docker容器
CentOS7 安裝Docker
討論QQ:1586558083
目錄
一、檢查系統內核
二、安裝Docker
2.1 安裝
2.2 查看docker版本
2.3 啟動docker
三、建立docker用戶和組
3.1 創建用戶及組
3.2 使用新創建的用戶運行helloworld
3.3 解決報錯
四、安裝centos鏡像
4.1 下載鏡像
4.2 查看擁有的鏡像
4.3 運行容器
4.4 在容器中運行命令
4.5 查看鏡像、容器、數據卷所占用的空間
4.6 容器退出再次進入報錯
五、運行容器
5.1 使用命令運行容器
六、剛安裝的系統非常純凈,需要安裝必備的軟件
6.1 安裝vim
6.2 升級及安裝sshd
6.3 修改root密碼
6.4 宿主機能登錄本機(容器中的主機)
6.5 配置ssh無密碼登錄
七、上傳軟件到容器里面
八、保存鏡像
正文
回到頂部
一、檢查系統內核
Docker 要求 CentOS 系統的內核版本高于 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。
通過uname -r命令查看你當前的內核版本
[root@bigdata ~]# uname -r
回到頂部
二、安裝Docker
2.1 安裝
Docker 軟件包和依賴包已經包含在默認的 CentOS-Extras 軟件源里,安裝命令如下:
[root@bigdata ~]# yum -y install docker
2.2 查看docker版本
[root@bigdata ~]# docker version
2.3 啟動docker
方式一:
[root@bigdata ~]# service docker start Redirecting to /bin/systemctl start docker.service [root@bigdata ~]#
方式二:
[root@bigdata ~]# systemctl start docker.service [root@bigdata ~]# ps aux | grep docker
回到頂部
三、建立docker用戶和組
3.1 創建用戶及組
默認情況下,docker 命令會使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統上不會直接使用 root 用戶。因此,更好地做法是將需要使用 docker 的用戶加入 docker 用戶組。
[root@bigdata ~]# groupadd docker [root@bigdata ~]# useradd -g docker docker
vim /etc/sudoers
把docker 加入sudoers里面
$sudo gpasswd -a ${USER} docker
cat /etc/group | grep ^docker
sudo systemctl restart docker
3.2 使用新創建的用戶運行helloworld
[docker@bigdata ~]$ docker run hello-world
[docker@bigdata ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally Trying to pull repository docker.io/library/hello-world ... latest: Pulling from docker.io/library/hello-world 9bb5a5d4561a: Pulling fs layer /usr/bin/docker-current: error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/e3/e38bc07ac18ee64e6d59cf2eafcdddf9cec2364dfe129fe0af75f1b0194e0c96/data?Expires=1525823399&Signature=SjqbSNVW5X~uDhy9jXvuLqv22jC3auyGRx4JCRE1ceXkdh0Qpsc21VmhIXwAO6XcxwyJ1gGNVQhnJWYozOWXjysL8taJFBCxKNqAD9Cy~TCt-iMi06z9dHX6-WxxIU3WJ4LbCT7RxsWIKArTVKmPvyQdD4Djkgr~rWzoL6eyTfg_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: net/http: TLS handshake timeout. See '/usr/bin/docker-current run --help'. [docker@bigdata ~]$
3.3 解決報錯
如上圖報錯/usr/bin/docker-current: error pulling image configuration。。。
出現這個問題,一般的原因是無法連接到 docker hub通過(使用root用戶執行以下命令):
[root@bigdata ~]# cat /etc/sysconfig/docker
在文件中添加以下內容:
--registry-mirror=http://f2d6cb40.m.daocloud.io
重啟docker
[root@bigdata ~]# service docker restart
再次運行helloworld(docker用戶)
[docker@bigdata ~]$ docker run hello-world
由于本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,并在容器內運行。
回到頂部
四、安裝centos鏡像
4.1 下載鏡像
從 Docker 鏡像倉庫獲取鏡像的命令是 docker pull。其命令格式為:
docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽]
可以直接使用docker pull centos:7命令安裝鏡像
[docker@bigdata ~]$ docker pull centos:7
4.2 查看擁有的鏡像
[docker@bigdata ~]$ docker image ls
一個是centos鏡像,另一個是我們之前使用dockerrunhello-world命令下載的鏡像。
鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
4.3 運行容器
有了鏡像后,我們就能夠以這個鏡像為基礎啟動并運行一個容器。
[docker@bigdata ~]$ docker run -it --rm centos bash
docker run 就是運行容器的命令,說明一下上面用到的參數。
-it:這是兩個參數,一個是 -i:交互式操作,一個是 -t 終端。我們這里打算進入 bash 執行一些命令并查看返回結果,因 此我們需要交互式終端。
--rm:這個參數是說容器退出后隨之將其刪除。默認情況下,為了排障需求,退出的容器并不會立即刪除,除非手動 docker rm。我們這里只是隨便執行個命令,看看結果,不需要排障和保留結果,因此使用 --rm 可以避免浪費空間。
centos:這是指用centos 鏡像為基礎來啟動容器。
bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 bash。
4.4 在容器中運行命令
[root@cb55b5f51685 /]# cat /etc/os-release
進入容器后,我們可以在 Shell 下操作,執行任何所需的命令。這里,我們執行了 cat /etc/os-release,這是 Linux 常用的查看當前系統版本的命令,從返回的結果可以看到容器內是 CentOS Linux 系統。
最后我們可以通過 exit 退出了這個容器。
4.5 查看鏡像、容器、數據卷所占用的空間
[docker@bigdata ~]$ docker system df
4.6 容器退出再次進入報錯
[docker@bigdata ~]$ docker run -it -v /home/docker/build:/root/build --privileged -h hadoop1 --name hadoop1 centos /bin/bash /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/hadoop1" is already in use by container a094bdef9e1cac62a17022e568fe9b1eb021e13adf8ed2624a71be5a2e42c618. You have to remove (or rename) that container to be able to reuse that name.. See '/usr/bin/docker-current run --help'. [docker@bigdata ~]$
docker ps: 查看當前運行的容器
docker ps -a:查看所有容器,包括停止的。
標題含義:
CONTAINER ID:容器的唯一表示ID。
IMAGE:創建容器時使用的鏡像。
COMMAND:容器最后運行的命令。
CREATED:創建容器的時間。
STATUS:容器狀態。
PORTS:對外開放的端口。
NAMES:容器名。可以和容器ID一樣唯一標識容器,同一臺宿主機上不允許有同名容器存在,否則會沖突。
使用命令停止并刪除這個容器就可以
回到頂部
五、運行容器
5.1 使用命令運行容器
[docker@bigdata ~]$ docker run -it -v /home/docker/build:/root/build --privileged -h hadoop1 --name hadoop1 centos /bin/bash
以centos鏡像啟動一個容器,容器名是hadoop1,主機名是hadoop1,并且將基于容器的centos系統的/root/build目錄與本地/home/docker/build共享。
參數解釋:
-v 表示基于容器的centos系統的/root/build目錄與本地/home/hadoop/build共享;這可以很方便將本地文件上傳到Docker內部的centos系統;
-h指定主機名為hadoop1
–-name 指定容器名
/bin/bash 使用bash命令
六、剛安裝的系統非常純凈,需要安裝必備的軟件
6.1 安裝vim
[root@hadoop1 /]# yum install vim
6.2 升級及安裝sshd
6.2.1 安裝
[root@hadoop1 /]# yum -y update
[root@hadoop1 /]# yum -y install openssh-server
[root@hadoop1 /]# yum -y install openssh-clients
編輯sshd的配置文件/etc/ssh/sshd_config,將其中的UsePAM yes改為UsePAM no
[root@hadoop1 /]# vi /etc/ssh/sshd_config
6.2.2 啟動
[root@hadoop1 /]# /usr/sbin/sshd -D
報錯如圖,解決方案為:創建公私密鑰,輸入命令后,直接按兩次enter鍵確認就行了
[root@hadoop1 /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@hadoop1 /]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@hadoop1 /]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
再次啟動SSH服務
[root@hadoop1 /]# yum -y install lsof
[root@hadoop1 /]# lsof -i:22
6.3 修改root密碼
[root@hadoop1 /]# passwd
測試
[root@hadoop1 /]# ssh localhost
上圖中可以看到已經登錄到本機了,也就說容器中的主機擁有了ssh遠程登錄其它主機的能力,當然你也可以登錄其他主機。要退出的話,輸入命令exit即可。
6.4 宿主機能登錄本機(容器中的主機)
[root@hadoop1 ~]# vi /etc/hosts
得到容器中的主機的ip地址172.17.0.2(可能和你得到的不一樣)
然后在宿主機中開啟一個新的終端輸入命令
[docker@bigdata ~]$ ssh root@172.17.0.2
6.5 配置ssh無密碼登錄
[root@hadoop1 ~]# ssh-keygen -t rsa
[root@hadoop1 ~]# cd .ssh/ [root@hadoop1 .ssh]# cat id_rsa.pub >> authorized_keys
輸入完后,這時再輸入命令
[root@hadoop1 .ssh]# ssh localhost
回到頂部
七、上傳軟件到容器里面
將JDK上傳到Linux系統,,然后將其移動到/home/docker/build文件夾下面,注意:這里需要使用root用戶
[root@bigdata docker]# mv jdk-8u73-linux-x64.tar.gz build/
進入容器里面的/root/build文件夾下面進行查看
[root@hadoop1 /]# cd /root/build/ [root@hadoop1 build]# ls
5.2.3 安裝JDK
在容器/root下面建一個apps文件夾
[root@hadoop1 ~]# mkdir apps
解壓JDK的安裝包到apps文件夾下面
[root@hadoop1 build]# tar -zxvf jdk-8u73-linux-x64.tar.gz -C /root/apps/
修改環境變量
[root@hadoop1 ~]# vi .bashrc
#JAVA export JAVA_HOME=/root/apps/jdk1.8.0_73 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
保存使其立即生效
[root@hadoop1 ~]# source .bashrc
回到頂部
八、保存鏡像
基于已有的docker容器,做一新的dokcer image.
$ docker commit <container_id> <image_name>
另開一個窗口
舉例:
總結
以上是生活随笔為你收集整理的宿主机-免密登录Docker容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计项目管理软件(多项目管理软件)
- 下一篇: WiFi无线网络参数 802.11a/b