Docker新手快速入门教程

一、引言

1、Docker的简介

        Docker是一个开源的应用容器引擎,它允许开发者将他们的应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上。Docker使用了资源隔离的技术(如Cgroups和Namespace),使得每个容器都可以在自己的环境中运行,就像在一个独立的操作系统中一样。这使得Docker成为了虚拟化的一种轻量级替代方案。


2、Docker的优势和应用场景

Docker的优势主要体现在以下几个方面:

  • 环境一致性:使用Docker,你可以构建一个独立于宿主系统的、一致的运行环境。这意味着你不需要担心应用在不同环境中的运行情况,例如在开发环境中运行正常,但在生产环境中出现问题。
  • 快速部署:Docker可以快速地启动和停止容器,这使得应用的部署、扩展和降级变得非常快速和简单。
  • 资源隔离:Docker容器之间相互隔离,每个容器都有自己的文件系统,不会互相干扰。
  • 安全性:Docker提供了一些安全特性,如容器之间的隔离,以及对容器的访问控制。
  • Docker的应用场景非常广泛,包括但不限于:
  • 持续集成/持续部署:Docker可以与持续集成/持续部署工具(如Jenkins)结合,提供自动化的测试和部署流程。
  • 微服务架构:Docker非常适合微服务架构。你可以为每个服务创建一个Docker容器,每个容器都可以独立地扩展和部署。
  • 开发和测试环境:Docker可以提供一致的开发和测试环境,避免了“在我的机器上可以运行”的问题。


二、Docker的安装

在不同操作系统(如Ubuntu)上安装Docker的步骤:参考下面这篇博客

 Ubuntu20.04 部署docker容器新手教程


三、Docker基本命令

1. Docker镜像相关命令

docker pull:这个命令用于从Docker Hub或其他Docker镜像仓库下载镜像。例如,docker pull ubuntu:18.04会下载名为ubuntu的镜像,标签为18.04。
docker images:这个命令用于列出本地所有的Docker镜像。它会显示每个镜像的仓库名、标签、镜像ID、创建时间和大小。


docker rmi:这个命令用于删除本地的一个或多个Docker镜像。例如,docker rmi ubuntu:18.04会删除名为ubuntu的镜像,标签为18.04。


2. Docker容器相关命令

docker run:这个命令用于从Docker镜像创建一个新的容器,并运行一个命令。例如,docker run -it ubuntu:18.04 bash会从ubuntu:18.04镜像创建一个新的容器,并在容器中运行bash命令。


docker ps:这个命令用于列出所有正在运行的Docker容器。如果你想查看所有的容器(包括已经停止的容器),你可以使用docker ps -a命令。
docker stop:这个命令用于停止一个或多个正在运行的Docker容器。例如,docker stop container_id会停止ID为container_id的容器。
docker rm:这个命令用于删除一个或多个Docker容器。例如,docker rm container_id会删除ID为container_id的容器。

四、Docker镜像和容器

1、Docker 镜像(Docker Image)

Docker 镜像是一个轻量级的、可执行的独立软件包,它包含运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件。Docker 镜像是不可变的,也就是说,一旦创建,就不能被修改,只能通过 Dockerfile 创建新的镜像。

Docker 镜像的主要作用是提供容器运行所需的所有文件系统。它们使得应用程序的打包、分发、部署和运行变得更加简单和快速。

2、Docker 容器(Docker Container)

Docker 容器是 Docker 镜像的运行实例。你可以把它看作是一个轻量级的沙箱,可以运行和隔离应用程序及其依赖环境。每个 Docker 容器都是独立的,并且在启动时会从其镜像获取其文件系统。

Docker 容器的主要作用是运行、暂停、移动和删除应用程序。它们提供了一种高效、轻量级的方式来运行应用程序,无需担心在不同环境中运行时可能出现的兼容性问题。

3、Docker 镜像和容器的关系

Docker 镜像和容器之间的关系可以通过以下几点来理解:

  1. Docker 容器是 Docker 镜像的运行实例。你可以从同一个镜像启动多个容器,每个容器都是独立的。
  2. Docker 容器在启动时,会在镜像的最上层添加一个可写层,所有对容器的修改(例如文件修改、新文件的创建等)都会写入这个层。
  3. 当 Docker 容器被删除时,这个可写层也会被删除。原始的 Docker 镜像不会被改变。


