Docker容器化部署入门教程:轻松掌握基础概念与实战技巧

2024/11/18 21:03:14

本文主要是介绍Docker容器化部署入门教程:轻松掌握基础概念与实战技巧,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

概述

Docker容器化部署是一种将应用及其依赖打包成独立可移植容器的方法,确保应用在不同环境中的运行一致性。本文详细介绍了Docker的安装、基本概念与命令行操作,以及如何通过Docker Compose进行多容器部署。此外,还介绍了容器网络与端口映射、持久化存储等相关内容,并通过具体实例全面展示了Docker容器化部署的实际应用。

Docker简介与安装
1.1 什么是Docker

Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包成一个可移植、自给自足的容器。开发者可以在该容器中编写并运行任何应用程序,而不会受到外部环境的影响。Docker 使用客户端-服务器架构,主要由 Docker 守护进程(docker)、Docker 镜像(Image)、Docker 容器(Container)和 Docker 仓库(Registry)组成。

Docker 镜像是一个只读的模板,它定义了容器运行时的环境,包括文件系统、环境变量、执行命令等。Docker 容器是镜像的运行实例,它可以被启动、停止、删除。Docker 仓库是存放 Docker 镜像的地方,可以公开或私有。Docker 守护进程负责管理镜像和容器的创建、启动、停止等操作。

1.2 Docker安装指南

安装 Docker 可以根据不同的操作系统进行选择,以下是详细步骤:

Windows

  1. 访问 Docker 官方网站 https://www.docker.com/products/docker-desktop,下载 Docker Desktop for Windows。
  2. 运行安装包,按照提示完成安装。
  3. 安装完成后,启动 Docker Desktop 并启用 Kubernetes 选项(可选)。

macOS

  1. 访问 Docker 官方网站 https://www.docker.com/products/docker-desktop,下载 Docker Desktop for Mac。
  2. 运行安装包,按照提示完成安装。
  3. 安装完成后,启动 Docker Desktop 并启用 Kubernetes 选项(可选)。

Linux

  1. 通过终端运行以下命令来安装 Docker:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 安装完成后,可以通过运行以下命令来验证 Docker 是否安装成功:
sudo docker run hello-world

验证安装

安装完成后,可以通过运行以下命令来验证 Docker 是否安装成功:

docker --version

如果安装成功,会显示 Docker 版本信息。例如:

Docker version 20.10.7, build f0df351
1.3 Docker基本概念:镜像、容器和仓库

镜像

Docker 镜像是一个只读模板,它包含了构建容器所需的所有内容:应用程序代码、运行时环境、库、环境变量、配置文件等。镜像是经过一次或多次增量文件系统修改的只读层的组合。Docker 镜像可以通过 docker pull 命令从 Docker 仓库中拉取,也可以通过 docker build 命令自己构建。

容器

Docker 容器是一个可执行的独立软件包,它包含了运行应用程序的代码及其依赖。容器是镜像的运行实例,它可以通过 docker run 命令创建。容器从镜像启动时,会继承镜像中的所有层,并在镜像的顶部添加一个可写层。容器是轻量级的,可以快速启动、停止、删除。

仓库

Docker 仓库是存放镜像的仓库,可以公开或私有。Docker Hub 是 Docker 官方的公共仓库,用户可以上传自己的镜像到 Docker Hub,并从 Docker Hub 拉取其他用户的镜像。Docker 仓库也可以自己搭建,例如使用 Docker Registry 或 Harbor。

Docker命令行基础
2.1 镜像操作:拉取、构建和删除

拉取镜像

使用 docker pull 命令可以从 Docker 仓库中拉取镜像。例如,可以通过以下命令拉取官方的 Nginx 镜像:

docker pull nginx

构建镜像

使用 docker build 命令可以根据 Dockerfile 构建镜像。Dockerfile 是一个文本文件,它包含了构建镜像的指令。例如,可以在当前目录下创建一个 Dockerfile,内容如下:

FROM nginx:latest
COPY ./html /usr/share/nginx/html

然后可以通过以下命令构建镜像:

docker build -t my-nginx .

删除镜像

使用 docker rmi 命令可以删除本地的镜像。例如,可以通过以下命令删除名为 my-nginx 的镜像:

docker rmi my-nginx
2.2 容器操作:启动、停止和删除

启动容器

使用 docker run 命令可以启动容器。例如,可以通过以下命令启动 Nginx 容器:

docker run -d --name my-nginx -p 8080:80 nginx

该命令会下载 Nginx 镜像(如果本地没有),然后启动一个 Nginx 容器,容器名称为 my-nginx,端口 80 映射到主机的 8080 端口。

停止容器

