了解Docker
Docker
1 简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化,因此可以实现部分服务器的功能。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2 优点
- 轻量级:Docker 容器的大小仅几十MB,相比虚拟机镜像大小几百MB,节省了硬盘空间。
- 易于使用:Docker 容器通过简单易用的命令行界面,使得开发者可以快速上手。
- 弹性可伸缩:Docker 容器可以快速启动,秒级启动,因此可以在短时间内启动大量容器。
- 便携性:Docker 容器可以很方便地迁移到任何 Linux 或 Windows 机器上。
- 安全:Docker 容器提供的安全机制使得容器内的应用比虚拟机更加安全。
3 基本概念
- 镜像(Image):Docker 镜像是一个只读的模板,其中包含了运行容器所需的一切:代码、运行环境、库、配置等。
- 容器(Container):Docker 容器是一个运行中的镜像,它是镜像的运行实例。
- 仓库(Repository):Docker 仓库是一个集中存放镜像文件的地方,每个用户或组织可以有自己的仓库。
- 标签(Tag):Docker 镜像可以打上标签(Tag),标签的作用是给镜像加上一个别名,方便管理。
- Dockerfile:Dockerfile 是一个文本文件,包含了一条条的指令来构建镜像。
- 卷(Volume):卷是一个可供一个或多个容器使用的目录,它绕过 UFS,可以提供更多的灵活性和数据持久化能力。
- 网络(Network):Docker 网络让容器之间可以互相通信,可以将容器连接到同一个网络,甚至可以连接到外部网络。
- 联合文件系统(Union File System):UnionFS 是一种分层、轻量级并且高性能的文件系统,Docker 引擎默认使用 UnionFS 作为镜像和容器的存储驱动。
- Docker Hub:Docker Hub 是 Docker 官方提供的公共仓库,里面提供了大量的高质量的镜像。
- Docker Machine:Docker Machine 是 Docker 官方提供的命令行工具,用于简化 Docker 的安装和操作。
- Docker Compose:Docker Compose 是 Docker 官方提供的命令行工具,用于定义和运行多容器 Docker 应用。
- Swarm:Swarm 是 Docker 官方推出的集群管理工具,用于管理 Docker 集群。
- Kubernetes:Kubernetes 是 Google 开源的容器集群管理系统,可以自动化地部署、扩展和管理容器化的应用。
4 安装
- Windows:下载安装包,解压后直接运行。
在命令行中输入docker version
验证是否安装成功。
如果出现版本信息,则表示安装成功。
若出现以下错误:1
WSL 2 installation is incomplete. The WSL 2 Linux kernel is now installed using a separate MSI update package. Please click the link and follow the instructions to install the kernel update: https://aka.ms/wsl2kernel.Press Restart after installing the Linux kernel. RestartCancel
则需要先安装 WSL 2 Linux 内核更新包,WSL官方文档链接为:https://learn.microsoft.com/zh-cn/windows/wsl/
WSL是Windows Subsystem for Linux的缩写,是微软推出的基于Windows 10操作系统的兼容层,可以让用户在Windows系统上运行原生的Linux应用。
5 基本命令
docker run
:运行一个新的容器。- 参数:
-d
:后台运行容器。-i
:以交互模式运行容器,通常与-t
同时使用。-t
:为容器重新分配一个伪终端。-p
:指定端口映射,格式为hostPort:containerPort
。-v
:绑定目录,格式为hostDir:containerDir
。-e
:设置环境变量。--name
:指定容器名称。--rm
:容器退出后自动删除。--network
:指定网络。--link
:添加链接。(注意:--link
在新版本的 Docker 中已经被弃用,推荐使用--network
来连接容器)--restart
:设置容器自动重启策略。--mount
:绑定卷。--workdir
:指定工作目录。--entrypoint
:指定容器启动命令。--user
:指定用户。--cap-add
:添加权限。--cap-drop
:删除权限。--device
:添加设备。--dns
:设置 DNS 服务器。--dns-option
:设置 DNS 选项。--dns-search
:设置 DNS 搜索域。--label
:添加标签。--security-opt
:设置安全选项。--ulimit
:设置 ulimit 值。--log-driver
:设置日志驱动。--log-opt
:设置日志选项。--add-host
:添加主机条目到容器的/etc/hosts
文件。--help
:显示帮助信息。
5.1 其他 docker
命令
docker ps
:列出当前运行的容器。docker images
:列出本地已有的镜像。docker pull
:从 Docker Hub 或其他仓库下载镜像。docker build
:根据 Dockerfile 构建镜像。docker commit
:提交当前容器为新的镜像。docker rmi
:删除本地的镜像。docker stop
:停止一个运行中的容器。docker rm
:删除一个或多个停止的容器。docker network
:管理 Docker 网络。docker volume
:管理 Docker 卷。docker login
:登录 Docker Hub 或其他仓库。docker logout
:登出 Docker Hub 或其他仓库。docker info
:显示 Docker 系统信息。docker exec
:在运行中的容器中执行命令。docker stats
:显示 Docker 容器的资源占用情况。docker system prune
:清理 Docker 系统资源(例如,删除未使用的容器、网络、镜像等)。docker tag
:给镜像打标签。docker push
:上传镜像到 Docker Hub 或其他仓库。docker inspect
:获取镜像、容器、网络、卷的详细信息。docker history
:查看镜像的历史记录。docker save
:将镜像保存到 tar 文件。docker load
:从 tar 文件加载镜像。docker stack
:管理 Docker 集群(包括部署、删除堆栈等)。docker swarm
:管理 Docker Swarm 集群。docker node
:管理 Docker 集群节点。docker config
:管理 Docker 配置文件。docker secret
:管理 Docker 机密。docker service
:管理 Docker 服务。docker plugin
:管理 Docker 插件。docker trust
:管理 Docker 信任。docker compose
:使用 Docker Compose 管理多容器应用。docker stack deploy
:部署 Docker 堆栈(stack)到集群。
请注意,有些命令如 docker stack deploy
是特定于 Docker Swarm 模式下的,用于管理跨多个主机的 Docker 服务。此外,某些命令(如 docker login
和 docker logout
)出现了多次,实际上只需要列出一次即可。
6 Docker-hello,world
下面是一个简单的 Docker 应用示例:
1 | PS C:\Windows\system32> docker run -i -t ubuntu:15.10 /bin/bash |
这条命令运行了一个名为 ubuntu:15.10
的 Docker 镜像,并以交互模式 (-i -t
) 进入容器的 bash 命令行。在容器内,我们可以运行常见的 Linux 命令,如 ls
列出当前目录的内容。若要退出容器,输入 exit
。
7 Dockerfile及真正创建Docker容器
要使用Docker在你的本地机器上搭建一个Web服务器,你可以按照以下步骤操作。这里我将展示如何创建一个基于Nginx的Web服务器,Nginx是一个广泛使用的高性能HTTP服务器和反向代理。
7.1 步骤1: 安装Docker
首先确保你的系统中已经安装了Docker。如果尚未安装,请访问Docker官网下载并安装适合你操作系统的版本。
7.2 步骤2: 拉取Nginx镜像
打开命令行工具(如Windows的CMD或PowerShell,Mac或Linux的终端),运行下面的命令来拉取官方的Nginx镜像:
1 | docker pull nginx |
这条命令会从Docker Hub下载最新的Nginx镜像到你的机器上。
7.3 步骤3: 运行Nginx容器
使用以下命令启动一个新的Nginx容器,并将容器的80端口映射到主机的80端口:
1 | docker run --name some-nginx -p 80:80 -d nginx |
这条命令中的--name some-nginx
是给容器命名,-p 80:80
是端口映射,-d
表示以后台方式运行容器。
7.4 步骤4: 访问Web服务器
此时,你应该能够在浏览器中通过输入http://localhost/
来访问Nginx的默认页面。
7.5 步骤5: 配置Nginx
如果你想在本地Web服务器上托管自己的网站,你需要做一些配置。首先,创建一个包含你的HTML文件的目录,例如:
1 | mkdir ~/my_nginx_site |
然后,你可以修改上面的docker run
命令来挂载这个目录作为容器内的一个卷:
1 | docker run --name some-nginx -p 80:80 -v ~/my_nginx_site:/usr/share/nginx/html -d nginx |
这里-v ~/my_nginx_site:/usr/share/nginx/html
指定了一个数据卷,把主机上的~/my_nginx_site
目录挂载到了容器内的/usr/share/nginx/html
目录。
7.6 步骤6: 查看和管理容器
你可以使用以下命令查看正在运行的容器:
1 | docker ps |
如果需要停止或启动容器,可以使用如下命令:
1 | docker stop some-nginx |
要删除容器,使用:
1 | docker rm some-nginx |
以上就是使用Docker创建一个本地Web服务器的基本步骤。根据你的具体需求,可能还需要进行更详细的配置,比如设置Nginx的配置文件来自定义服务器行为等。
8 注意事项
- 由于 Docker-hub 在国外,可能存在网络问题,可以使用国内镜像规避。
主流镜像源:Docker Hub、阿里云、腾讯云、网易云、Quay.io、GitHub Container Registry、Docker官方镜像仓库等。
使用方法:在 Docker Engine 选项中的大括号间添加”registry-mirrors”: [“镜像地址”]
- 如何结束vememm进程
vmmem进程占用资源其实就表示有虚拟机在占用着资源。我们可以先通过下面这个指令来关闭Windows Subsystem for Linux (WSL)虚拟机来结束vmmem进程。打开powershell,输入:
1 | wsl --shutdown |