基于CentOS7的Docker快速入门教程

0. 前提说明

目前,CentOS 仅发行版本中的内核支持Docker。 Docker运行在CentOS 7.上,要求系统为64位、系统内核版本为3.10以上。 Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位、系统内核版本为2.6.32-431或者更高版本。
本次实验环境:CentOS7 64位

1.docker installation

Open Linux Command Line:

Uninstall old versions

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Install using the repository

Set up the repository

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Install Docker Engine

sudo yum install docker-ce docker-ce-cli containerd.io

(Notice that,to simplify the procedure, we only install the latest version of Docker Engine,if you want to install a specific version, just try it.

Start Docker

 sudo systemctl start docker

Verify that Docker Engine is installed corre

sudo docker run hello-world

yep, success!

基于CentOS7的Docker快速入门教程_第1张图片
To find out more, please check official dicuments→Install Docker Engine on CentOS

2. 阿里云镜像加速

在​阿里云中注册一个属于自己的阿里云账户( 可复用淘宝账号),打开镜像加速器

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
ps,这里每个人被分配到的文件不一样,所以需要自己亲自操作一下。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qqglsjfh.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

重新启动 Docker 后台服务

service docker restart

Linux系统下配置完加速器需要检查是否生效,使用命令:

docker info

在茫茫码海里找到aliyuncs,说明成功配置镜像。
基于CentOS7的Docker快速入门教程_第2张图片

中科院镜像加速

更改daemon.json(/etc/docker/daemon.json),变更了镜像极速器的地址。用了科大的镜像加速器

“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn/”]

基于CentOS7的Docker快速入门教程_第3张图片
然后,systemctl daemon-reload && systemctl restart docker

前两步其实能整合一下,我在这个找到一个很全面的,可以借鉴。

3.底层原理

到底什么是docker

Docker是一个Client-Server结构的系统,Docker守 护进程运行在主机上,然后通过Socket连 接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。一个docker 容器,是一个运行时环境,可以简单理解为进程运行的集装箱。

为什么Docker比虚拟机快?

1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。

基于CentOS7的Docker快速入门教程_第4张图片

2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。

Docker容器 虚拟机VM
操作系统 与宿主机共享OS 宿主机OS上运行宿主机OS
运行性能 几乎无额外性能损失 操作系统额外的cpu、内存消耗
存储大小 镜像小,便于存储与传输 镜像庞大(vmdk等)
硬件亲和性 面向软件开发者 面向硬件运维者
移植性 轻便、灵活、适用于Linux 笨重、与虚拟化技术耦合度高

3. Docker常用命令

帮助命令

docker version:查看版本

docker info:更进一步说明

*docker --help:帮助命令

容器命令

  • docker images 列出本机上的镜像
OPTIONS 说明:
-a 列出本地所有的镜像(含中间映射层)
-q 只显示镜像ID
--digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
docker search 某个XXX镜像的名字

在这里插入图片描述

  • docker search [OPTIONS] 镜像名字

在这里插入图片描述

OPTIONS 说明
--no-trun 显示完整的镜像描述
-s 列出收藏数不小于指定值的镜像
  • docker pull 某个镜像的名字:下载镜像
    使用阿里云镜像之后就会快很多啦!
    基于CentOS7的Docker快速入门教程_第5张图片
  • docker rmi 某个XXX镜像的名字ID:删除镜像
删除单个 docker rm -f 镜像ID
删除多个 docker rm -f 镜像名1:TAG 镜像名2:TAG
删除多个 docker rmi -f ${docker images -qa}

容器命令

有镜像才能创建容器,这是根本前提,这里将下载一个Centos镜像演示。
docker pull centos
基于CentOS7的Docker快速入门教程_第6张图片
说明我们已经把最新的centos给pull进来了。

  • docker run [OPTIONS] IMAGE [COMMAND][ARG] :新建并启动容器
OPTIONS 说明
--name="容器新名字":为容器指定一个名称;
-d:后台运行容器,并返回容器ID, 也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

基于CentOS7的Docker快速入门教程_第7张图片
于是我们用run指令运行起来了。

  • docker ps [OPTIONS]:列出当前所有正在运行的容器
