Docker是什么
docker是一种容器虚拟化技术,它不像虚拟机一样模拟操作系统,而是对程序进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要拥绑整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
中文官网:https://www.docker-cn.com/
与虚拟机的区别
https://www.jianshu.com/p/50f48eb25215
为什么要使用Docker
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
1、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
docker三个要素
- Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
- Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。可以把容器看作是一个简易版的Linux环境(包括root用户权限,进程空间)和运行在其中的应用程序。
- Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为
https://registry.hub.docker.com/
,也可以搭建自己私有的Docker registry。
正确的理解它们之间的关系
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件。只有通过这个镜像文件才能生成Docker容器。image 文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
* image文件生成的容器实例,本身也是一一个文件,称为镜像文件。
*一个容器运行一 种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
*至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。
Centos7下安装docker
官网网址:https://docs.docker.com/install/linux/docker-ce/centos/
安装gcc yum -y install gcc yum -y install gcc- c++ yum install -y yum-utils device-mapper-persistent-data lvm2 设置存储库,官网上面地址太慢容易出错这里使用阿里云地址 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum索引库 yum makecache fast 安装 yum -y install docker-ce 卸载指令 yum -y remove docker-ce rm -rf /var/lib/docker
启动docker
systemctl start docker
配置阿里云镜像加速
创建目录
mkdir -p /etc/docker
获取加速网址https://cr.console.aliyun.com/#/accelerator,把加速地址配置到docker中
1. vim /etc/docker/daemon.json 2. 填写保存 3. {"registry-mirrors": ["你的加速地址"]}
重新加载并重启,使用docker info就可以看到我们配置的地址
1. systemctl daemon-reload 2. systemctl restart docker
加载第一个镜像
docker run hello-world
出错解决方法https://www.jb51.net/article/145998.htm
它首先会从本地仓库中找是否有这个镜像,如果没有的话会从阿里云的仓库中pull一个到本地仓库,并在容器中运行。
如何查找镜像支持的版本
由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过docker hub来搜索支持的版本。
进入docker hub的官网,地址:https://hub.docker.com
docker命令
docker inspect [容器或者镜像id] 查看基本信息 docker info 查看docker信息 docker run 把镜像放入容器并运行,不写版本号默认是latest docker images 查看所有的镜像 docker ps 查看当前正在运行的容器[-a -q 表示当前正在运行的容器并只显示id可以用&{docker ps -a -q}组合使用批量删除] docker start 运行容器 docker stop 停止容器 docker build 创建镜像 docker pull 获取镜像[如果不添加tag的话默认是下载最新版本latest] docker rm 删除容器 docker rmi 删除镜像[-f强制,如果不添加tag的话默认是删除最新版本latest]可以跟多个镜像名称,空格分开 docker cp 从本机上拷贝到容器 docker commit 保存改动为新的容器 docker --help查看所有指令 docker kill :杀掉一个运行中的容器
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
docker交互式运行
docker run it [名字或者容器id] [run后面 -p 8888:8080 8888为主机端口,8080为内部docker端口]
--name:容器新名字
-i:以交互模式运行容器
-t:为容器重新分配一个伪输入终端
-P:随机端口映射
-p:指定端口映射
后台运行,并返回容易id,启动守护式容器
docker run -d [名字或者容器id]
docker容器后台运行,就必须有一个前台进程
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
查看容器日志
t:是加入时间戳
f:是最新的日志打印
tail:是显示最后8条
docker logs -f -t --tail 8 [容器ID]
退出容器的两种方法
exit 容器停止退出
ctrl+P+Q 容器不停止退出
重新进入容器
docker attach [容器id]
在外面对容器执行指令
docker exec -it [容器id] [指令]
拷贝文件从容器中拷贝文件到宿主机中
docker cp [容器id]:/路径文件 宿主机位置
以当前容器为标准创建镜像(就是修改完配置后)【a表示作者,m标准信息,最后表示镜像名称和版本】
docker commit -a="lq" -m="new tomcat" a8c7a03ee12a tomcat02:1.2
dockerfile命令
FROM 基础镜像 RUN 执行命令 ADD 添加文件 COPY 拷贝文件 CMD 执行命令 EXPOSE 暴露端口 WORKDIR 指定路径 MAINTAINER 维护者 ENV 设定环境变量 ENTRYPOINT 容器入口 USER 指定用户 VOLUME 安装点