一、定义
- 官方定义:Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由 Docker Inc. 公司 前 dotC1oud公司, PaaS市场中的老牌提供商)的团队编写,基于 Apache 2.0开源授权协议发行。
- 程序员能理解的定义:Docker是Docker Inc. 公司开源的一个基于Linux技术构建容器的容器引擎,其源代码在GitHub上,基于Go语言开发并遵从Apache 2.0协议;
- 普通人能理解的定义:“没有集装箱,就不会有全球化。”而Docker就是IT领域里改变世界的“集装箱”;
- 圈里人总结:Docker是一套以容器技术为核心的IT标准化构建体系。它不仅仅是一项技术,更不仅仅是一家公司,Docker必将改变整个IT世界,“Build Ship Run”。
二、优势
- 对开发人员来说:Docker提供了简单快速的隔离环境,无需再为配置环境操心,让程序跑到哪都一样;
- 对运维人员来说:Docker可以快速构建出一整套无状态分布式基础设施,使得运维工作可以通过程序化的脚本来完成;
- 对业务人员来说:从每月或每周才能发布的新版本到只需1小时就能发布完毕,迅速满足用户新需求;
- 标准化应用发布:Docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
- 节约时间:快速部署和启动,VM启动一般是分钟级,Docker容器启动是秒级;
- 方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
- 节约成本:以前一个虚拟机至少需要几个G的磁盘空间,Docker容器可以减少到MB级;
- 方便持续集成:通过与代码进行关联使持续集成非常方便;
- 可以作为集群系统的轻量主机或节点:在IaaS平台上,已经出现了CaaS,通过容器替代原来的主机。
三、docker的基本命令
1.查找已经安装docker
# yum list installed | grep -i docker
yum方式卸载docker
# sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装依赖
# sudo yum install -y yum-utils
3.修改Docker镜像下载地址
# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum命令
# yum makecache fast
4. 安装docker
# sudo yum install -y docker-ce docker-ce-cli containerd.io
5.docker启动、设置开机启动
# systemctl start docker
# systemctl enable docker
验证是否安装启动成功
# docker version
6.获取CentOS镜像
# docker pull centos
7.查看所有的镜像
# docker images
8.创建docker 容器(可以根据一个镜像创建多个容器)
# docker run -tid 镜像ID /bin/bash //非centos7
# docker run -tid 镜像ID /usr/sbin/init //centos7版本。使用/usr/sbin/init解决systemctl报错不能使用的问题
9.查看容器列表
# docker ps -a
10.重命名容器名称
# docker rename old容器名 new容器名
11.停止容器
# docker stop 容器名称
12.进入容器
# docker exec -it 容器名称 /bin/bash
注:如果出现
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown
这样的错误,是我们docker镜像中的/bin/bash文件并不存在,可能存在的是/bin/sh文件,使用
# docker exec -it 44fc0f0582d9 /bin/sh
13.退出容器
# exit
14.删除容器
# docker rm 容器名称
15.删除镜像
# docker rmi 镜像ID
16.Docker文件拷贝(容器<=>docker)
# docker cp 原路径 docker容器名:docker容器路径(系统=》docker)
# 例如:docker cp MySQL-server-5.6.38-1.el7.x86_64.rpm firstMain:/root/
# docker cp docker容器名:docker容器路径 原路径(docker=》系统)
# 例如:docker cp firstMain:/etc/my.cnf /etc/my.cnf
17.查看docker容器的IP地址
# docker inspect 容器名 | grep IPAddress