Docker详细笔记
目录
- Docker简介
- 什么是Docker
- Docker的优势
- Docker基础概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
- Docker环境安装
- 在Windows上安装Docker
- 在macOS上安装Docker
- 在Linux上安装Docker
- Docker基本命令
- 镜像命令
- 容器命令
- Docker进阶操作
- Dockerfile详解
- 数据卷(Volumes)
- 网络配置
- Docker实践应用
- 使用Docker构建Web应用
- 使用Docker进行持续集成/持续部署(CI/CD)
- 总结
Docker简介
什么是Docker
Docker是一个开源的容器化平台,旨在使应用程序在任何环境中都可以简单和一致地运行。通过使用操作系统层的虚拟化,Docker可以将软件包及其依赖项封装成一个标准化的单元(即容器)。
Docker的优势
- 轻量级: 与传统的虚拟机相比,Docker容器更轻量级,可以在几秒钟内启动或停止。
- 一致性: 通过Docker镜像,可以确保在本地开发的应用程序与在生产环境中运行的应用程序一致。
- 高效资源使用: Docker可以共享主机的操作系统内核,从而有效减少系统资源消耗。
Docker基础概念
镜像(Image)
镜像是一个只读的模板,包含了创建Docker容器的指令。它类似于虚拟机中的快照。
容器(Container)
容器是镜像的一个运行实例。它不仅包含镜像中的全部内容,且添加了额外的应用程序状态。如果说镜像是建筑图纸,容器就是建筑成品。
仓库(Repository)
仓库是一组相关的镜像。通常,一个仓库包含多个版本的镜像。最常用的仓库是Docker Hub。
Docker环境安装
在Windows上安装Docker
-
安装并运行Docker Desktop
-
通过命令行验证
shdocker --version
在macOS上安装Docker
-
安装并运行Docker Desktop
-
通过命令行验证
shdocker --version
在Linux上安装Docker
以Ubuntu为例:
-
更新APT包索引
shsudo apt-get update
-
安装依赖包
shsudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
-
添加Docker官方GPG密钥
shcurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
设置稳定版仓库
shecho "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
-
安装Docker引擎
shsudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
-
通过命令行验证
shdocker --version
Docker基本命令
镜像命令
-
拉取镜像
shdocker pull <image_name>
-
列出本地镜像
shdocker images
-
删除镜像
shdocker rmi <image_id>
容器命令
-
创建并运行容器
shdocker run -it <image_name>
-
列出运行中的容器
shdocker ps
-
停止容器
shdocker stop <container_id>
-
删除容器
shdocker 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进行容器化。
-
创建项目文件结构:
myapp/ ├── Dockerfile ├── package.json └── server.js
-
编写
package.json
:json{ "name": "myapp", "version": "1.0.0", "main": "server.js", "dependencies": { "express": "^4.17.1" }, "scripts": { "start": "node server.js" } }
-
编写
server.js
:jsconst 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}`); });
-
编写
Dockerfile
:dockerfileFROM node:14 WORKDIR /usr/src/app COPY package.json . RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]
-
构建镜像:
shdocker build -t myapp .
-
运行容器:
shdocker 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