shoufeng

瘦风的南墙

Docker 01 - CentOS 7 中安装 Docker 的详细步骤

容器大行其道, 不来试一手怎能感知其强大? 本文主要是写给0基础的小白 (对, 就是博主本人😂) 作为入门参考, 步骤详细, 对安装过程中遇到的坑都有一一记录, 如有疑问, 可直接评论区留言😄

1 初识 Docker

1.1 Docker 原理简介

关于 Docker, 引用百度百科上的介绍:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 的架构:Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器(Container)通过 Docker 镜像(Image)来创建,二者之间的关系类似于面向对象编程中的对象与类。

Docker 服务端(daemon)一般在宿主机后台运行,等待接收来自客户端的请求,并处理这些请求(创建、运行、分发容器)。 Docker 客户端可以和服务端既可以运行在一个机器上,为用户提供一系列命令,用户通过这些命令(也可以是 Socket 或者RESTful API )与 Docker daemon 进行交互。

Docker 与虚拟机的区别, 可以参考这篇博客: 虚拟机与Docker有何不同?

1.2 Docker 核心概念

Docker 的核心概念有三个:

(1) 仓库 (Repository): Docker 存放镜像文件的仓库, 与 Maven、 Git 等的仓库类似, Docker 官方提供了一个名为 Docker Hub 的注册服务器来保存多个仓库, 每个仓库又可以包含多个不同tag的镜像;

(2) 镜像 (Image): 是构建容器的源代码, 是一个只读的模板, 由一层一层的文件系统组成;

(3) 容器 (Container): 是由 Docker 镜像创建的运行实例, 容器中包含特定的应用及其所需的依赖文件, 容器之间相互隔离.

镜像与容器的理解:

  • Docker 镜像: 相当于面向对象语言(比如 Java)中的类, 也可简单类比虚拟机的镜像;
  • Docker 容器: 相当于面向对象语言中由类创建的对象, 也可简单类比虚拟机.

2 安装 Docker

2.1 查看系统内核版本

要安装 Docker, 首先要保证 Linux 系统是否符合要求, Docker 官方建议Linux内核版本要在 3.8以上.

root用户登录系统, 查看系统的内核版本及发行版本号:

[root@localhost ~]# uname -a
Linux localhost 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

可以看出来, 博主这里演示所用的内核版本是3.10.

2.2 更新 yum 包

(1) 修改系统的 yum 源为阿里源:

为了提高安装时的下载速度, 国内用户建议将 yum 源修改为阿里云提供的源. —— 此步骤可省略.

# 备份原镜像文件, 便于后期恢复
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.backup

# 下载新的 CentOS-Base.repo
# CentOS-5: 
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
# CentOS-6:
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# CentOS-7:
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清除缓存:
[root@localhost yum.repos.d]# yum clean all
# 生成缓存:
[root@localhost yum.repos.d]# yum makecache

如果上述清除缓存、生产缓存过程中, 发生如下异常:

Another app is currently holding the yum lock; waiting for it to exit...
  The other application is: yum
    Memory :  24 M RSS (328 MB VSZ)
    Started: Fri Sep 27 17:38:23 2019 - 04:02 ago
    State  : Traced/Stopped, pid: 10512

可通过 ps aux | grep yum 定位正在使用yum服务的进程, 然后通过kill -9 PID 杀死该进程, 最后再尝试清除缓存、生成缓存操作.

(2) 更新 yum 包 —— 为了避免发生不必要的异常, 必须更新:

[root@localhost ~]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package GeoIP.x86_64 0:1.5.0-11.el7 will be updated
--> Processing Dependency: geoipupdate for package: GeoIP-1.5.0-14.el7.x86_64
---> Package NetworkManager.x86_64 1:1.8.0-9.el7 will be updated
......
--> Finished Dependency Resolution
Dependencies Resolved
......
Total                                                       2.2 MB/s | 412 MB  00:03:04     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : libgcc-4.8.5-39.el7.x86_64                              1/745 
  Updating   : centos-release-7-7.1908.0.el7.centos.x86_64             2/745 
......
  Verifying  : e2fsprogs-1.42.9-10.el7.x86_64                          743/745 
  Verifying  : python-slip-0.4.0-2.el7.noarch                          744/745 
......

Complete!

2.3 安装软件包

安装需要的软件包, 其中 yum-util 提供 yum-config-manager 功能, 另外两个是 device-mapper 驱动的依赖.

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2.4 向 yum 中添加 Docker 仓库

# 注意: 下述https链接与yum命令是同一条, 不要换行:
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

2.5 安装指定版本的 Docker

(1) 完成上述步骤后, 即可查看仓库中的所有 Docker 版本:

[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror, langpacks
 * extras: mirrors.aliyun.com
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
......
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
......
 * base: mirrors.aliyun.com
Available Packages

(2) 通过命令 yum install docker-ce-版本号安装Docker, 这里安装的是18.06.3.ce:

[root@localhost ~]# yum install -y docker-ce-18.06.3.ce
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
......
Complete!

2.6 启动 Docker

# 启动Docker:
[root@localhost ~]# systemctl start docker
# 根据需要, 选择是否加入开机自启动:
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

2.7 验证安装是否成功

通过docker version命令查看, 如果有 Client 和 Server 两部分信息, 表示 Docker 安装、启动成功了:

[root@localhost ~]# docker version 
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:17 2019
  OS/Arch:          linux/amd64
  Experimental:     false

3 扩展内容

3.1 卸载旧版本 Docker

如果宿主机上曾经安装过 Docker, 再次安装时可能发生错误, 卸载方法如下:

[root@localhost ~]# yum remove docker docker-common docker-selinux docker-engine

3.2 常用的 Docker 命令

详细内容请参考: Docker 基础用法和命令帮助

docker ps             # 查看当前正在运行的容器
docker ps -a          # 查看所有容器的状态
docker images         # 查看本地镜像

docker rm id/name     # 删除某个容器
docker rmi id/name    # 删除某个镜像
docker attach id      # 进入某个容器(使用exit退出后, 容器也将停止运行)
docker exec -it id    # 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)

docker start/stop id/name             # 根据 id/name 启动/停止某个容器
docker build -t heal/tomcat:8.5.43 .  # 通过当前目录下的 Dockerfile 创建一个名为 “heal/tomcat:8.5.43” 的镜像
docker run -it -d -p 7070:8080 --name tomcat heal/tomcat:8.5.43   # 以镜像 “heal/tomcat:8.5.43” 创建名为 “tomcat” 的容器, 并以后台模式运行, 将端口映射到宿主机的 7070 端口上

下篇将介绍如何通过 Docker 部署一个 Tomcat 容器, 并发布 Web 项目, 请关注😄


参考资料

Centos修改yum源为国内阿里源

Docker 基础用法和命令帮助

Centos7下安装Docker(详细的新手装逼教程)

版权声明

作者: 马瘦风(https://healchow.com)

出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)

感谢阅读, 如果文章有帮助或启发到你, 点个[好文要顶👆] 或 [推荐👍] 吧😜

本文版权归博主所有, 欢迎转载, 但 [必须在文章页面明显位置标明原文链接], 否则博主保留追究相关人员法律责任的权利.

posted @ 2019-09-27 15:09  瘦风  阅读(2217)  评论(0编辑  收藏  举报