本文详细介绍了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镜像的脚本文件,包含构建镜像所需的所有命令和参数。
在Windows/Linux/Mac上安装Docker
Windows
- 访问Docker官网(https://www.docker.com/products/docker-desktop)
- 下载适用于Windows系统的Docker Desktop
- 安装过程中,确保选择安装“Docker Desktop for Windows”选项
- 安装完成后,启动Docker Desktop
- 在Docker Desktop窗口中,点击“Settings” -> “Resources” -> “Docker settings” -> “Docker Engine”
- 在配置窗口中,点击“Add daemon”按钮,添加
--registry-mirror https://<your_mirror_url>
(可选),以使用镜像加速功能 - 点击“Apply & Restart”
Linux
- 访问Docker官网(https://www.docker.com/products/docker-desktop)
- 根据Linux发行版选择合适的安装包,例如Ubuntu 18.04:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
- 添加用户到docker组,以便可以使用
docker
命令而无需sudo权限:sudo usermod -aG docker $USER
newgrp docker
- 安装完成后,运行
docker --version
验证安装是否成功
Mac
- 访问Docker官网(https://www.docker.com/products/docker-desktop)
- 下载适用于Mac系统的Docker Desktop
- 安装完成后,启动Docker Desktop
- 在Docker Desktop窗口中,点击“Settings” -> “Resources” -> “Docker settings” -> “Docker Engine”
- 在配置窗口中,点击“Add daemon”按钮,添加
--registry-mirror https://<your_mirror_url>
(可选),以使用镜像加速功能 - 点击“Apply & Restart”
验证Docker是否安装成功
- 打开命令行工具(Windows使用PowerShell,Linux和Mac使用Terminal)
- 输入命令
docker --version
,查看Docker版本信息 - 确认输出显示了Docker版本号
$ docker --version
Docker version 20.10.7, build f0df351
Docker基本命令操作
Docker镜像操作
-
拉取镜像
从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
-
列出镜像
查看本地镜像列表:
$ docker images
输出:
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 03e68194c407 2 weeks ago 133MB
-
删除镜像
删除指定镜像。注意:删除镜像前需要确保没有容器正在使用该镜像。
$ docker rmi nginx
Docker容器操作
-
运行容器
使用镜像创建并启动容器。以运行Nginx服务器为例:
$ docker run -d -p 80:80 nginx
参数解释:
-d
:后台运行容器-p 80:80
:将容器的80端口映射到宿主机的80端口
输出:
2abcaecc10c5a05d3cb842e4f5b0476fd0d2616d6c102e44d2ecbddd41eca48e
-
列出容器
查看正在运行的容器:
$ 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
-
停止容器
停止正在运行的容器:
$ docker stop <container_id>
-
删除容器
删除指定容器:
$ docker rm <container_id>
Docker仓库使用
-
登录仓库
登录Docker仓库。假设使用的是Docker Hub:
$ docker login
输出:
Username: <your_username> Password: Login Succeeded
-
推送镜像
将本地镜像推送到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是一种文本文件,用于定义如何构建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应用:
-
创建一个项目目录结构,例如
myapp
,并创建以下文件:myapp/ ├── Dockerfile └── app.py
-
编辑
Dockerfile
:FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python3", "app.py"]
-
编辑
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)
-
构建并运行容器:
$ docker build -t myapp . $ docker run -p 8000:8000 myapp
部署一个简单的Web应用
假设我们有一个简单的Python Flask应用,使用Docker来部署它。
-
创建项目目录结构,例如
flask-app
,并创建以下文件:flask-app/ ├── Dockerfile └── app.py
-
编辑
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)
-
编辑
Dockerfile
:FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python3", "app.py"]
-
构建并运行容器:
$ docker build -t flask-app . $ docker run -p 8000:8000 flask-app
使用Docker Compose进行多容器部署
Docker Compose是一个工具,用于定义和运行多容器Docker应用。它通过一个docker-compose.yml
文件来配置服务,使用docker-compose
命令来启动和管理容器。
-
在项目根目录下创建
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
-
使用Docker Compose构建并启动应用:
$ docker-compose up --build
-
访问应用
容器的停止、重启和删除
-
停止容器
$ docker stop <container_id>
-
重启容器
$ docker restart <container_id>
-
删除容器
$ docker rm <container_id>
镜像的更新和优化
-
更新镜像
从仓库中拉取最新版本的镜像:
$ docker pull <image_name>
示例:
$ docker pull nginx
-
优化镜像
使用
docker commit
命令来保存容器的当前状态为新的镜像:$ docker commit <container_id> <new_image_name>
示例:
$ docker commit <container_id> myapp:v1
日志管理和监控
-
查看容器日志
$ docker logs <container_id>
-
实时查看容器日志
$ docker logs -f <container_id>
-
监控容器
使用
docker stats
命令来查看容器的实时资源使用情况:$ docker stats <container_id>
通过以上步骤,您可以更好地管理和维护您的Docker容器化部署环境,确保应用的稳定性和可靠性。
共同学习,写下你的评论
评论加载中...
作者其他优质文章