本文详细介绍了Docker容器化部署学习的全过程,从基础概念到环境搭建,再到基本命令操作和Dockerfile编写入门,以及实战部署案例和日常维护技巧,帮助读者全面掌握Docker容器化部署。
Docker是一种开源的应用容器引擎,它可以让开发者将应用及其依赖打包到一个可移植的容器中,在各种环境中运行,包括本地计算机、虚拟机和云平台。Docker提供了一种更高效的方式来管理应用的部署和扩展。
虚拟机(Virtual Machine, VM)是一种在计算机硬件和操作系统之间模拟整个硬件系统的软件。它通过一个虚拟化层(如VMware、VirtualBox)来模拟物理硬件,使操作系统和应用能够像在真实的硬件上运行一样运行。每个虚拟机包含一个完整的操作系统和相关的库、应用程序以及所需的任何其他文件。每个虚拟机都有自己的虚拟硬件,包括CPU、内存、硬盘和网络接口。
Docker容器则是基于Linux命名空间和cgroups等技术实现的轻量级虚拟化。Docker容器运行在操作系统级别,而不是硬件级别。Docker容器共享宿主机的操作系统内核,并运行在用户空间。这使得Docker容器比虚拟机更轻量,启动速度更快,资源消耗更少。
--registry-mirror https://<your_mirror_url>
(可选),以使用镜像加速功能curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
docker
命令而无需sudo权限:
sudo usermod -aG docker $USER
newgrp docker
docker --version
验证安装是否成功--registry-mirror https://<your_mirror_url>
(可选),以使用镜像加速功能docker --version
,查看Docker版本信息$ docker --version Docker version 20.10.7, build f0df351
拉取镜像
从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
运行容器
使用镜像创建并启动容器。以运行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 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是一种文本文件,用于定义如何构建Docker镜像。它包含了一系列命令,这些命令会被Docker引擎按照顺序执行以生成镜像。
FROM
FROM ubuntu:latest
解释:
RUN
RUN apt-get update && apt-get install -y python3
解释:
COPY
COPY . /app
解释:
CMD
CMD ["python3", "app.py"]
解释:
EXPOSE
EXPOSE 8000
解释:
ENTRYPOINT
ENTRYPOINT ["python3", "app.py"]
解释:
创建一个简单的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
假设我们有一个简单的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应用。它通过一个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容器化部署环境,确保应用的稳定性和可靠性。