OPTIONS说明(常用) :
-a :列出当前所有正在运行的容器+历史上运行过的
-|:显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
  • 退出容器:两种退出方式
    exit 容器停止退出
    ctrl+P+Q 容器不停止退出
    在这里插入图片描述
    其实可以把一个docker容器看作一个小的Linux系统。可以看到,我们原先是在centos里面,因此和localhost的IP字段不一样。

  • docker attach 容器ID:重新进入
    在这里插入图片描述

  • docker start/restart/stop/kill 容器ID或容器签名:启动/重启/停止/强制停止容器

  • docker rm 容器ID -f:删除已停止的容器
    docker rm -f $(docker ps -a -q)
    docker ps -a -q | xargs docker rm

  • docker logs -f -t --tail 容器ID :查看容器日志

​ -t 是加入时间戳
​ -f 跟随最新的日志打印
​ --tail 数字显示最后多少条
  • docker top 容器ID:查看容器内的进程

  • docker inspect 容器ID :查看容器内部细节

  • docker exec -it 容器ID bashShell:进入正在运行的容器并以命令行交互

  • docker cp 容器ID:容器内路径 目的主机路径 :从容器内拷贝文件到主机上
    基于CentOS7的Docker快速入门教程_第8张图片
    这里的主机是指centOS虚拟机,而不是windows!!

Docker镜像实验

打开docker

systemctl daemon-reload

systemctl restart docker.service

拉取镜像

从ubuntu 的docker hub上拉取镜像下来:

docker pulll ubuntu:18.04
基于CentOS7的Docker快速入门教程_第9张图片

用docker images命令在本地的镜像仓库展示刚才拉取的数据
基于CentOS7的Docker快速入门教程_第10张图片

进入镜像

然后让这个镜像运行起来:
基于CentOS7的Docker快速入门教程_第11张图片
运行结束后会自己进入到新创建的镜像当中去

基于CentOS7的Docker快速入门教程_第12张图片

修改数据

先apt-get update 一下

基于CentOS7的Docker快速入门教程_第13张图片
安装需要的应用
基于CentOS7的Docker快速入门教程_第14张图片

打包镜像

退出容器在这里插入图片描述
docker ps 查ID
在这里插入图片描述
在docker 容器外,就是你的宿主机上使用下面的命令打包镜像

 sudo docker commit -m="ubuntu-vim" -a="19291087" 1e4c9900cb77 19291087/joycychou

-m 参数后面跟一下镜像的信息

-a 参数是作者信息,自行填写

1e4c9900cb77这一串是docker 容器的ID

后面的参数,19291087,是你docker hub上的账号

斜杠后面,是你的dockcer hub 上的仓库名 :你的镜像tag 标签

运行后会生成一个新的镜像基于CentOS7的Docker快速入门教程_第15张图片
基于CentOS7的Docker快速入门教程_第16张图片

上传镜像

push镜像,命令如下:

docker push <hub-user>/<repo-name>:<tag>

基于CentOS7的Docker快速入门教程_第17张图片

验证成果

登录到dockerhub网站,查看一下刚才创建的仓库名称,如图:

基于CentOS7的Docker快速入门教程_第18张图片

Docker数据管理实验

数据卷volume功能特性

数据卷是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定。数据卷 是被设计用来持久化数据的
对于数据卷你可以理解为NFS中的哪个分享出来的挂载点,指宿主机共享的目录。
主要有如下的功能和特性

  • 容器中数据的持久存储
  • 容器间的资源共享
  • 容器的迁移(分布式)
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除 (注意docker自主管理的会被删除,容器删除前一定要对数据卷进行备份)

实际操作

在root用户条件下创建一个数据卷

$ docker volume create my-vol

基于CentOS7的Docker快速入门教程_第19张图片
查看所有的 数据卷

$ docker volume ls
 
local               my-vol

基于CentOS7的Docker快速入门教程_第20张图片
查看指定 数据卷 的信息

基于CentOS7的Docker快速入门教程_第21张图片

升级docker至最新版本(否则后续部分工作没法完成)

