Docker容器

Docker容器化部署学习:从入门到实践指南

本文主要是介绍Docker容器化部署学习:从入门到实践指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文详细介绍了Docker容器化部署学习的全过程,从基础概念到环境搭建,再到基本命令操作和Dockerfile编写入门,以及实战部署案例和日常维护技巧,帮助读者全面掌握Docker容器化部署。

Docker容器化部署学习:从入门到实践指南
Docker基础概念介绍

什么是Docker

Docker是一种开源的应用容器引擎,它可以让开发者将应用及其依赖打包到一个可移植的容器中,在各种环境中运行,包括本地计算机、虚拟机和云平台。Docker提供了一种更高效的方式来管理应用的部署和扩展。

Docker与虚拟机的区别

虚拟机

虚拟机(Virtual Machine, VM)是一种在计算机硬件和操作系统之间模拟整个硬件系统的软件。它通过一个虚拟化层(如VMware、VirtualBox)来模拟物理硬件,使操作系统和应用能够像在真实的硬件上运行一样运行。每个虚拟机包含一个完整的操作系统和相关的库、应用程序以及所需的任何其他文件。每个虚拟机都有自己的虚拟硬件,包括CPU、内存、硬盘和网络接口。

Docker容器

Docker容器则是基于Linux命名空间和cgroups等技术实现的轻量级虚拟化。Docker容器运行在操作系统级别,而不是硬件级别。Docker容器共享宿主机的操作系统内核,并运行在用户空间。这使得Docker容器比虚拟机更轻量,启动速度更快,资源消耗更少。

Docker的核心组件

  • 镜像(Image):Docker镜像是一个只读的模板,包含运行应用所需的所有信息,包括代码、运行时、库、环境变量和配置文件。
  • 容器(Container):容器是从镜像创建的运行实例。它可以启动、停止、删除。每个容器都是相互隔离的,提供一个独立运行环境。
  • 仓库(Registry):Docker仓库是存放Docker镜像的地方。Docker Hub是最常用的公共仓库,用户可以上传、下载和共享镜像。
  • Dockerfile:Dockerfile是创建Docker镜像的脚本文件,包含构建镜像所需的所有命令和参数。
Docker环境搭建

在Windows/Linux/Mac上安装Docker

