CentOS7 安装Docker

讨论QQ:1586558083

正文

一、检查系统内核

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镜像,另一个是我们之前使用docker run hello-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容器的更多相关文章

  1. 宿主机ssh免密登录docker容器

    一.检查系统内核 二.安装docker 1.yum install docker  -y 2.docker version                    #查看docker版本 3.syste ...

  2. docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...

  3. ssh-keygen Linux 免密登录

    一.选择算法和密钥大小 rsa - 基于分解大数的难度的旧算法.RSA建议密钥大小至少为2048位,4096位更好.RSA正在变老,并且在保理方面取得了重大进展.可能建议选择不同的算法.在可预见的将来 ...

  4. SSH免密登录机制

     SSH免密登录机制:(见下图) 1.A先使用ssh-keygen生成一对公钥和私钥:ssh-keygen 2.将A的公钥复制给B一份,并且将其追加到B的授权文件中:ssh-copy-id B 3.接 ...

  5. docker ssh秘钥免密登录

    一.概述 有一台跳板机,已经实现了免密登录后端服务器.但是我写了一个django项目,它是运行在容器中的,也需要免密登录后端服务器. 虽然可以在容器中手动做一下免密登录,但是容器重启之后,之前做的设置 ...

  6. ActiveMQ【CVE-2016-3088】上传公钥实现sssh免密登录

    Apache-ActiveMQ是apache旗下的消息中间件,至今为止还是有较多的甲方爸爸们,还在使用该中间件.据了解,Apache-ActiveMQ中间件有2个厉害的CVE,一个是CVE-2016- ...

  7. 关于Ubuntu的ssh免密登录

    1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...

  8. 【Linux】ssh免密登录

    一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168. ...

  9. Linux SSH免密登录

    SSH无密码登录要使用公钥与私钥.Linux可以用ssh-keygen生成公钥/私钥对,下面以Ubuntu为例说明配置过程. 有两个节点:node01(172.17.0.14)和node02(172. ...

随机推荐

  1. Android学习_7/27

    一.           自定义控件 1.         引入布局 多个活动需要相同的布局时,使用引入布局的方式来实现代码复用. activity_main.xlm中加入<include la ...

  2. SNOI2017炸弹

    这个东西其实我是不太会的……但是勉强卡过去了. 首先肯定是建有向图,然后求每个节点能访问的节点个数,最裸的打法就是按照题意枚举建边然后tarjan缩点,用bitset记录一下访问节点,但是bitset ...

  3. TCP输入 之 快速路径和慢速路径

    概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的: 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数 ...

  4. ubuntu下apt-get 命令参数

    转载:https://blog.csdn.net/linuxzhouying/article/details/7192612 ubuntu下apt-get 命令参数 常用的APT命令参数 apt-ca ...

  5. 【黑马JavaWeb】.1.2反射机制

    文章目录 反射:框架设计的灵魂 获取Class类对象的方式 学习视频:https://www.bilibili.com/video/av47886776?p=10 本来一万行的代码,使用框架以后简化到 ...

  6. 小程序web-view利用url给内嵌的网页传值

    这个方法跟网页上的一样,直接通过截取url中传过来的参数来取值 <web-view src="https://www.baidu.com/test.html?url=http://ww ...

  7. linux中 ls |wc -l

      linux中 ls |wc -l_百度知道 答 205行,205个字,1920个字节,wc -l只输出文件行数

  8. el-mement表单校验-校验失败时自动聚焦到失败的input框

    思路:调用input的focus()事件,聚焦到失败的input框上, 问题:如何获取失败的input框,结合element的校验方法,查看可以提供入口的地方 调用this.$refs[formNam ...

  9. Android studio 下 NDK Jni 开发 简单例子

    1. 创建一个新的工程 2. 创建一个新的类 JniText.java  点击Build--Make Project  后     选中工程 点击F4键 sdk location 中 Android ...

  10. [SQL server2008筛选时报错,无法为该请求检索数据 解决方案]

    当SQL数据太多时,我们需要通过筛选来查询自己需要的数据. 当我在使用SQLserver 2008的时候 遇到了这个错误1 以下是微软提供的解决方案的网址 (SQL SERVER SP1补丁) htt ...