目前,CentOS 仅发行版本中的内核支持Docker。 Docker运行在CentOS 7.上,要求系统为64位、系统内核版本为3.10以上。 Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位、系统内核版本为2.6.32-431或者更高版本。
本次实验环境:CentOS7 64位
Open Linux Command Line:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
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.
sudo systemctl start docker
Verify that Docker Engine is installed corre
sudo docker run hello-world
yep, success!
To find out more, please check official dicuments→Install Docker Engine on CentOS
在阿里云中注册一个属于自己的阿里云账户( 可复用淘宝账号),打开镜像加速器
通过修改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
更改daemon.json(/etc/docker/daemon.json),变更了镜像极速器的地址。用了科大的镜像加速器
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn/”]
然后,systemctl daemon-reload && systemctl restart docker
前两步其实能整合一下,我在这个找到一个很全面的,可以借鉴。
Docker是一个Client-Server结构的系统,Docker守 护进程运行在主机上,然后通过Socket连 接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。一个docker 容器,是一个运行时环境,可以简单理解为进程运行的集装箱。
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
Docker容器 | 虚拟机VM | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行宿主机OS |
运行性能 | 几乎无额外性能损失 | 操作系统额外的cpu、内存消耗 |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk等) |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
移植性 | 轻便、灵活、适用于Linux | 笨重、与虚拟化技术耦合度高 |
docker version:查看版本
docker info:更进一步说明
*docker --help:帮助命令
OPTIONS 说明:
-a 列出本地所有的镜像(含中间映射层)
-q 只显示镜像ID
--digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
docker search 某个XXX镜像的名字
OPTIONS 说明
--no-trun 显示完整的镜像描述
-s 列出收藏数不小于指定值的镜像
删除单个 docker rm -f 镜像ID
删除多个 docker rm -f 镜像名1:TAG 镜像名2:TAG
删除多个 docker rmi -f ${docker images -qa}
有镜像才能创建容器,这是根本前提,这里将下载一个Centos镜像演示。
docker pull centos
说明我们已经把最新的centos给pull进来了。
OPTIONS 说明
--name="容器新名字":为容器指定一个名称;
-d:后台运行容器,并返回容器ID, 也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
OPTIONS说明(常用) :
-a :列出当前所有正在运行的容器+历史上运行过的
-|:显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
退出容器:两种退出方式
exit 容器停止退出
ctrl+P+Q 容器不停止退出
其实可以把一个docker容器看作一个小的Linux系统。可以看到,我们原先是在centos里面,因此和localhost的IP字段不一样。
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:容器内路径 目的主机路径 :从容器内拷贝文件到主机上
这里的主机是指centOS虚拟机,而不是windows!!
systemctl daemon-reload
systemctl restart docker.service
从ubuntu 的docker hub上拉取镜像下来:
用docker images命令在本地的镜像仓库展示刚才拉取的数据
然后让这个镜像运行起来:
运行结束后会自己进入到新创建的镜像当中去
先apt-get update 一下
退出容器
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 标签
push镜像,命令如下:
docker push <hub-user>/<repo-name>:<tag>
登录到dockerhub网站,查看一下刚才创建的仓库名称,如图:
数据卷是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定。数据卷 是被设计用来持久化数据的
对于数据卷你可以理解为NFS中的哪个分享出来的挂载点,指宿主机共享的目录。
主要有如下的功能和特性
在root用户条件下创建一个数据卷
$ docker volume create my-vol
$ docker volume ls
local my-vol
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参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
宿主机目录如果不存在,则会自动生成
如果宿主机中存在/test目录,首先删除它
启动容器,查看宿主机,发现新增了一个/test目录
实现数据卷有如下三种方法
第一步:在宿主机创建目录并准备测试文件
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
-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地址加上我们映射的端口就可以访问容器中的网站数据内容了
第七步:修改网站数据进行测试
现在我们修改宿主机分享出去的目录下的内容,检查看容器内的内容是否会发生改变
第八步:浏览器刷新
可以发现我们追加的内容已经可以看到了,说明容器中网站数据内容已经被成功修改了
第一步:删除容器
数据卷有一个特性就是即使容器被删除了,数据卷也会一直存在
但是需要注意docker自主管理的数据卷会被删除,容器删除前一定要做备份。
现在我们自己创建的数据卷还在
第三步:启动一个容器
docker run --name ken3 -it -p 6767:80 -v /ken:/data/ --rm busybox
第四步:启动容器的apache
/ # httpd -h /data
第五步:浏览器访问
这样就实现了数据的迁移。