宿主机-免密登录Docker容器
CentOS7 安裝Docker
討論QQ:1586558083
目錄
一、檢查系統(tǒng)內(nèi)核
二、安裝Docker
2.1 安裝
2.2 查看docker版本
2.3 啟動(dòng)docker
三、建立docker用戶和組
3.1 創(chuàng)建用戶及組
3.2 使用新創(chuàng)建的用戶運(yùn)行helloworld
3.3 解決報(bào)錯(cuò)
四、安裝centos鏡像
4.1 下載鏡像
4.2 查看擁有的鏡像
4.3 運(yùn)行容器
4.4 在容器中運(yùn)行命令
4.5 查看鏡像、容器、數(shù)據(jù)卷所占用的空間
4.6 容器退出再次進(jìn)入報(bào)錯(cuò)
五、運(yùn)行容器
5.1 使用命令運(yùn)行容器
六、剛安裝的系統(tǒng)非常純凈,需要安裝必備的軟件
6.1 安裝vim
6.2 升級(jí)及安裝sshd
6.3 修改root密碼
6.4 宿主機(jī)能登錄本機(jī)(容器中的主機(jī))
6.5 配置ssh無密碼登錄
七、上傳軟件到容器里面
八、保存鏡像
正文
回到頂部
一、檢查系統(tǒng)內(nèi)核
Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁面的前提條件來驗(yàn)證你的CentOS 版本是否支持 Docker 。
通過uname -r命令查看你當(dāng)前的內(nèi)核版本
[root@bigdata ~]# uname -r
回到頂部
二、安裝Docker
2.1 安裝
Docker 軟件包和依賴包已經(jīng)包含在默認(rèn)的 CentOS-Extras 軟件源里,安裝命令如下:
[root@bigdata ~]# yum -y install docker
2.2 查看docker版本
[root@bigdata ~]# docker version
2.3 啟動(dòng)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 創(chuàng)建用戶及組
默認(rèn)情況下,docker 命令會(huì)使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統(tǒng)上不會(huì)直接使用 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 使用新創(chuàng)建的用戶運(yùn)行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 解決報(bào)錯(cuò)
如上圖報(bào)錯(cuò)/usr/bin/docker-current: error pulling image configuration。。。
出現(xiàn)這個(gè)問題,一般的原因是無法連接到 docker hub通過(使用root用戶執(zhí)行以下命令):
[root@bigdata ~]# cat /etc/sysconfig/docker
在文件中添加以下內(nèi)容:
--registry-mirror=http://f2d6cb40.m.daocloud.io
重啟docker
[root@bigdata ~]# service docker restart
再次運(yùn)行helloworld(docker用戶)
[docker@bigdata ~]$ docker run hello-world
由于本地沒有hello-world這個(gè)鏡像,所以會(huì)下載一個(gè)hello-world的鏡像,并在容器內(nèi)運(yùn)行。
回到頂部
四、安裝centos鏡像
4.1 下載鏡像
從 Docker 鏡像倉庫獲取鏡像的命令是 docker pull。其命令格式為:
docker pull [選項(xiàng)] [Docker Registry 地址[:端口號(hào)]/]倉庫名[:標(biāo)簽]
可以直接使用docker pull centos:7命令安裝鏡像
[docker@bigdata ~]$ docker pull centos:7
4.2 查看擁有的鏡像
[docker@bigdata ~]$ docker image ls
一個(gè)是centos鏡像,另一個(gè)是我們之前使用dockerrunhello-world命令下載的鏡像。
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的 類 和 實(shí)例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
4.3 運(yùn)行容器
有了鏡像后,我們就能夠以這個(gè)鏡像為基礎(chǔ)啟動(dòng)并運(yùn)行一個(gè)容器。
[docker@bigdata ~]$ docker run -it --rm centos bash
docker run 就是運(yùn)行容器的命令,說明一下上面用到的參數(shù)。
-it:這是兩個(gè)參數(shù),一個(gè)是 -i:交互式操作,一個(gè)是 -t 終端。我們這里打算進(jìn)入 bash 執(zhí)行一些命令并查看返回結(jié)果,因 此我們需要交互式終端。
--rm:這個(gè)參數(shù)是說容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容器并不會(huì)立即刪除,除非手動(dòng) docker rm。我們這里只是隨便執(zhí)行個(gè)命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費(fèi)空間。
centos:這是指用centos 鏡像為基礎(chǔ)來啟動(dòng)容器。
bash:放在鏡像名后的是命令,這里我們希望有個(gè)交互式 Shell,因此用的是 bash。
4.4 在容器中運(yùn)行命令
[root@cb55b5f51685 /]# cat /etc/os-release
進(jìn)入容器后,我們可以在 Shell 下操作,執(zhí)行任何所需的命令。這里,我們執(zhí)行了 cat /etc/os-release,這是 Linux 常用的查看當(dāng)前系統(tǒng)版本的命令,從返回的結(jié)果可以看到容器內(nèi)是 CentOS Linux 系統(tǒng)。
最后我們可以通過 exit 退出了這個(gè)容器。
4.5 查看鏡像、容器、數(shù)據(jù)卷所占用的空間
[docker@bigdata ~]$ docker system df
4.6 容器退出再次進(jìn)入報(bào)錯(cuò)
[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: 查看當(dāng)前運(yùn)行的容器
docker ps -a:查看所有容器,包括停止的。
標(biāo)題含義:
CONTAINER ID:容器的唯一表示ID。
IMAGE:創(chuàng)建容器時(shí)使用的鏡像。
COMMAND:容器最后運(yùn)行的命令。
CREATED:創(chuàng)建容器的時(shí)間。
STATUS:容器狀態(tài)。
PORTS:對(duì)外開放的端口。
NAMES:容器名??梢院腿萜鱅D一樣唯一標(biāo)識(shí)容器,同一臺(tái)宿主機(jī)上不允許有同名容器存在,否則會(huì)沖突。
使用命令停止并刪除這個(gè)容器就可以
回到頂部
五、運(yùn)行容器
5.1 使用命令運(yùn)行容器
[docker@bigdata ~]$ docker run -it -v /home/docker/build:/root/build --privileged -h hadoop1 --name hadoop1 centos /bin/bash
以centos鏡像啟動(dòng)一個(gè)容器,容器名是hadoop1,主機(jī)名是hadoop1,并且將基于容器的centos系統(tǒng)的/root/build目錄與本地/home/docker/build共享。
參數(shù)解釋:
-v 表示基于容器的centos系統(tǒng)的/root/build目錄與本地/home/hadoop/build共享;這可以很方便將本地文件上傳到Docker內(nèi)部的centos系統(tǒng);
-h指定主機(jī)名為hadoop1
–-name 指定容器名
/bin/bash 使用bash命令
六、剛安裝的系統(tǒng)非常純凈,需要安裝必備的軟件
6.1 安裝vim
[root@hadoop1 /]# yum install vim
6.2 升級(jí)及安裝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 啟動(dòng)
[root@hadoop1 /]# /usr/sbin/sshd -D
報(bào)錯(cuò)如圖,解決方案為:創(chuàng)建公私密鑰,輸入命令后,直接按兩次enter鍵確認(rèn)就行了
[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
再次啟動(dòng)SSH服務(wù)
[root@hadoop1 /]# yum -y install lsof
[root@hadoop1 /]# lsof -i:22
6.3 修改root密碼
[root@hadoop1 /]# passwd
測(cè)試
[root@hadoop1 /]# ssh localhost
上圖中可以看到已經(jīng)登錄到本機(jī)了,也就說容器中的主機(jī)擁有了ssh遠(yuǎn)程登錄其它主機(jī)的能力,當(dāng)然你也可以登錄其他主機(jī)。要退出的話,輸入命令exit即可。
6.4 宿主機(jī)能登錄本機(jī)(容器中的主機(jī))
[root@hadoop1 ~]# vi /etc/hosts
得到容器中的主機(jī)的ip地址172.17.0.2(可能和你得到的不一樣)
然后在宿主機(jī)中開啟一個(gè)新的終端輸入命令
[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
輸入完后,這時(shí)再輸入命令
[root@hadoop1 .ssh]# ssh localhost
回到頂部
七、上傳軟件到容器里面
將JDK上傳到Linux系統(tǒng),,然后將其移動(dòng)到/home/docker/build文件夾下面,注意:這里需要使用root用戶
[root@bigdata docker]# mv jdk-8u73-linux-x64.tar.gz build/
進(jìn)入容器里面的/root/build文件夾下面進(jìn)行查看
[root@hadoop1 /]# cd /root/build/ [root@hadoop1 build]# ls
5.2.3 安裝JDK
在容器/root下面建一個(gè)apps文件夾
[root@hadoop1 ~]# mkdir apps
解壓JDK的安裝包到apps文件夾下面
[root@hadoop1 build]# tar -zxvf jdk-8u73-linux-x64.tar.gz -C /root/apps/
修改環(huán)境變量
[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>
另開一個(gè)窗口
舉例:
總結(jié)
以上是生活随笔為你收集整理的宿主机-免密登录Docker容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计项目管理软件(多项目管理软件)
- 下一篇: WiFi无线网络参数 802.11a/b