使用 docker stop 命令可以停止容器。例如,可以通过以下命令停止名为 my-nginx 的容器:

docker stop my-nginx

删除容器

使用 docker rm 命令可以删除容器。例如,可以通过以下命令删除名为 my-nginx 的容器:

docker rm my-nginx
2.3 Docker配置文件:Dockerfile详解

Dockerfile 是一个文本文件,它包含了构建镜像的指令。Dockerfile 的语法简单,主要包括以下几个指令:

  • FROM:指定基础镜像
  • RUN:执行命令,构建镜像时执行
  • CMD:指定容器启动时运行的命令
  • EXPOSE:暴露端口
  • COPY:从构建上下文文件系统中复制文件到镜像
  • ENTRYPOINT:指定容器启动时运行的命令,与 CMD 不同,不会被 CMD 覆盖

例如,以下是一个简单的 Dockerfile,用于构建一个包含 nginx 服务器的镜像:

# 使用官方的 nginx 镜像作为父镜像
FROM nginx:latest

# 将本地文件夹的文件复制到容器的指定位置
COPY ./html /usr/share/nginx/html

# 设置环境变量
ENV NAME World

# 暴露容器运行时的端口
EXPOSE 80

# 设置容器启动时运行的命令
CMD ["nginx", "-g", "daemon off;"]
使用Docker Compose进行多容器部署

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它通过一个名为 docker-compose.yml 的文件来定义应用的服务、网络和卷等配置。以下是一个简单的 docker-compose.yml 文件,用于定义一个包含 Nginx 和 MySQL 的应用:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpassword
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

可以通过 docker-compose up 命令来启动应用:

docker-compose up
Docker容器化部署基础
3.1 容器网络与端口映射

Docker 提供了多种网络模式,包括桥接网络(bridge)、主机模式(host)、容器模式(container)、无网络模式(none)等。其中最常用的是桥接网络(bridge)模式,它默认创建了一个 Docker 内部的虚拟网络,容器可以通过这个网络进行通信。

通过 docker run 命令可以设置端口映射。例如,可以通过以下命令将容器的 80 端口映射到主机的 8080 端口:

docker run -d --name my-nginx -p 8080:80 nginx
3.2 容器持久化存储

Docker 提供了多种持久化存储方式,常用的包括数据卷(volume)、数据卷容器(volume container)等。数据卷是一个位于宿主机上的具有特殊功能的目录,它可以在容器之间共享和重用。数据卷的生命周期独立于容器,当容器被删除时,数据卷不会被自动删除。

通过 -v 参数可以将宿主机的目录挂载到容器中。例如,可以通过以下命令将宿主机的 /data 目录挂载到容器的 /data 目录:

docker run -d --name my-nginx -v /data:/data nginx
3.3 使用Docker Compose进行多容器部署

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它通过一个名为 docker-compose.yml 的文件来定义应用的服务、网络和卷等配置。以下是一个完整的 docker-compose.yml 文件,用于定义一个包含前端和后端应用的多容器应用实例:

version: '3'
services:
  backend:
    build: ./backend
    ports:
      - "3000:3000"
    volumes:
      - ./backend:/app
    environment:
      - NODE_ENV=production
  frontend:
    build: ./frontend
    ports:
      - "8080:80"
    volumes:
      - ./frontend/dist:/usr/share/nginx/html
    depends_on:
      - backend

可以通过 docker-compose up 命令来启动应用:

docker-compose up
Docker容器化应用实战
4.1 搭建Web应用环境(如Nginx)

创建Dockerfile

以下是一个简单的 Dockerfile,用于构建一个包含 Nginx 服务器的镜像:

FROM nginx:latest
COPY ./html /usr/share/nginx/html

构建镜像

可以通过以下命令构建镜像:

docker build -t my-nginx .

启动容器

可以通过以下命令启动容器:

docker run -d --name my-nginx -p 8080:80 my-nginx

访问应用

可以通过浏览器访问 http://localhost:8080 来访问 Nginx 服务器。

4.2 部署数据库服务(如MySQL)

创建Dockerfile

以下是一个简单的 Dockerfile,用于构建一个包含 MySQL 服务器的镜像:

FROM mysql:latest
COPY ./data /var/lib/mysql

构建镜像

可以通过以下命令构建镜像:

docker build -t my-mysql .

启动容器

可以通过以下命令启动容器:

docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=testuser -e MYSQL_PASSWORD=testpassword my-mysql

访问数据库

可以通过 MySQL 客户端连接到数据库:

mysql -h 127.0.0.1 -P 3306 -u testuser -p
4.3 实现前后端分离项目的容器化部署

创建Dockerfile

以下是一个简单的 Dockerfile,用于构建一个包含前端应用的镜像:

