宿主机-免密登录Docker容器

讨论QQ:1586558083

目录

正文

回到顶部

一、检查系统内核

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

[[email protected] ~]# uname -r

回到顶部

二、安装Docker

2.1 安装

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:

[[email protected] ~]# yum -y install docker

2.2 查看docker版本

[[email protected] ~]# docker version

2.3 启动docker

方式一:

[[email protected] ~]# service docker start
Redirecting to /bin/systemctl start docker.service
[[email protected] ~]# 

方式二:

[[email protected] ~]# systemctl start docker.service
[[email protected] ~]# ps aux | grep docker

回到顶部

三、建立docker用户和组

3.1 创建用户及组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

[[email protected] ~]# groupadd docker
[[email protected] ~]# useradd -g docker docker

3.2 使用新创建的用户运行helloworld

[[email protected] ~]$ docker run hello-world

[[email protected] ~]$ 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‘.
[[email protected] ~]$ 

3.3 解决报错

如上图报错/usr/bin/docker-current: error pulling image configuration。。。

出现这个问题,一般的原因是无法连接到 docker hub通过(使用root用户执行以下命令):

[[email protected] ~]# cat /etc/sysconfig/docker

在文件中添加以下内容:

--registry-mirror=http://f2d6cb40.m.daocloud.io

重启docker

[[email protected] ~]# service docker restart

再次运行helloworld(docker用户)

[[email protected] ~]$ docker run hello-world

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

回到顶部

四、安装centos镜像

4.1 下载镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]  

可以直接使用docker pull centos:7命令安装镜像

[[email protected] ~]$ docker pull centos:7

4.2 查看拥有的镜像

[[email protected] ~]$ docker image ls

一个是centos镜像,另一个是我们之前使用docker run hello-world命令下载的镜像。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

4.3 运行容器

有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。

[[email protected] ~]$ 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 查看镜像、容器、数据卷所占用的空间

[[email protected] ~]$ docker system df

4.6 容器退出再次进入报错

[[email protected] ~]$ 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‘.
[[email protected] ~]$ 

  • docker ps: 查看当前运行的容器
  • docker ps -a:查看所有容器,包括停止的。

标题含义:

  • CONTAINER ID:容器的唯一表示ID。
  • IMAGE:创建容器时使用的镜像。
  • COMMAND:容器最后运行的命令。
  • CREATED:创建容器的时间。
  • STATUS:容器状态。
  • PORTS:对外开放的端口。
  • NAMES:容器名。可以和容器ID一样唯一标识容器,同一台宿主机上不允许有同名容器存在,否则会冲突。

使用命令停止并删除这个容器就可以

回到顶部

五、运行容器

5.1 使用命令运行容器

[[email protected] ~]$ 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

[[email protected] /]# yum install vim

6.2 升级及安装sshd

6.2.1 安装

[[email protected] /]# yum -y update
[[email protected] /]# yum -y install openssh-server
[[email protected] /]# yum -y install openssh-clients

编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM yes改为UsePAM no

[[email protected] /]# vi /etc/ssh/sshd_config 

6.2.2 启动

[[email protected] /]# /usr/sbin/sshd -D

报错如图,解决方案为:创建公私密钥,输入命令后,直接按两次enter键确认就行了