1、查看系统要求
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本。

uname -a
2、删除旧版本
yum remove docker docker-common docker-selinux docker-engine
3、安装需要的软件包
yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置Docker yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看所有仓库中所有docker版本
可以查看所有仓库中所有docker版本,并选择特定的版本安装。

yum list docker-ce --showduplicates | sort -r
6、安装docker
sudo yum install docker-ce
由于repo中默认只开启stable仓库,故这里安装的是最新稳18.03.0.ce-1.el7.centos。

如果要安装特定版本:

sudo yum install docker-ce-18.06.1.ce
7、启动
设置为开机启动

systemctl enable docker
启动

systemctl start docker

目录挂载

启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,通过以下方式指定:

docker run -it -v /test:/soft centos /bin/bash

这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
基于CentOS7的Docker快速入门教程_第22张图片
宿主机目录如果不存在,则会自动生成
如果宿主机中存在/test目录,首先删除它
基于CentOS7的Docker快速入门教程_第23张图片
启动容器,查看宿主机,发现新增了一个/test目录
基于CentOS7的Docker快速入门教程_第24张图片

数据卷volume共享方式

实现数据卷有如下三种方法

  • Bind mount volume:用户需要明确指定容器中的目录和宿主机中的哪个目录进行绑定
  • Docker Management Volume:docker daemon自行管理将容器中的目录和宿主机中的哪个目录进行绑定
  • 基于一个现有容器实现多个容器之间文件共享
  1. Bind mount volume

第一步:在宿主机创建目录并准备测试文件

mkdir /ken
echo "test for volumes by ken">/ken/index.html‘

第二步:启动容器

docker container run -it --name ken1 -p 7879:80 --rm -v /ken:/data/ busybox

基于CentOS7的Docker快速入门教程_第25张图片

-it:互动模式登录容器,并分配一个终端

–name:指定容器名称

-p:小p指定容器的80端口映射为宿主机的7879端口。忘记的童鞋可以温习我上一篇博客《Docker端口映射及创建镜像演示(二)–技术流ken》

–rm:表示退出容器时,容器一起删除

-v:指定volumes,格式为: 宿主机共享目录:容器目录 ,这样宿主机的/ken目录就被挂载到了容器的/data/目录下了

第三步:查看挂载点
在这里插入图片描述

可以发现容器内有了/data目录而且还有了我们创建测试文件

注意:如果容器内没有我们指定的挂载点,会自动创建

[root@localhost joycychou]# docker container run -it --name ken -v /ken:/data/ busybox
/ # ls /data
index.html
/ # cat /data/index.html 
test for volumes by ken
/ # 

第四步:启动容器的apache

第无五步:浏览器进行访问

现在我们就可以使用宿主机的IP地址加上我们映射的端口就可以访问容器中的网站数据内容了
基于CentOS7的Docker快速入门教程_第26张图片

第七步:修改网站数据进行测试

现在我们修改宿主机分享出去的目录下的内容,检查看容器内的内容是否会发生改变

基于CentOS7的Docker快速入门教程_第27张图片

第八步:浏览器刷新

可以发现我们追加的内容已经可以看到了,说明容器中网站数据内容已经被成功修改了
基于CentOS7的Docker快速入门教程_第28张图片

数据迁移备份

第一步:删除容器

首先删除所有容器
基于CentOS7的Docker快速入门教程_第29张图片
第二步:查看宿主机文件

数据卷有一个特性就是即使容器被删除了,数据卷也会一直存在

但是需要注意docker自主管理的数据卷会被删除,容器删除前一定要做备份。

现在我们自己创建的数据卷还在

[root@ken ~]# cat /ken/index.htmltest for volumes by kenthis is the append line for ken

第三步:启动一个容器

docker run --name ken3 -it -p 6767:80 -v /ken:/data/ --rm busybox
在这里插入图片描述

第四步:启动容器的apache

/ # httpd -h /data

第五步:浏览器访问

访问浏览器可以看到如下的界面
基于CentOS7的Docker快速入门教程_第30张图片

这样就实现了数据的迁移。

你可能感兴趣的:(linux,docker,centos,linux)