五、Dockerfile介绍

1、Dockerfile 的概念

Dockerfile 是一个文本文件,它包含了一系列的命令,这些命令用于构建一个新的 Docker 镜像。通过读取 Dockerfile 中的指令,Docker 可以自动化地构建镜像,这使得镜像的创建过程可重复且透明。

2、Dockerfile 的基本结构和常用指令

Dockerfile 由一系列的指令和参数组成,每一行代表一条指令。以下是一些常用的 Dockerfile 指令:

FROM:设置基础镜像。所有后续的操作都基于这个基础镜像。例如:FROM ubuntu:18.04。
RUN:执行命令并创建新的镜像层。例如:RUN apt-get update && apt-get install -y git。
CMD:提供容器默认的执行命令。例如:CMD ["echo", "Hello, World!"]。
COPY:从 Docker 主机复制文件到镜像中。例如:COPY . /app。
ADD:类似于 COPY,但是可以自动解压缩文件。例如:ADD app.tar.gz /app。
WORKDIR:设置工作目录。例如:WORKDIR /app。
EXPOSE:声明容器打算使用的端口。例如:EXPOSE 80。
ENV:设置环境变量。例如:ENV LANG C.UTF-8。


3、如何使用 Dockerfile 创建 Docker 镜像

你可以使用 docker build 命令来根据 Dockerfile 创建一个新的 Docker 镜像。例如,如果你的 Dockerfile 位于当前目录,你可以使用以下命令来创建镜像:

docker build -t my-app:1.0 .

在这个命令中,-t 参数用于设置新镜像的名字和标签,. 表示 Dockerfile 位于当前目录。


六、Docker网络

1、Docker 网络的概念

Docker 网络是 Docker 提供的一种机制,用于实现容器之间以及容器与宿主机之间的通信。每个 Docker 容器都有一个或多个网络接口,可以连接到一个或多个 Docker 网络。

2、Docker 网络的类型

Docker 提供了以下几种类型的网络:

bridge:这是 Docker 的默认网络类型。当你创建一个新的 Docker 容器时,如果没有指定网络类型,那么它会被连接到一个名为 docker0 的 bridge 网络。bridge 网络允许容器通过 NAT 访问外部网络,并且可以通过端口映射让外部网络访问容器。
host:在 host 网络模式下,容器共享宿主机的网络命名空间,也就是说,容器直接使用宿主机的网络。
none:在 none 网络模式下,容器有自己的网络命名空间,但是不进行任何网络配置。也就是说,这个容器没有网络接口(除了 loopback 接口)。
overlay:overlay 网络是 Docker Swarm 模式下的网络类型,用于实现跨主机的容器通信。

3、如何管理 Docker 网络

你可以使用 docker network 命令来管理 Docker 网络。以下是一些常用的子命令:

创建网络:你可以使用 docker network create 命令来创建一个新的网络。例如,docker network create my-network 会创建一个名为 my-network 的 bridge 网络。
查看网络:你可以使用 docker network ls 命令来查看所有的网络。docker network inspect my-network 可以查看 my-network 网络的详细信息。
删除网络:你可以使用 docker network rm 命令来删除一个网络。例如,docker network rm my-network 会删除 my-network 网络。


七、Docker数据管理

1、Docker 数据卷的概念和作用

Docker 数据卷是 Docker 提供的一种数据管理机制,它允许你在 Docker 容器之间共享和持久化数据。数据卷是存储在 Docker 主机上的特殊目录,可以直接挂载到容器的文件系统中。

数据卷的主要作用是:

数据持久化:即使容器被删除,数据卷中的数据仍然存在,可以被其他容器使用。
数据共享:多个容器可以同时挂载同一个数据卷,实现数据共享和数据交换。

2、如何使用 Docker 数据卷

你可以在运行容器时使用 -v 参数来创建和挂载数据卷。例如,以下命令会创建一个名为 my-vol 的数据卷,并挂载到容器的 /app 目录:

docker run -d -v my-vol:/app my-image

你也可以使用 docker volume create 命令来手动创建数据卷:

