Docker容器

Docker部署实战:新手入门教程

本文主要是介绍Docker部署实战:新手入门教程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

本文详细介绍了Docker部署实战指南,从基础概念到环境搭建,覆盖了镜像管理、容器操作以及实际部署案例。文章还提供了Docker的常用命令和技巧,帮助读者在实际项目中高效使用Docker。不仅适合新手入门,也适合希望深入学习Docker技术的进阶用户。

Docker基础概念介绍

什么是Docker

Docker是一种开源的应用容器引擎,它允许开发者将应用及其依赖打包成可移植的容器。这些容器可以在任何流行的Linux机器上运行,并实现轻量级的虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。

Docker的核心功能是提供一个标准化的环境来打包、分发和运行应用程序。它依赖于Linux的Namespaces和Cgroups技术来实现容器化和资源隔离。

Docker与虚拟机的区别

  • 资源占用:虚拟机由于需要完整的操作系统,资源占用较大。而Docker容器则更加轻量,因为它只是在现有操作系统之上提供了进程级别的隔离。
  • 启动时间:启动一个Docker容器几乎和启动一个进程一样快,而启动一个虚拟机则需要加载整个操作系统。
  • 隔离性:虚拟机提供了完全隔离的环境,而Docker容器在同一主机上的容器之间提供隔离性,但它们共享同一个操作系统内核。
  • 可移植性:Docker容器可以在任何安装了Docker的机器上运行,而虚拟机需要特定的虚拟化软件支持。

Docker的核心组件简介

Docker包含以下几个核心组件:

  • Docker Daemon:后台运行的守护进程,管理镜像和容器的生命周期。
  • Docker Client:命令行工具,用于与Docker Daemon通信。
  • Docker API:提供接口,支持其他应用程序与Docker交互。
  • Docker镜像(Image):镜像是一个只读模板,包含了构建该镜像的所有内容。
  • Docker容器(Container):容器是从镜像创建的运行实例,可以被启动、停止、删除。每个容器都是相互隔离的,但可以在容器之间共享资源。
  • Docker仓库(Registry):仓库是存放镜像文件的仓库,仓库分为公开仓库和私有仓库,其中最大的公开仓库是Docker Hub。
Docker环境搭建

选择合适的操作系统

Docker可以在多种操作系统上运行,但为了获得最佳性能和兼容性,推荐使用Linux系统的某个发行版,如Ubuntu、CentOS等。此外,Docker也可以在MacOS和Windows系统上运行,但性能和稳定性会稍差一些。

安装Docker

在Linux上安装Docker

在Ubuntu系统上安装Docker,首先需要更新软件包索引:

sudo apt-get update

然后安装必要的包以允许apt通过HTTPS使用存储库:

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

将Docker存储库添加到apt源列表:

echo \
  "deb [arch=amd64 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

更新apt软件包索引,安装Docker:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

安装完成后检查Docker版本:

sudo docker --version

在MacOS和Windows上安装Docker

在MacOS和Windows上安装Docker可以通过Docker官方的桌面应用来完成。访问Docker官网下载适用于MacOS或Windows的安装包。

Docker镜像管理

如何搜索镜像

Docker官方提供了Docker Hub,用户可以在此处搜索到大量的Docker镜像。例如,搜索一个Python镜像:

docker search python

如何下载和上传镜像

下载镜像

使用docker pull命令下载镜像。例如,下载Python 3.8镜像:

docker pull python:3.8

上传镜像

上传镜像需要先打上标签,再使用docker push命令上传。例如,上传一个自定义的镜像到Docker Hub:

docker tag myimage username/myimage:tag
docker push username/myimage:tag

如何创建自己的Docker镜像

构建镜像

Dockerfile是定义镜像内容的文件。Dockerfile包含一系列构建指令,例如:

# 使用官方Python镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下所有文件到工作目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露8000端口
EXPOSE 8000

# 设置环境变量
ENV NAME World

# 启动命令
CMD ["python", "app.py"]

使用docker build命令构建镜像:

docker build -t myapp:latest .
Docker容器操作

运行Docker容器

使用docker run命令启动容器:

docker run -p 4000:8000 -it myapp:latest

这里,-p参数表示端口映射,将容器内部的8000端口映射到主机的4000端口。

停止和启动容器

停止容器:

docker stop container_id

启动容器:

docker start container_id

查看和管理容器

查看所有容器:

docker ps -a

查看正在运行的容器:

docker ps

查看容器日志:

docker logs container_id

更多容器管理操作

复制容器文件:

docker cp container_id:/path/to/file /host/path/to/destination

备份容器:

docker export container_id > backup.tar

恢复容器:

cat backup.tar | docker import - new_container_id
Docker部署实战案例

部署一个简单的Web应用

步骤1:创建Dockerfile

创建一个Dockerfile文件,内容如下:

# 使用官方Python镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下所有文件到工作目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露8000端口
EXPOSE 8000

# 设置环境变量
ENV NAME World

# 启动命令
CMD ["python", "app.py"]

步骤2:构建镜像

docker build -t mywebapp:latest .

步骤3:运行容器

docker run -p 4000:8000 -it mywebapp:latest

部署微服务架构

步骤1:创建Dockerfile

前端服务:

FROM node:14

WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . /app

EXPOSE 3000
CMD ["npm", "start"]

后端服务:

FROM python:3.8-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app

EXPOSE 5000
CMD ["python", "app.py"]

步骤2:构建镜像

docker build -t frontend:latest -f Dockerfile.frontend .
docker build -t backend:latest -f Dockerfile.backend .

步骤3:运行容器

docker run -p 3000:3000 -it frontend:latest
docker run -p 5000:5000 -it backend:latest

部署数据库服务

步骤1:创建Dockerfile

创建一个Dockerfile文件,内容如下:

# 使用官方MySQL镜像作为基础镜像
FROM mysql:5.7

# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=root_password
ENV MYSQL_DATABASE=mydatabase
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=mypassword

# 启动命令
CMD ["mysqld"]

步骤2:构建镜像

docker build -t mydb:latest .

步骤3:运行容器

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root_password -e MYSQL_DATABASE=mydatabase -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -it mydb:latest
Docker常用命令及技巧

常见Docker命令详解

  • docker run:运行一个新的容器
  • docker ps:查看正在运行的容器
  • docker ps -a:查看所有容器
  • docker logs:查看容器日志
  • docker stop:停止容器
  • docker start:启动容器
  • docker rm:删除容器
  • docker rmi:删除镜像
  • docker commit:创建新的镜像
  • docker build:从Dockerfile构建镜像
  • docker pull:从Docker仓库下载镜像
  • docker push:将镜像上传到Docker仓库
  • docker tag:给镜像打标签
  • docker images:查看本地镜像列表
  • docker exec:在容器内执行命令

提高效率的小技巧

  • 使用Docker Compose:Docker Compose是一个简化Docker开发的工具,可以用一个YAML文件来配置所有容器,然后用一个命令来启动所有容器。

    创建一个docker-compose.yml文件:

    version: '3'
    services:
    web:
      build: .
      ports:
        - "4000:8000"
      environment:
        - NAME=World
    db:
      image: mysql:5.7
      environment:
        MYSQL_ROOT_PASSWORD: root_password
        MYSQL_DATABASE: mydatabase
        MYSQL_USER: myuser
        MYSQL_PASSWORD: mypassword
      ports:
        - "3306:3306"

    使用命令启动:

    docker-compose up
  • 使用Docker Machine:Docker Machine允许在各种平台上创建Docker主机,包括虚拟机、物理机等。

    安装Docker Machine:

    docker-machine create --driver virtualbox dev

    连接Docker Machine:

    docker-machine start dev
    docker-machine env dev
    eval $(docker-machine env dev)
  • 使用Docker Swarm进行集群管理:Docker Swarm可以创建一个Docker集群,提供容器编排功能。

    初始化Swarm集群:

    docker swarm init

    查看Swarm节点:

    docker node ls
  • 使用Docker卷(Volume):Docker卷可用于数据持久化,可以将容器内的数据存储到宿主机上。例如,创建一个新的卷并将其挂载到容器:

    docker run -p 4000:8000 -v /host/path:/container/path -it mywebapp:latest
  • 使用Docker网络:Docker允许容器之间通过网络通信,可以使用docker network命令创建自定义网络,并将容器连接到该网络。

    docker network create mynetwork
    docker run --network mynetwork --name web_container -p 4000:8000 -it mywebapp:latest
    docker run --network mynetwork --name db_container -p 3306:3306 -it mydb:latest

通过以上教程,你已经掌握了Docker的基础概念、环境搭建、镜像管理、容器操作,以及实战案例和常用命令及技巧。希望这些知识能够帮助你在实际项目中更高效地使用Docker。

这篇关于Docker部署实战:新手入门教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!