FROM nginx:latest
COPY ./dist /usr/share/nginx/html

构建镜像

可以通过以下命令构建镜像:

docker build -t my-frontend .

启动容器

可以通过以下命令启动容器:

docker run -d --name my-frontend -p 8080:80 my-frontend

访问应用

可以通过浏览器访问 http://localhost:8080 来访问前端应用。

创建Dockerfile

以下是一个简单的 Dockerfile,用于构建一个包含后端应用的镜像:

FROM node:latest
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["node", "server.js"]

构建镜像

可以通过以下命令构建镜像:

docker build -t my-backend .

启动容器

可以通过以下命令启动容器:

docker run -d --name my-backend -p 3000:3000 my-backend

访问应用

可以通过浏览器访问 http://localhost:3000 来访问后端应用。

使用Docker Compose

以下是一个简单的 docker-compose.yml 文件,用于定义一个包含后端和前端应用的多容器应用:

version: '3'
services:
  backend:
    build: ./backend
    ports:
      - "3000:3000"
    volumes:
      - ./backend:/app
    environment:
      - NODE_ENV=production
  frontend:
    build: ./frontend
    ports:
      - "8080:80"
    volumes:
      - ./frontend/dist:/usr/share/nginx/html
    depends_on:
      - backend

可以通过 docker-compose up 命令来启动应用:

docker-compose up
Docker仓库管理
5.1 私有仓库搭建与使用

Docker Registry 是一个开源的私有 Docker 镜像仓库,它可以在本地或远程部署。以下是如何在本地搭建一个私有仓库的步骤:

  1. 安装 Docker Registry:
docker run -d -p 5000:5000 --name registry registry:2
  1. 构建并推送镜像到私有仓库:
docker build -t localhost:5000/my-nginx .
docker push localhost:5000/my-nginx
  1. 从私有仓库拉取镜像:
docker pull localhost:5000/my-nginx
5.2 Docker Hub注册与镜像上传

注册Docker Hub账号

访问 Docker Hub 官网 https://hub.docker.com/,点击注册按钮,填写相关信息,完成注册。

构建镜像

docker build -t username/my-nginx .

登录Docker Hub

docker login

推送镜像

docker push username/my-nginx

从Docker Hub拉取镜像

docker pull username/my-nginx
5.3 镜像标签与版本管理

为镜像添加标签

docker tag my-nginx:latest username/my-nginx:1.0

列出所有镜像

docker images

删除镜像

docker rmi username/my-nginx:1.0

查看镜像历史

docker history my-nginx
Docker容器化部署进阶
6.1 Docker Swarm集群部署

Docker Swarm 是 Docker 的原生集群管理工具,它将多个 Docker 主机组合成一个虚拟的 Docker 主机。以下是如何部署 Docker Swarm 集群的步骤:

  1. 初始化 Swarm 集群:
docker swarm init
  1. 查看 Swarm 节点:
docker node ls
  1. 加入 Swarm 节点:
docker swarm join --token <token> <manager-ip>:2377
  1. 创建服务:
docker service create --name my-nginx --replicas 3 -p 8080:80 nginx
  1. 查看服务:
docker service ls
6.2 使用Docker Stack进行应用编排

Docker Stack 是一个用于定义和运行多容器应用的工具,它可以将多个服务组合成一个应用,并部署到 Docker Swarm 集群。以下是如何使用 Docker Stack 部署应用的步骤:

  1. 创建一个 docker-compose.yml 文件,定义应用的服务、网络和卷等配置。
version: '3.7'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpassword
  1. 使用 docker stack deploy 命令部署应用:
docker stack deploy -c docker-compose.yml my-app
  1. 查看应用:
docker stack ps my-app
6.3 环境变量与动态配置管理

设置环境变量

可以通过 docker run 命令设置环境变量:

docker run -d --name my-nginx -e ENV_VAR=value nginx

或者在 Dockerfile 中设置环境变量:

ENV ENV_VAR value

使用配置文件

可以通过 docker run 命令挂载配置文件:

docker run -d --name my-nginx -v /path/to/config:/etc/nginx/conf.d my-nginx

或者在 Dockerfile 中设置配置文件:

COPY ./config /etc/nginx/conf.d

使用动态配置

可以通过 docker exec 命令动态修改配置文件:

docker exec -it my-nginx bash

然后在容器中修改配置文件:

vi /etc/nginx/conf.d/default.conf

或者使用 docker-compose.yml 文件定义配置文件:

version: '3'
services:
  web:
    image: nginx:latest
    volumes:
      - ./config:/etc/nginx/conf.d


这篇关于Docker容器化部署入门教程:轻松掌握基础概念与实战技巧的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程