docker volume create my-vol
3、Docker 数据卷的备份和恢复

你可以使用 docker cp 命令来备份数据卷中的数据。例如,以下命令会将 my-vol 数据卷中的数据备份到当前目录的 backup.tar 文件:

docker run --rm --volumes-from my-container -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /app

你可以使用 docker cp 命令或者 tar 命令来恢复数据卷中的数据。例如,以下命令会将 backup.tar 文件中的数据恢复到 my-vol 数据卷:

docker run --rm --volumes-from my-container -v $(pwd):/backup ubuntu bash -c "cd /app && tar xvf /backup/backup.tar"


八、Docker Compose介绍

1、Docker Compose 的概念和作用

Docker Compose 是 Docker 的一个工具,用于定义和运行多容器的 Docker 应用程序。你可以在一个 YAML 文件中定义服务,这些服务构成了你的应用程序。这个 YAML 文件被称为 Compose 文件。

Docker Compose 的主要作用是:

  • 服务编排:你可以在 Compose 文件中定义多个服务,每个服务对应一个容器。这些服务可以相互通信,形成一个完整的应用程序。
  • 环境一致性:由于所有服务的配置都在 Compose 文件中定义,所以你可以确保在不同环境中运行的应用程序具有一致性。
  • 开发、测试和部署简化:你可以使用一个命令来启动、停止和重建服务。你也可以查看服务的状态和日志。
2、Docker Compose 的基本使用

以下是使用 Docker Compose 的基本步骤:

  1. 创建 Compose 文件:首先,你需要创建一个 Compose 文件(通常命名为 docker-compose.yml),在其中定义你的服务。例如:
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

这个 Compose 文件定义了两个服务:web 和 redisweb 服务会从当前目录的 Dockerfile 构建镜像,并映射宿主机的 5000 端口到容器的 5000 端口。redis 服务使用了官方的 redis:alpine 镜像。

  1. 启动服务:你可以使用 docker-compose up 命令来启动服务。这个命令会根据 Compose 文件创建并启动一组服务。

  2. 停止服务:你可以使用 docker-compose down 命令来停止并删除服务。这个命令会停止 Compose 文件中定义的所有服务,并删除它们。


九、实战篇:使用Docker部署一个web应用

1. 选择一个简单的 web 应用

假设我们有一个非常简单的 Flask 应用,它只有一个路由,返回 “Hello, World!”。这个应用的代码如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

2. 编写 Dockerfile

接下来,我们需要编写一个 Dockerfile 来构建 Docker 镜像。这个 Dockerfile 的内容如下:

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

# 设置工作目录
WORKDIR /app

# 将当前目录的内容复制到工作目录中
COPY . /app

# 安装所需的包
RUN pip install flask

# 设置环境变量
ENV FLASK_APP=app.py

# 暴露端口
EXPOSE 80

# 运行应用
CMD ["flask", "run"]
3. 构建 Docker 镜像

有了 Dockerfile,我们就可以使用 docker build 命令来构建 Docker 镜像了:

docker build -t my-flask-app:latest .

这个命令会在当前目录下查找 Dockerfile,并构建一个名为 my-flask-app 的 Docker 镜像。

4. 运行 Docker 容器

有了 Docker 镜像,我们就可以运行 Docker 容器了:

docker run -d -p 5000:80 my-flask-app:latest

这个命令会启动一个新的 Docker 容器,并将容器的 80 端口映射到宿主机的 5000 端口。

5. 测试 web 应用是否正常运行

最后,我们可以通过访问 http://localhost:5000 来测试我们的 web 应用是否正常运行。如果一切正常,你应该能看到 “Hello, World!” 这个消息。


十、总结

1、Docker学习的总结

        Docker 是一种开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。Docker 改变了软件的分发方式和运行方式,使得应用可以更快速、更简单地构建、部署和扩展。

        在我们的学习过程中,我们了解了 Docker 的基本概念,包括镜像、容器、数据卷、网络和 Dockerfile。我们还学习了如何使用 Docker 命令来管理镜像和容器,如何使用 Dockerfile 来构建镜像,以及如何使用 Docker Compose 来定义和运行多容器应用。

2、Docker的进阶学习资源推荐

https://www.docker.com/

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值