在认识Docker之前,我们要先学习一下什么是容器?
什么是容器?不知道大家有没有遇到过,有的时候同样的代码在你的主机上能运行,但是移动到另一台主机上就会报错,究其原因是因为两台主机的运行环境不同。 那么我们有没有一种方法,可以在移动代码的时候连同代码的运行环境也一起移动,这样在运行代码的时候就不需要考虑运行环境的问题了。 这种方法就是——容器技术,简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。 容器在宿主机操作系统中,在用户空间以分离的进程运行。容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。
注意容器和虚拟化不同 虚拟化使得许多操作系统可同时在单个系统上运行。 容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。 说完了容器我们就该回到Docker了 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。 Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。 总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker的三个基本概念
- Image(镜像):镜像(Image)可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
- Container(容器):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- Repository(仓库):仓库可看成一个代码控制中心,用来保存镜像。
- 启动Docker
systemctl start docker
- 关闭Docker
systemctl stop docker
- 查看Docker状态
systemctl status docker
- 列出本机镜像
docker images
- 拉取镜像到本地 不加tag即拉取该镜像的最新版本latest,加tag则是拉取该镜像的指定版本,版本号可以在docker hub中查看
docker pull 镜像名
docker pull 镜像名:tag
- 查找镜像 从docker hub中查找满足要求的镜像,然后可以从中选择合适的镜像下载
docker search 镜像名
- 运行镜像
docker run 镜像名(:Tag)
- 删除镜像
docker image rm 镜像名
-f 强制删除 - 设置镜像标签
docker tag 镜像名/镜像ID 镜像名:TAG
- 查看正在运行的容器列表
docker ps
-a 查看所有容器(包括已停止的) - 启动一个容器
docker run -it 镜像名 /bin/bash
-i:交互式操作 -t:终端 -d:指定容器的运行模式,默认不会进入容器 /bin/bash:放在镜像后的是命令,这里我们希望有个交互式的Shell,因此用的是/bin/bash - 停止容器
docker stop 容器名/容器ID
- 启动已停止的容器
docker start 容器名/容器ID
- 删除容器
docker rm -f 容器名/容器ID
- 进入容器
docker exec -it 容器名/容器ID /bin/bash
- 退出终端
exit
dockfile是一个用于制作docker镜像的源码文件,内容是构建镜像过程的指令,在一个文件夹中,如果有一个名字为Dockfile的文件,其内容满足语法要求,在这个文件夹路径下执行命令:docker build --tag name:tag .,就可以按照描述构建一个镜像了。name是镜像的名称,tag是镜像的版本或者是标签号,不写就是lastest。注意后面有一个空格和点。 dockerfile的使用详解
docker-composeCompose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。 Docker-Compose是一个容器编排工具,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个.yml或.yaml文件里,执行docker-compose up命令就像执行脚本一样,一个一个的安装并部署容器。
docker-compose将所管理的容器分为三层: 工程(project):docker compose运行目录下的所有yml文件 服务(service):一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。 容器(container):一个服务可包括多个容器实例,所有的容器都通过services来定义
示例:
version: "3" //指定语法的格式的版本
services: //定义服务
nginx: //服务的名称
container_name: web-nginx //容器的名称
image: nginx:latest //所使用的镜像
restart: always //随docker服务的启动而启动
ports:
- 80:80 //映射的端口
volumes:
- /root/compose/webserver:/usr/share/nginx/html //本地与容器挂载的目录
docker-compose详解 常用服务配置参考