实验环境: CENTOS 7.4
官方网站:https://www.docker.com/
源代码下载:https://github.com/docker/docker.github.io
安装说明 https://docs.docker.com/compose/install/#prerequisites
docker容器技术和虚拟机对比:
相同点: docker容器技术和虚拟机技术,都是虚拟化技术。
docker相对于VM虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高
一、安装 直接使用centos系统自带的yum源安装
yum -y install docker
启动docker平台:
[root@146~]# systemctl start docker #启动 docker 服务
[root@146~]# systemctl enable docker #设置开机启动docker服务
[root@146~]# docker version #显示 Docker 版本信息
查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。
info信息中 :
Network: bridge host macvlan null overlay #桥接到主机的 docker0 上,在物理机上执行ifconfig 可以看到 docker0 桥设备
Docker Root Dir: /var/lib/docker ##默认的 docker 的家目录
Registry: https://index.docker.io/v1/ #默认的 dockerhub 的镜像源
建立 docker 用户组(参考)
默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。建立 docker 组: $ sudo groupadd docker
将当前用户加入 docker 组: $ sudo usermod -aG docker $USER
下载docker镜像
[root@146~]# docker search centos #从 Docker Hub 中搜索符合条件的镜像。
名字 描述 受欢迎受欢迎程度 是否官方提供
如果OFFICIAL 为[ok] ,说明可以放心使用。
方法1:从公网docker hub 拉取(下载)image pull:拉
[root@146~]# docker pull docker.io/centos
(#报错了,因为网络的问题。 无法连接到dockerhub 下载镜像。 如果你的网络没有问题,你可以下载。)
方法2:163镜像
[root@146 ~]# docker pull hub.c.163.com/library/tomcat:latest
[root@146 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/library/tomcat latest 72d2be374029 4 months ago 292.4 MB
查看 images 列表
[root@146 ~]# docker images #列出本地所有镜像。其中 [name] 对镜像名称进行关键词查询。
[root@146 ~]# docker images
请开启动网络转发功能 否则回报IPV4的错误
开启动网络转发功能,默认会自动开启.
手动开启:
[root@146 ~]# vim /etc/sysctl.conf #插入以下内容 (也可以 echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 直接添加)
net.ipv4.ip_forward = 1
[root@146 ~]# sysctl -p #生效
net.ipv4.ip_forward = 1
[root@146 ~]# cat /proc/sys/net/ipv4/ip_forward
1
否则会报错以下警告: WARNING: iPv4 forwarding is disabled network will not work 的处理
虚悬镜像
上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有
标签,均为
ays ago 342 MB
这个镜像原本是有镜像名和标签的,原来为 mongo:3.2 ,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了
这类无标签镜像也被称为 虚悬镜像(dangling image)
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命
令删除。
$ docker rmi $(docker images -q -f dangling=true)
二、docker平台基本使用方法
例1:运行一个 container并加载镜像centos,运行起来这个实例后,在实例中执行 /bin/bash命令
docker常用参数:
run 运行
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行 再次进入一个正在运行的容器 docker attach id或name
[root@146~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 196e0ce0c9fb 12 days ago 196.6 MB
[root@146~]# docker run -it docker.io/centos:latest /bin/bash #启动一个实例,也就2秒就可以搞定
[root@068fd8c70344 /]# ls #查看实例环境
[root@f072b5ae7542 /]# cat /etc/redhat-release
退出容器:
[root@f072b5ae7542 /]#exit
例2:在 container 中启动一个长久运行的进程,不断向stdin输出 hello world 。模拟一个后台运行的服务
docker常用参数:
-d 后台运行容器,并返回容器ID;
-c 后面跟待完成的命令
[root@146~]# docker run -d docker.io/centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"
1b3493487c4fde6eb233d59fa9ab9a204ad993cd3debbd5a9a28be6816694605
#容器的ID
从一个容器中取日志,查看输出的内容
语法: docker logs 容器实例的Name/ID
[root@146~]# docker logs 1b3493487c4 #容器的ID可以写全,也可以不写全,只要唯一就可以了
查看正在运行的容器:
[root@146~]# docker ps #列出所有运行中容器。
[root@146~]# docker ps -a #-a 列出所有容器(包含沉睡/退出状态的容器);
例3:杀死一个容器。 比如:杀死一个正在后台运行的容器
杀死ID为c4a213627f1b的容器
[root@146~]# docker kill c4a213627f1b #杀死一个容器
[root@146~]# docker stop 1a63ddea6571 #关闭容器
[root@146~]# docker restart 1a63ddea6571 #重启
删除指定 container : rm
[root@146~]# docker rm e085da6919af
[root@146~]# docker rm -f 1a63ddea6571 #强制删除
删除镜像 :decker rmi 镜像id
.docker 特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像 CPU 和内存等可以分配到丌同的容器中,使用 cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。
日志记录:Docker 将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手劢配置。
交互式 shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互 shell。
优点:
1.一些优势和 VM 一样,但不是所有都一样。
比 VM 小,比 VM 快,Docker 容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker 启劢一个容器实例时间徆短,一两秒就可以启劢一个实例。
2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT 的发布速度更快。
Docker 是一个开放的平台,构建,发布和运行分布式应用程序。
Docker 使应用程序能够快速从组件组装和避免开发和生产环境乊间的摩擏。
3.您可以在部署在公司局域网或云或虚拟机上使用它。
4.开发人员并丌关心具体哪个 Linux 操作系统
使用 Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。
然后,在部署时一切是完全一样的,因为一切都在 DockerImage 的容器在其上运行。
开发人员负责并且能够确保所有的相关性得到满足。
5.Google,微软,亚马逊,IBM 等都支持 Docker。
6.Docker 支持 Unix/Linux 操作系统,也支持 Windows 或 Mac
缺点局限性:
1.Docker 用于应用程序时是最有用的,但并丌包含数据。日志,跟踪和数据库等通常应放在 Docker
容器外。 一个容器的镜像通常都徆小,丌适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:
NFS,ipsan,MFS 等, -v 映射磁盘分区
一句话:docker 叧用于计算,存储交给别人。
oracle 不适合使用 docker 来运行,太大了,存储的数据太多
---------------------