Docker是一个应用打包、分发、部署的工具,它的特性包括跨平台、支持多种系统、性能好、自动化程度高和稳定性好。与普通虚拟机相比,Docker更轻量级,只虚拟软件所需运行环境,最大化减少没用的配置。Docker的部署方式包括打包、分发和部署。打包是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包;分发是把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装;部署是拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一模一样的运行环境,不管是在Windows/Mac/Linux上。
Docker部署的优势在于确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。使用Docker的简要介绍包括挂载目录创建虚拟网络、创建dockerfile文件+一个yml文件和执行docker-compose up -d 命令即可实现多个容器通信-d 以后台的方式运行容器。
Dockerfile和docker-compose区别在于单个。
Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。Docker有以下几个主要的功能:
- 镜像:Docker使用镜像来创建和运行应用程序。镜像是一个只读的模板,其中包含了运行应用程序所需的所有文件和设置。
- 容器:容器是镜像的运行实例。每个容器都是独立的,并可以在不同的环境中运行。
- 仓库:Docker使用仓库来存储和管理镜像。
- 命令行界面:Docker提供了一个命令行界面,用于管理容器、镜像和仓库。
关于Docker命令介绍,你可以参考这个链接 。
Redis 官网:https://redis.io/
在 Redis 官网上,您可以找到下载安装教程。然而,这些教程仅提供源码安装方式,没有针对 Windows 版本的安装指南。如果您想自己安装 Windows 版本,需要寻找其他人编译好的安装包。
Docker 官方镜像仓库查找 Redis:https://hub.docker.com/
要使用 Docker 运行 Redis,您可以在 Docker 官方镜像仓库中查找 Redis。以下是一个简单的命令示例:
```bash
docker run -d -p 6379:6379 --name redis redis:latest
```
这个命令将后台运行一个名为 "redis" 的容器,并将容器的 6379 端口绑定到主机的 6379 端口。您可以在 Docker Desktop 中查看容器和镜像,以及容器的状态(正在运行)。
要查看 Redis 容器的运行日志,您可以使用 `redis-cli` 命令行工具。例如:
```bash
redis-cli logs
```
其中 `
接下来,我们将介绍如何使用 Docker 安装 WordPress。首先,创建一个名为 `docker-wordpress.yml` 的文件,内容如下:
```yaml
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: pass
WORDPRESS_DB_NAME: dbname
volumes:
db: {}
```
在这个配置文件中,我们使用了官方的 WordPress Docker 镜像,并将其暴露在主机的 8000 端口上。同时,我们还设置了一些环境变量,用于连接到 MySQL 数据库。最后,我们创建了一个名为 "db" 的卷,用于持久化数据。
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。使用 Docker 可以简化应用的部署、扩展和管理。
以下是一些常用的 Docker 命令:
1. `docker run`:运行一个容器,可以指定可选参数,如端口映射、名称等。如果没有指定镜像,则会先下载镜像。
2. `docker build`:根据 Dockerfile 文件构建镜像。
3. `docker image ls`:列出本地所有的镜像。
4. `docker-compose up`:启动并管理多个容器,例如 Nginx、MySQL 和 Redis 等服务。
5. `docker-compose down`:停止并删除由 docker-compose 创建的所有容器。
6. `docker exec`:在运行中的容器中执行命令。
7. `docker logs`:查看容器的日志输出。
8. `docker cp`:在容器和主机之间复制文件或目录。
9. `docker commit`:将容器保存为新的镜像。
10. `docker save`:将镜像保存为 tar 归档文件。
11. `docker load`:从 tar 归档文件加载镜像。
12. `docker network`:管理 Docker 网络。
13. `docker volume`:管理 Docker 卷。
14. `docker-machine`:管理多台 Docker 主机。
八、目录挂载
现存问题:
- 未挂载:`docker run --name c_test demo_1:v0`
- 挂载:`docker run --name a_test -v E:\docker_all:/docker_all -d demo_1:v0`
几种挂载方式:
- bind mount:使用绝对路径 `-v D:/code:/app`
- volume:只需要一个名字 `-v db-data:/app`
文档参考:https://docs.docker.com/storage/
挂载演示(在run的时候挂载):
bind mount方式:`docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1`
不执行挂载截图
挂载后截图
执行命令进行挂载,还是按前面的案例
```bash
docker run --name a_test -v F:\docker_project\abc:/app -d demo_1:v0
```
然后打开桌面docker的容器点击,查看Inspect里面的Mounts,路径挂载成功,此时你修改自己本地的代码,容器的代码也会同时跟着修改。
九、多容器通讯
创建虚拟网络:
要想多容器之间互通,从 Python 容器访问 Redis 容器,我们只需要把他们放到同个网络中就可以了。
```pythonimport redis
from redis.StrictRedis import StrictRedis
# 创建一个名为test-net的网络
docker network create test-net
# 运行 Redis 在 test-net 网络中,别名redis
docker run -d --name redis --network test-net --network-alias redis redis:latest
# 修改python的redis连接地址为网络别名
r = StrictRedis(host='redis', port=6379, db=0, password=None)
# 运行 Python 项目,使用同个网络
docker run -p 8011:8011 --name test -v F:\docker_project\abc:/app --network test-net -d demo_1:v0
```
你好,你可以通过修改Dockerfile文件来实现你的需求。具体来说,你可以在Dockerfile中添加或修改指令,以便在构建镜像时使用。例如,如果你想要将端口号从8011更改为8012,可以在Dockerfile中添加以下指令:
```
EXPOSE 8012
```
这将告诉Docker在构建镜像时公开端口8012。然后,你可以使用docker build命令重新构建镜像。如果你使用的是Windows系统,需要确保在命令提示符下运行此命令。
```dockerfile
# 第一行是解析器指令,始终用版本1语法的最新版本
# 基础镜像 FROM python:3.7-slim-buster
# 设置工作目录文件夹 WORKDIR ./app
# 复制依赖文件 COPY requirements.txt requirements.txt
# 安装依赖 RUN /usr/local/bin/python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
# RUN pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple/
# RUN pip install fastapi -i https://mirrors.aliyun.com/pypi/simple/
# RUN pip install redis -i https://mirrors.aliyun.com/pypi/simple/
# # RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# # 复制其他的脚本文件 COPY . .
# 当启动容器时候,执行程序 CMD ["python", "./docker_web.py"]
FROM python:3.7-slim-buster
WORKDIR ./app
COPY requirements.txt requirements.txt
RUN /usr/local/bin/python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install fastapi -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install redis -i https://mirrors.aliyun.com/pypi/simple/
# RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 复制其他的脚本文件 COPY . .
CMD ["python", "docker_web.py"]
```
执行`docker build`命令构建镜像。
执行`docker run`命令运行容器。
1、构建镜像并挂载
```bash
docker build -f F:\docker_project\abc\dockerfile -t demo_2:v0 .
```
# 2、运行容器,不设置虚拟网络
```bash
docker run --name d_test -p 8011:8011 -v F:\docker_project\abc:/app -d demo_2:v0
```
# 3、测试浏览器打开 http://localhost:8011/aa,会发现一直无法加载,原因是无法连接redis
# 4、下载redis镜像
```bash
docker pull redis
```
# 5、创建网络
```bash
docker network create test-net
```
# 6、运行redis容器,并设置网络别名为redis
```bash
docker run -d --name redis_net --network test-net --network-alias redis redis:latest
```
# 7、修改python代码以及redis连接地址
```python
from flask import Flask, request
from redis import Redis,StrictRedis
import os
app = Flask(__name__)
r = StrictRedis(host=os.environ['REDIS_ADDR'], port=6379, db=0, password=None)
@app.get("/{_word}")
def index(_word):
print("web_return", _word)
r.rpush('web_name', _word)
print("redis_llen:", r.llen('web_name'))
return f"{r.llen('web_name')}_{_word}"
```
# 8、运行Web项目,使用同个网络
```bash
docker run -p 8011:8011 --name test2 -v F:\docker_project\abc:/app --network test-net -d demo_2:v0
```
# 9、再次浏览器打开 http://localhost:8011/aa 测试看看
现存问题:在上节中,我们运行了两个容器:Web项目和Redis。如果项目依赖更多的第三方软件,我们需要管理的容器就更加多,每个都要单独配置运行,指定网络。为了解决这个问题,本节我们将使用docker-compose把项目的多个服务集合到一起,一键运行。
安装Docker Compose:
首先,我们需要安装Docker Compose。请参考官方文档进行安装:https://docs.docker.com/compose/install/
编写脚本:
接下来,我们需要编写一个名为`docker-compose.yml`的脚本文件。在这个文件中,我们将定义项目的各个服务及其配置。
```yaml
version: "3.7"
services:
app:
build: ./
ports:
- 8011:8011
volumes:
- ./:/docker_all
environment:
- TZ=Asia/Shanghai
redis:
image: redis:5.0.13
volumes:
- redis:/data
environment:
- TZ=Asia/Shanghai
volumes:
redis:
```
跑起来:
现在我们已经编写好了脚本文件,接下来我们需要运行这个脚本来启动项目的所有服务。在命令行中执行以下命令:
```bash
docker-compose up
```
命令参考:https://docs.docker.com/compose/reference/up/
docker-compose其他命令:
- 在后台运行只需要加一个`-d`参数:`docker-compose up -d`
- 查看当前多个服务运行状态:`docker-compose ps`
- 停止运行:`docker-compose stop`
- 重启:`docker-compose restart`
一、Docker 常用命令
1. 重启单个服务:`docker-compose restart service-name`
2. 进入容器命令行:`docker-compose exec service-name sh`
3. 查看容器运行日志:`docker-compose logs [service-name]`
二、镜像仓库介绍及使用方法
1. 镜像仓库用来存储我们 build 出来的“安装包”,Docker 官方提供了一个镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。
2. 我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便传播。
3. 当然你也可以搭建自己的私有镜像库,或者使用国内各种大厂提供的镜像托管服务,例如:阿里云、腾讯云。
三、上传镜像的方法
1. 创建一个镜像库:`docker build -f E:\docker_all\dockerfile -t test:v1 .`
2. `docker login -u 用户名`
3. `docker tag test:v1 用户名/test:v1`
4. `docker push 用户名/test:v1`
5. `docker run -dp 8080:8080 用户名/test:v1`
四、阿里云容器托管使用方法
1. Docker 官方的镜像托管有时候上传和下载都太慢了,如果你想要更快的速度,可以使用阿里云的免费镜像托管。
2. 登录阿里云,备份数据迁移。
3. 报错解决:
1. WSL 2 installation is incomplete.
解决步骤1:控制面板->程序->程序和功能,打开如下勾选,如还有问题看步骤2。
解决步骤2:点击链接安装最新版本的 WSL2。
下载地址,如果还有问题看步骤3。
执行命令:`netsh winsock reset`
2. Docker Desktop is unable to detect a Hypervisor.
问题出在 Hyper-V 已禁用或 Hypervisor 代理未运行。方案一 (如果完全禁用或未安装 Hyper-V):`docker desktop 基于 windows hyper-v,必须确保 hyper-v 组件已经开启。可通过如下 PowerShell (管理员身份)命令启动。```powershell
1、以管理员身份打开CMD
2、启用Hyper-V:`dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All`
```
方案一:
1. 打开“控制面板”->“程序”->“启用或关闭Windows功能”。
2. 在弹出的窗口中,找到“Hyper-V”选项,取消勾选。
3. 点击“确定”,系统会提示需要重启电脑,点击“立即重启”。
4. 重启后,再次进入“启用或关闭Windows功能”窗口,勾选“Hyper-V”,然后点击“确定”。
5. 系统会自动安装Hyper-V相关组件,等待安装完成后,即可正常使用Docker Desktop。
方案二 (如果Hyper-V功能已启用但不起作用)
1. 确保Hyper-V守护进程已启动。可以通过以下PowerShell命令启动(管理员身份):
```powershell
bcdedit /set hypervisorlaunchtype auto
```
2. 重启电脑,启动Docker Desktop,即可正常运行。
确保 BIOS 已开启虚拟化功能是非常重要的,下面是如何检查并操作的步骤:
首先,你需要查看你的系统是否已经开启了虚拟化。你可以通过在命令提示符(CMD)中输入 `wmic cpu get /format:list` 命令来查看你的 CPU 是否支持虚拟化技术。如果输出的信息中包含 "vmx" 或 "svm",那么说明你的 CPU 支持虚拟化。
然后,你需要进入 BIOS 并确认虚拟化已经被开启。具体的操作方法会因为不同的主板品牌和型号而有所不同。一般来说,你可以在电脑开机时按下特定的键(比如 F2、F10、Del 等)来进入 BIOS 设置。在 BIOS 界面中,你需要找到 "Advanced"、"CPU Configuration" 或者类似的选项,然后在其中找到关于虚拟化的设置。如果找到了 "Intel Virtualization Technology" 或者 "AMD-V",那么说明虚拟化已经被开启。
如果你无法在 BIOS 中找到这些选项,或者找不到如何开启虚拟化的方法,你可以尝试在网上搜索你的主板型号 + "BIOS 设置"。网上通常会有详细的教程指导你如何进行操作。需要注意的是,Intel 和 AMD 的 BIOS 设置方法可能会有所不同,所以你可能需要根据你的具体主板型号来查找相应的设置方法。