Windows

  1. 访问Docker官网(https://www.docker.com/products/docker-desktop)
  2. 下载适用于Windows系统的Docker Desktop
  3. 安装过程中,确保选择安装“Docker Desktop for Windows”选项
  4. 安装完成后,启动Docker Desktop
  5. 在Docker Desktop窗口中,点击“Settings” -> “Resources” -> “Docker settings” -> “Docker Engine”
  6. 在配置窗口中,点击“Add daemon”按钮,添加--registry-mirror https://<your_mirror_url>(可选),以使用镜像加速功能
  7. 点击“Apply & Restart”

Linux

  1. 访问Docker官网(https://www.docker.com/products/docker-desktop)
  2. 根据Linux发行版选择合适的安装包,例如Ubuntu 18.04:
    • curl -fsSL https://get.docker.com -o get-docker.sh
    • sudo sh get-docker.sh
  3. 添加用户到docker组,以便可以使用docker命令而无需sudo权限:
    • sudo usermod -aG docker $USER
    • newgrp docker
  4. 安装完成后,运行docker --version验证安装是否成功

Mac

  1. 访问Docker官网(https://www.docker.com/products/docker-desktop)
  2. 下载适用于Mac系统的Docker Desktop
  3. 安装完成后,启动Docker Desktop
  4. 在Docker Desktop窗口中,点击“Settings” -> “Resources” -> “Docker settings” -> “Docker Engine”
  5. 在配置窗口中,点击“Add daemon”按钮,添加--registry-mirror https://<your_mirror_url>(可选),以使用镜像加速功能
  6. 点击“Apply & Restart”

验证Docker是否安装成功

  1. 打开命令行工具(Windows使用PowerShell,Linux和Mac使用Terminal)
  2. 输入命令docker --version,查看Docker版本信息
  3. 确认输出显示了Docker版本号
$ docker --version
Docker version 20.10.7, build f0df351
Docker基本命令操作

Docker镜像操作

  1. 拉取镜像

    从Docker仓库中下载指定的镜像到本地机器。以拉取Nginx服务器镜像为例:

    $ docker pull nginx

    输出:

    Using default tag: latest
    latest: Pulling from library/nginx
    03e68194c407: Pull complete
    089e784b3fa4: Pull complete
    5497b8f5904c: Pull complete
    65e9e50159b0: Pull complete
    55a5961312ff: Pull complete
    0d6e71c23510: Pull complete
    Digest: sha256:c4085c5f8f61e24f40d469e400783b06f27a3b9d3c07a4e807d5e0e9a8d6e8d0
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
  2. 列出镜像

    查看本地镜像列表:

    $ docker images

    输出:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              03e68194c407        2 weeks ago         133MB
  3. 删除镜像

    删除指定镜像。注意:删除镜像前需要确保没有容器正在使用该镜像。

    $ docker rmi nginx

Docker容器操作

  1. 运行容器

    使用镜像创建并启动容器。以运行Nginx服务器为例:

    $ docker run -d -p 80:80 nginx

    参数解释:

    • -d:后台运行容器
    • -p 80:80:将容器的80端口映射到宿主机的80端口

    输出:

    2abcaecc10c5a05d3cb842e4f5b0476fd0d2616d6c102e44d2ecbddd41eca48e
  2. 列出容器

    查看正在运行的容器:

    $ docker ps

    输出:

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    2abcaecc10c5        nginx               "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   hopeful_babbage
  3. 停止容器

    停止正在运行的容器:

    $ docker stop <container_id>
  4. 删除容器

    删除指定容器:

    $ docker rm <container_id>

Docker仓库使用

  1. 登录仓库

    登录Docker仓库。假设使用的是Docker Hub:

    $ docker login

    输出:

    Username: <your_username>
    Password: 
    Login Succeeded
  2. 推送镜像

    将本地镜像推送到Docker仓库:

    $ docker tag <image_id> <username>/<repository>:<tag>
    $ docker push <username>/<repository>:<tag>

    示例:

    $ docker tag nginx mydocker/nginx:latest
    $ docker push mydocker/nginx:latest
Dockerfile编写入门

Dockerfile的作用和基本语法

Dockerfile是一种文本文件,用于定义如何构建Docker镜像。它包含了一系列命令,这些命令会被Docker引擎按照顺序执行以生成镜像。

基本语法

  • FROM: 指定基础镜像
  • RUN: 执行命令
  • COPY: 复制文件或目录到镜像
  • CMD: 容器启动时执行的默认命令
  • EXPOSE: 暴露容器中的端口
  • ENTRYPOINT: 为容器定义默认的执行命令

常用Dockerfile指令解析

  • FROM

    FROM ubuntu:latest

    解释:

    • 从Ubuntu最新版本的镜像作为基础镜像
  • RUN

    RUN apt-get update && apt-get install -y python3

    解释:

    • 从基础镜像中安装Python3
  • COPY

    COPY . /app

    解释:

    • 将当前目录下的所有文件复制到镜像中的/app目录下
  • CMD

    CMD ["python3", "app.py"]

    解释:

    • 容器启动时默认执行Python脚本app.py
  • EXPOSE

    EXPOSE 8000

    解释:

    • 暴露容器的8000端口
  • ENTRYPOINT

    ENTRYPOINT ["python3", "app.py"]

    解释:

    • 容器启动时,默认执行Python脚本app.py

编写简单的Dockerfile实例

创建一个简单的Dockerfile来运行一个Python应用:

  1. 创建一个项目目录结构,例如myapp,并创建以下文件:

    myapp/
    ├── Dockerfile
    └── app.py
  2. 编辑Dockerfile

    FROM python:3.9-slim
    
    WORKDIR /app
    
    COPY . /app
    
    RUN pip install -r requirements.txt
    
    CMD ["python3", "app.py"]
  3. 编辑app.py

    # app.py
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
       return 'Hello, Docker!'
    
    if __name__ == '__main__':
       app.run(host='0.0.0.0', port=8000)
  4. 构建并运行容器:

    $ docker build -t myapp .
    $ docker run -p 8000:8000 myapp
Docker容器化部署实战

部署一个简单的Web应用

假设我们有一个简单的Python Flask应用,使用Docker来部署它。

  1. 创建项目目录结构,例如flask-app,并创建以下文件:

    flask-app/
    ├── Dockerfile
    └── app.py
  2. 编辑app.py

    # app.py
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
       return 'Hello, Flask!'
    
    if __name__ == '__main__':
       app.run(host='0.0.0.0', port=8000)
  3. 编辑Dockerfile

    FROM python:3.9-slim
    
    WORKDIR /app
    
    COPY . /app
    
    RUN pip install -r requirements.txt
    
    CMD ["python3", "app.py"]
  4. 构建并运行容器:

    $ docker build -t flask-app .
    $ docker run -p 8000:8000 flask-app

使用Docker Compose进行多容器部署

Docker Compose是一个工具,用于定义和运行多容器Docker应用。它通过一个docker-compose.yml文件来配置服务,使用docker-compose命令来启动和管理容器。

  1. 在项目根目录下创建docker-compose.yml文件:

    version: '3'
    services:
     web:
       build: .
       ports:
         - "8000:8000"
       depends_on:
         - db
     db:
       image: postgres:13.4-alpine
       environment:
         POSTGRES_USER: user
         POSTGRES_PASSWORD: password
         POSTGRES_DB: mydb
  2. 使用Docker Compose构建并启动应用:

    $ docker-compose up --build
  3. 访问应用

    • 网址:http://localhost:8000
Docker容器化部署的日常维护

容器的停止、重启和删除

  1. 停止容器

    $ docker stop <container_id>
  2. 重启容器

    $ docker restart <container_id>
  3. 删除容器

    $ docker rm <container_id>

镜像的更新和优化

  1. 更新镜像

    从仓库中拉取最新版本的镜像:

    $ docker pull <image_name>

    示例:

    $ docker pull nginx
  2. 优化镜像

    使用docker commit命令来保存容器的当前状态为新的镜像:

    $ docker commit <container_id> <new_image_name>

    示例:

    $ docker commit <container_id> myapp:v1

日志管理和监控

  1. 查看容器日志

    $ docker logs <container_id>
  2. 实时查看容器日志

    $ docker logs -f <container_id>
  3. 监控容器

    使用docker stats命令来查看容器的实时资源使用情况:

    $ docker stats <container_id>

通过以上步骤,您可以更好地管理和维护您的Docker容器化部署环境,确保应用的稳定性和可靠性。

这篇关于Docker容器化部署学习:从入门到实践指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!