一、docker介绍
1.1 什么是docker
Docker 容器是一种轻量级的虚拟化技术,它使得应用程序能够在独立的环境中运行,而不需要像传统虚拟化技术那样占用更多的系统资源。
1.2 为什么要用docker
Docker 容器是一个可运行的软件包,包括应用程序、依赖项和配置文件,它们可以在任何支持 Docker 的操作系统上运行,包括 Linux、Windows 和 macOS。Docker 容器具有以下优点:
- 简化应用程序部署:容器使得应用程序在任何环境中都可以轻松部署和运行,从而加快了部署速度。
- 提高开发和测试效率:开发人员可以使用容器来构建和测试应用程序,这使得开发人员可以更快地获得反馈和调试应用程序。
- 提高可移植性:Docker 容器可以在任何支持 Docker 的平台上运行,因此应用程序可以轻松地从一个环境迁移到另一个环境中。
- 提高安全性:容器提供了一定的隔离性,使得应用程序可以在安全的环境中运行,而不会对主机系统造成影响。
总结一句话:开箱即用,快速部署,可移植性强,环境隔离
二、Docker入门基础
2.1 docker 安装
Docker 的安装步骤因操作系统而异。以下是在 Linux、Windows 的基本步骤:
在 Windows 10(专业版) 上安装 Docker:
Docker for Win10 安装包下载地址:
https://store.docker.com/editions/community/docker-ce-desktop-windows
国内镜像加速
https://registry.docker-cn.com #Docker中国区
http://hub-mirror.c.163.com #网易
在 Linux 上安装 Docker:
-
安装环境:Centos 7
-
安装条件:docker官方要求至少3.8以上,建议3.10以上
-
Docker 版本:docker EE 企业版本、docker CE 社区版本
-
修改seliunx 配置
vi /etc/selinux/config
-
关闭防火墙:
systemctl stop firewalld.service
-
安装wget命令:
yum install -y wget
-
下载阿里云docker社区版 yum源
cd /etc/yum.repos.d/ wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
查看docker安装包:
yum list | grep docker
-
安装Docker Ce 社区版本:
yum install -y docker-ce.x86_64
-
设置开机启动:
systemctl enable docker
-
更新xfsprogs:
yum -y update xfsprogs
-
启动docker:
systemctl start docker
-
重启docker:
systemctl restart docker.service
-
查看版本:
docker version
-
查看详细信息:
docker info
2.2 docker镜像的下载、查看、删除
什么是docker镜像
镜像(Image)是一个包含了应用程序运行所需的所有依赖关系、配置信息和代码的轻量级可执行软件包。Docker 镜像是构建 Docker 容器的基础,它可以被认为是一个只读的模板,用于创建容器实例。
在 Docker 中,通过使用 Docker 镜像,管理员和开发者可以轻松地创建、启动、停止和删除容器,从而实现快速、可靠和可重复的应用程序部署。
配置阿里云镜像加速
vim /etc/docker/daemon.json
改为下面内容
{ "debug":true,"experimental":true, "registry-mirrors":["https://pb5bklzr.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] }
然后重启docker
systemctl restart docker.service
查看信息
docker info
相关命令:
- 搜索镜像:
docker search centos
- 搜索镜像并过滤是官方的:
docker search --filter "is-official=true" centos
- 搜索镜像并过滤大于多少颗星星的:
docker search --filter stars=10 centos
- 查看镜像:
docker images
- 下载镜像:
docker pull redis
- 删除镜像:
docker rmi redis
- 修改本地镜像名字(小写):
docker tag redis myredis
2.3 docker容器构建等基本操作
docker镜像与容器之间的关系
我们可以把 Docker 镜像和容器的关系类比为烹饪中的食谱和菜肴的关系。
食谱是菜肴的模板,描述了制作菜肴所需的所有原材料、调料和制作方法,它们是静态的,一旦制作完成就不会再被改变。
而菜肴则是根据食谱制作的可食用实例,是一个独立的、可执行的对象,它们是动态的,可以在制作、调味和食用过程中进行修改和更新。
类比到 Docker 技术中,Docker 镜像就相当于食谱,它包含了应用程序运行所需的所有依赖关系、配置信息和代码。而容器则是根据镜像创建的可运行实例,就像菜肴是根据食谱制作的可食用实例。通过使用不同的镜像,就像使用不同的食谱制作不同的菜肴一样,可以创建不同的容器,同时一个镜像也可以被用来创建多个容器。
Docker 镜像和容器是 Docker 技术中两个重要的概念,它们之间的关系如下:
- 镜像是容器运行所需的文件系统和应用程序的只读模板,它包含了应用程序运行所需的所有依赖关系、配置信息和代码。容器则是镜像的可运行实例,是一个独立的、可执行的软件包。
- 容器可以被创建、启动、停止、删除和重启。容器启动时会基于镜像创建一个新的文件系统层,并将其挂载为容器的根文件系统,从而成为一个独立的运行环境。容器中的任何修改都会保存在容器的文件系统层中,这些修改不会影响到原始的镜像。
- 镜像是静态的,一旦构建完成就不会再被改变,但可以通过更新和重新构建来创建新的镜像版本。容器则是动态的,可以随时启动、停止和删除,并可以在运行时修改和更新。
- 容器可以通过使用不同的镜像来创建,同一个镜像也可以被用来创建多个容器。容器和镜像之间是一种多对一的关系,即一个镜像可以被用来创建多个容器,但一个容器只能对应一个镜像。
容器相关命令:
- 构建容器:
docker run -itd --name=myredis redis
-i :表示以交互模式运行容器(让容器的标准输入保持打开)
-d:表示后台运行容器,并返回容器ID
-t:为容器重新分配一个伪输入终端
–name:为容器指定名称 - 查看本地所有的容器:
docker ps -a
- 查看本地正在运行的容器:
docker ps
- 停止容器:
docker stop CONTAINER_ID / CONTAINER_NAME
- 一次性停止所有容器:
docker stop $(docker ps -a -q)
- 一次性起动所有容器:
docker start $(docker ps -a -q)
- 启动容器:
docker start CONTAINER_ID / CONTAINER_NAME
- 重启容器:
docker restart CONTAINER_ID / CONTAINER_NAME
- 删除容器:
docker rm CONTAINER_ID / CONTAINER_NAME
- 强制删除容器:
docker rmi -f CONTAINER_ID / CONTAINER_NAME
- 查看容器详细信息:
docker inspect CONTAINER_ID / CONTAINER_NAME
- 进入容器:
docker exec -it 0ad5d7b2c3a4 /bin/bash
2.4 docker容器的文件复制与挂载
在 Docker 中,容器和宿主机之间可以通过文件复制和挂载实现文件的共享和传递。
文件复制是指将文件从宿主机复制到容器内或者从容器内复制到宿主机。例如,可以使用 docker cp 命令将宿主机中的文件复制到运行中的容器内:
//从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径
docker cp /path/to/local/file container_name:/path/to/container/file
也可以将容器内的文件复制到宿主机中:
//从容器复制到宿主机:docker cp 容器名字/ID:容器路径 宿主机本地路径
docker cp container_name:/path/to/container/file /path/to/local/file
文件挂载是指将宿主机上的文件系统目录挂载到容器中作为容器的一个目录,并且容器内的修改会即时反映到宿主机的文件系统上。在运行容器时,使用 -v 或者 --mount 参数来进行文件挂载。例如:
//宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像ID
docker run -v /path/to/local/directory:/path/to/container/directory image_name