一、安装docker
1、使用yum方式安装docker
#查看你当前的内核版本
uname -r
#安装 Docker
yum -y install docker
安装好,使用docker verison看是否安装好了。
2、建立docker组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
3、测试是否是否安装成功
$ docker run hello-world
如果有如下输出,那么就安装成功
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
二、安装centos镜像
1、下载镜像
从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
可以直接使用docker pull centos:7命令安装镜像
下载好之后,使用docker image ls查看拥有的镜像:
[hadoop@localhost ~]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 2d194b392dd1 3 weeks ago 195 MB
docker.io/hello-world latest f2a91732366c 4 months ago 1.85 kB
一个是centos镜像,另一个是我们之前使用docker run hello-world命令下载的镜像。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
2、运行容器
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。
[hadoop@localhost ~]$ docker run -it --rm centos bash
[root@58f67e873eb9 /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
docker run 就是运行容器的命令,说明一下上面用到的参数。
- -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因 此我们需要交互式终端。
- --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
- centos :这是指用centos 镜像为基础来启动容器。
- bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。
最后我们通过 exit 退出了这个容器。
你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。
[hadoop@localhost ~]$docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 195.4 MB 195.4 MB (99%)
Containers 1 0 0 B 0 B
Local Volumes 0 0 0 B
三、运行容器
1、使用命令运行容器
docker run -it -v /home/hadoop/build:/root/build -h master --name master centos /bin/bash
以centos镜像启动一个容器,容器名是master,主机名是master,并且将基于容器的centos系统的/root/build目录与本地/home/hadoop/build共享。
参数解释:
- -v 表示基于容器的centos系统的/root/build目录与本地/home/hadoop/build共享;这可以很方便将本地文件上传到Docker内部的centos系统;
- -h 指定主机名为master
- –-name 指定容器名
- /bin/bash 使用bash命令
2、刚安装的系统非常纯净,需要安装必备的软件
安装vim :yum intall vim
安装jdk:点击打开链接
安装完后,需要在/etc/profile中配置环境变量:
#set java environment
JAVA_HOME=/usr/java/{java的包名}
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
记得使用命令source /etc/profile .
使用java -version 查看是否安装成功
后来发现貌似在~/.bashrc文件中设置环境路径更好些,只在/etc/profile设置环境变量会出现错误:
localhost: Error: JAVA_HOME is not set and could not be found.错误,只有使用source /etc/profile 才行。
~/.bashrc文件中设置环境路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
不放心的话可以在/etc/profile和~/.bashrc都设置。
安装ssh:点击打开链接
但是这样的话,就需要每次在开启镜像时,都需要手动开启sshd服务,因此我们把这启动命令写进~/.bashrc文件,这样我们每次登录centos系统时,都能自动启动sshd服务
vim ~/.bashrc
在文件最后写入/usr/sbin/sshd -D &
3、保存镜像文件
现在我们已经有了安装好vim、jdk、ssh客户端服务端的centos容器,但在Docker内部的容器做的修改是不会自动保存到镜像的,也就是说,我们把容器关闭,然后重新开启容器,则之前的设置会全部消失,因此我们需要保存当前的配置;为了达到复用配置信息,我们在每个步骤完成之后,都保存成一个新的镜像,然后开启保存的新镜像即可;需要先到这个网址注册一个账号https://hub.docker.com/;账号注册成功后,然后在主机上(不是容器)新开一个终端,输入以下信息:
docker login
输入相应的用户名、密码,然后会提示登录成功。
有时会提示未连接上,这是可能是因为没有开启doker
$ sudo service docker start //开启Docker 服务
$ sudo chkconfig docker on //开机启动
使用命令docker ps查看当前运行的容器:
得到容器的id,也就是上图中container id :3cb1a1ed8ad0 。然后保存镜像,名字为centos/basic(自己取名),
然后使用命令docker commit 3cb1a1ed8ad0 centos/basic
输出sha256:a7e673e7f7b28e185385181a03326adc48b43359e8cc399bce1980dcb83dc565,即保存成功
使用命令docker images 查看当前docker中所有镜像。
参考:docker从入门到实践