[[email protected] /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key 

[[email protected] /]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

[[email protected] /]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

再次启动SSH服务

[[email protected] /]# yum -y install lsof
[[email protected] /]# lsof -i:22

6.3 修改root密码

[[email protected] /]# passwd

测试

[[email protected] /]# ssh localhost

上图中可以看到已经登录到本机了,也就说容器中的主机拥有了ssh远程登录其它主机的能力,当然你也可以登录其他主机。要退出的话,输入命令exit即可。

6.4 宿主机能登录本机(容器中的主机)

[[email protected] ~]# vi /etc/hosts

得到容器中的主机的ip地址172.17.0.2(可能和你得到的不一样)

然后在宿主机中开启一个新的终端输入命令

[[email protected] ~]$ ssh [email protected]

6.5 配置ssh无密码登录

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# cd .ssh/
[[email protected] .ssh]# cat id_rsa.pub >> authorized_keys

输入完后,这时再输入命令

[[email protected] .ssh]# ssh localhost

回到顶部

七、上传软件到容器里面

将JDK上传到Linux系统,,然后将其移动到/home/docker/build文件夹下面,注意:这里需要使用root用户

[[email protected] docker]# mv jdk-8u73-linux-x64.tar.gz build/

进入容器里面的/root/build文件夹下面进行查看

[[email protected] /]# cd /root/build/
[[email protected] build]# ls

5.2.3 安装JDK

在容器/root下面建一个apps文件夹

[[email protected] ~]# mkdir apps

解压JDK的安装包到apps文件夹下面

[[email protected] build]# tar -zxvf jdk-8u73-linux-x64.tar.gz -C /root/apps/

修改环境变量

[[email protected] ~]# 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 

保存使其立即生效

[[email protected] ~]# source .bashrc

回到顶部

八、保存镜像

基于已有的docker容器,做一新的dokcer image.

$ docker commit <container_id> <image_name>

另开一个窗口

举例:

原文地址:https://www.cnblogs.com/fuyuteng/p/9280552.html

时间: 2024-08-29 16:11:12

宿主机-免密登录Docker容器的相关文章

宿主机ssh免密登录docker容器

一.检查系统内核 二.安装docker 1.yum install docker  -y 2.docker version                    #查看docker版本 3.systemctl restart docker     #启动docker服务 4.groupadd docker & useradd -g docker docker 三.安装镜像 docker pull [选项] :标签 docker pull centos:7 docker images       

SSH免密登录机制

 SSH免密登录机制:(见下图) 1.A先使用ssh-keygen生成一对公钥和私钥:ssh-keygen 2.将A的公钥复制给B一份,并且将其追加到B的授权文件中:ssh-copy-id B 3.接下来ssh B,就能免密登录. 为什么将A的公钥拷给B中的授权文件中就能免密登录了呢? 因为在执行ssh B命令时,B中会用A的公钥随机加密一段密文返回给A,A在接收到密文以后,就会用自己的私钥对密文进行解密, 如果能被解密,就允许免密登录,如果不能被解密,就无法登录.由公钥加密的内容,只能由私钥解

【Linux】ssh免密登录

一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B. 1.在A机下生成公钥/私钥对. [[email protected] ~]$ ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它在/home/chenlb

基于vagrant工具在win7下免密登录linux

一.SSH加密方式 SSH采用的是"非对称密钥系统",即耳熟能详的公钥私钥加密系统,其安全验证又分为两种级别. 1. 基于口令的安全验证 这种方式使用用户名密码进行联机登录,一般情况下我们使用的都是这种方式.整个过程大致如下: (1)客户端发起连接请求. (2)远程主机收到用户的登录请求,把自己的公钥发给客户端. (3)客户端接收远程主机的公钥,然后使用远程主机的公钥加密登录密码,紧接着将加密后的登录密码连同自己的公钥一并发送给远程主机. (4)远程主机接收客户端的公钥及加密后的登录密

ssh免密登录及去掉提示

A连B 1.生成公钥和私钥    ssh-keygen2.复制公钥到需要免密登录的服务器上  ssh-copy-id [email protected] A连A 2.复制公钥到本机上  ssh-copy-id [email protected]本机ip 问题: 免密登录遇到Are you sure you want to continue connecting (yes/no)?的提示,很烦人,如何去掉? 解决:修改/etc/ssh/ssh_config将其中的# StrictHostKeyCh

免密登录

生成本机的公钥私钥:[[email protected] ~]# ssh-keygen -t rsa -b 1024 Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): Enter same passphras

ssh免密登录linux服务器

Ssh免密登录 sshd服务 sshd简介: SSH 密钥为登录 Linux 服务器提供了更好且安全的机制.运行 ssh-keygen 后,将会生成公私密钥对.你可以将公钥放置到任意服务器,从持有私钥的客户端连接到服务器的时,会用它来解锁.两者匹配时,系统无需密码就能解除锁定. 官方维护文档:https://www.ssh.com/ssh/ 参考文档:https://www.cnblogs.com/ioveNature/p/7919115.html https://www.cnblogs.com

Hadoop完全分布式环境搭建(二)——基于Ubuntu16.04设置免密登录

在Windows里,使用虚拟机软件Vmware WorkStation搭建三台机器,操作系统Ubuntu16.04,下面是IP和机器名称. [实验目标]:在这三台机器之间实现免密登录 [搭建准备] 1.三台机器上已建立一个共同的账号:hadoop,口令一致 [设置步骤] 1.在主节点master上设置 1).$cd ~/.ssh 使用ll命令查看,当前~/.ssh文件夹下是空的 2).生成一对密钥,本机的密钥,放在.ssh文件夹下 $ ssh-keygen -t rsa 生成过程中,一路回车即可

Linux ssh 免密登录设置成功,却不生效

在本机上使用非root账户,生成ssh 密钥,然后执行ssh-copy-id -i /home/用户/.ssh/id_rsa.pub 远程用户@远程ip,本机提示已经ssh公钥添加到远程主机用户/.ssh下. 执行ssh 远程用户@远程IP登录却仍然需要输入密码.显然免密没生效. 排查各种问题,比如本机是否开启免密登录,用户.ssh权限等等,都没找到问题所在,切换到root用户下,查看root用户的.ssh文件,发现有生成公钥,将其干掉.然后载重新1,2步凑,ok了. 原文地址:http://b