docker详细笔记

Docker详细笔记

目录

  1. Docker简介
    • 什么是Docker
    • Docker的优势
  2. Docker基础概念
    • 镜像(Image)
    • 容器(Container)
    • 仓库(Repository)
  3. Docker环境安装
    • 在Windows上安装Docker
    • 在macOS上安装Docker
    • 在Linux上安装Docker
  4. Docker基本命令
    • 镜像命令
    • 容器命令
  5. Docker进阶操作
    • Dockerfile详解
    • 数据卷(Volumes)
    • 网络配置
  6. Docker实践应用
    • 使用Docker构建Web应用
    • 使用Docker进行持续集成/持续部署(CI/CD)
  7. 总结

Docker简介

什么是Docker

Docker是一个开源的容器化平台,旨在使应用程序在任何环境中都可以简单和一致地运行。通过使用操作系统层的虚拟化,Docker可以将软件包及其依赖项封装成一个标准化的单元(即容器)。

Docker的优势

  • 轻量级: 与传统的虚拟机相比,Docker容器更轻量级,可以在几秒钟内启动或停止。
  • 一致性: 通过Docker镜像,可以确保在本地开发的应用程序与在生产环境中运行的应用程序一致。
  • 高效资源使用: Docker可以共享主机的操作系统内核,从而有效减少系统资源消耗。

Docker基础概念

镜像(Image)

镜像是一个只读的模板,包含了创建Docker容器的指令。它类似于虚拟机中的快照。

容器(Container)

容器是镜像的一个运行实例。它不仅包含镜像中的全部内容,且添加了额外的应用程序状态。如果说镜像是建筑图纸,容器就是建筑成品。

仓库(Repository)

仓库是一组相关的镜像。通常,一个仓库包含多个版本的镜像。最常用的仓库是Docker Hub。

Docker环境安装

在Windows上安装Docker

  1. 下载并访问Docker Desktop for Windows

  2. 安装并运行Docker Desktop

  3. 通过命令行验证

    sh 复制代码
    docker --version

在macOS上安装Docker

  1. 下载并访问Docker Desktop for Mac

  2. 安装并运行Docker Desktop

  3. 通过命令行验证

    sh 复制代码
    docker --version

在Linux上安装Docker

以Ubuntu为例:

  1. 更新APT包索引

    sh 复制代码
    sudo apt-get update
  2. 安装依赖包

    sh 复制代码
    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  3. 添加Docker官方GPG密钥

    sh 复制代码
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  4. 设置稳定版仓库

    sh 复制代码
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. 安装Docker引擎

    sh 复制代码
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  6. 通过命令行验证

    sh 复制代码
    docker --version

Docker基本命令

镜像命令

  1. 拉取镜像

    sh 复制代码
    docker pull <image_name>
  2. 列出本地镜像

    sh 复制代码
    docker images
  3. 删除镜像

    sh 复制代码
    docker rmi <image_id>

容器命令

  1. 创建并运行容器

    sh 复制代码
    docker run -it <image_name>
  2. 列出运行中的容器

    sh 复制代码
    docker ps
  3. 停止容器

    sh 复制代码
    docker stop <container_id>
  4. 删除容器

    sh 复制代码
    docker rm <container_id>

Docker进阶操作

Dockerfile详解

Dockerfile是一个用于定义Docker镜像的构建步骤的文本文件。

示例Dockerfile:

dockerfile 复制代码
# 基础镜像
FROM ubuntu:20.04

# 维护者信息
LABEL maintainer="example@example.com"

# 安装依赖
RUN apt-get update && apt-get install -y nginx

# 复制文件到镜像
COPY . /var/www/html

# 暴露端口
EXPOSE 80

# 容器启动命令
CMD ["nginx", "-g", "daemon off;"]

数据卷(Volumes)

数据卷用于持久化数据,即使容器删除,数据仍然保留。

创建数据卷并挂载到容器:

sh 复制代码
docker run -it -v /host/path:/container/path <image_name>

网络配置

Docker允许通过桥接模式、自定义网络等方式配置网络。

创建自定义网络:

sh 复制代码
docker network create <network_name>

将容器加入自定义网络:

sh 复制代码
docker run -it --network <network_name> <image_name>

Docker实践应用

使用Docker构建Web应用

创建一个简单的Node.js应用并使用Docker进行容器化。

  1. 创建项目文件结构:

    复制代码
    myapp/
    ├── Dockerfile
    ├── package.json
    └── server.js
  2. 编写 package.json:

    json 复制代码
    {
      "name": "myapp",
      "version": "1.0.0",
      "main": "server.js",
      "dependencies": {
        "express": "^4.17.1"
      },
      "scripts": {
        "start": "node server.js"
      }
    }
  3. 编写 server.js:

    js 复制代码
    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.send('Hello, Docker!');
    });
    
    const PORT = process.env.PORT || 3000;
    app.listen(PORT, () => {
      console.log(`Server is running on port ${PORT}`);
    });
  4. 编写 Dockerfile:

    dockerfile 复制代码
    FROM node:14
    
    WORKDIR /usr/src/app
    
    COPY package.json .
    
    RUN npm install
    
    COPY . .
    
    EXPOSE 3000
    
    CMD ["npm", "start"]
  5. 构建镜像:

    sh 复制代码
    docker build -t myapp .
  6. 运行容器:

    sh 复制代码
    docker run -p 3000:3000 myapp

使用Docker进行持续集成/持续部署(CI/CD)

可以使用Docker结合Jenkins、GitLab CI等工具实现CI/CD流水线。

例如,在GitLab CI中使用Docker构建和部署:

yaml 复制代码
image: docker:latest

services:
  - docker:dind

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - docker build -t myapp .

deploy:
  stage: deploy
  script:
    - docker run -d -p 3000:3000 myapp

总结

通过本文的学习,我们详细介绍了Docker的基础知识、环境安装、基本命令、以及进阶操作。希望这些内容能帮助你更好地理解和使用Docker,提高开发和部署效率。Docker作为一个强大的工具,在现代软件开发中扮演着越来越重要的角色,掌握它将极大提升你的技术能力。

Docker官方文档:Docker Documentation

相关推荐
牛马工作号4 小时前
Docker Compose 部署 FreeRADIUS:从 AAA 原理到 Windows 有线 802.1X 认证实战
windows·docker·容器
知产xiao_xin4 小时前
商标权的保护
经验分享·笔记·知识产权
星恒随风4 小时前
Linux进程信号(二):深入理解信号阻塞、未决、sigaction、中断机制、可重入函数与SIGCHLD
linux·运维·服务器·笔记·学习
旖旎夜光4 小时前
【LangGraph实战】LangGraph 学习笔记(五):信息裁剪、人机交互与时间旅行
笔记·python·学习·ai·人机交互·langgraph
qq_284274058 小时前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
牛马工作号8 小时前
Mosquitto + ACME:从 Docker Compose 部署到 TLS 证书自动续期与加载
运维·docker·容器
ACP广源盛1392462567313 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
文人sec14 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
空空dream14 小时前
03 | 离线部署 FastAPI + Ollama(qwen2:0.5b):从 Docker 联调到 Kubernetes 验收
docker·ai·kubernetes·fastapi
摇滚侠15 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记