为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Docker 容器
概述

本文详细介绍了Docker部署实战的全过程,从Docker的基础概念到环境搭建,再到镜像操作、容器管理以及网络与存储的配置。通过一系列实战案例,帮助读者掌握如何使用Docker部署一个简单的Web应用。Docker部署实战不仅简化了应用的部署过程,还提高了应用的一致性和稳定性。

Docker基础概念介绍

什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的主要组成部分

Docker 主要由以下几个部分组成:

  1. 镜像(Image):镜像是一个只读模板,包含了创建一个容器所需的文件系统。镜像是构建容器的基础。
  2. 容器(Container):容器是镜像的运行实例。可以启动、停止、删除一个或多个容器。容器运行起来后,用户可以通过容器对应用进行配置、运行等操作。
  3. 仓库(Registry):仓库分为公共仓库(如 Docker Hub)和私有仓库。仓库是管理Docker镜像的,可以上传、下载、分享不同的镜像。
  4. Docker Daemon:Docker Daemon 是Docker服务端的主要进程,负责接收客户端发送的指令,管理镜像的生命周期、创建、运行、分发容器。

为什么选择Docker进行部署

Docker 的主要优势包括:

  1. 轻量级:Docker容器相比于虚拟机更轻量,启动速度更快,占用资源更少。
  2. 易于移植:Docker允许应用跨平台、跨主机的移植,保证了应用的一致性。
  3. 简化部署:通过使用Dockerfile可以自动化构建容器,大大简化部署过程。
  4. 隔离性:通过Docker的沙箱机制,不同应用之间相互隔离,大大提高了应用的稳定性。
Docker环境搭建

在Linux系统中安装Docker

  1. 添加Docker的APT仓库:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  1. 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. 设置Docker仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 安装Docker:
sudo apt-get update
sudo apt-get install docker-ce
  1. 验证Docker是否安装成功:
sudo docker --version

在Windows和macOS系统中安装Docker

  1. 访问Docker官方网站,下载适用于Windows或macOS的Docker Desktop安装包。
  2. 运行安装包,根据提示完成Docker的安装。
  3. 打开Docker Desktop应用,确保Docker服务已启动。

在命令行中验证Docker是否安装成功:

docker --version

输出结果如下:

Docker version 20.10.7, build f0df351
Docker镜像操作

搜索和下载Docker镜像

  1. 搜索镜像:
docker search nginx

输出如下:

NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                          Official Docker Hub Nginx base image           18724     [OK]
  1. 下载镜像:
docker pull nginx

输出如下:

Using default tag: latest
latest: Pulling from library/nginx
...

从其他仓库下载Docker镜像

假设我们从另一个公共仓库下载镜像,例如自定义的仓库:

docker pull customregistry/nginx:latest

构建自己的Docker镜像

  1. 创建一个Dockerfile:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  1. 构建镜像:
docker build -t my-nginx .

输出如下:

Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM ubuntu:latest
Step 2/4 : RUN apt-get update && apt-get install -y nginx
...
Successfully built 1234567890abcdef
Successfully tagged my-nginx:latest
  1. 验证镜像是否构建成功:
docker images

输出如下:

REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
my-nginx            latest    1234567890     2 hours ago     187MB

管理本地镜像

  1. 列出所有镜像:
docker images
  1. 删除镜像(以示例镜像为例):
docker rmi my-nginx

输出如下:

Untagged: my-nginx:latest
Untagged: 1234567890abcdef
Deleted: 1234567890abcdef
Docker容器管理

创建和启动容器

  1. 创建并启动容器:
docker run -d -p 8080:80 --name my-nginx-container my-nginx

输出如下:

9876543210abcdef
  1. 查看运行中的容器:
docker ps

输出如下:

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                    NAMES
9876543210     my-nginx       "nginx -g 'daemon of…"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->80/tcp   my-nginx-container

批量管理容器

假设我们要使用Docker Compose批量管理容器,我们首先创建一个docker-compose.yml文件:

version: '3'
services:
  web:
    image: my-nginx
    ports:
      - "8080:80"
    networks:
      - my-network
  db:
    image: mariadb
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

然后运行以下命令:

docker-compose up -d

这将启动两个容器,并将它们连接到同一个网络。

进入容器内部

  1. 进入容器:
docker exec -it my-nginx-container /bin/bash

输出如下:

root@9876543210abcdef:/#

停止和删除容器

  1. 停止容器:
docker stop my-nginx-container

输出如下:

my-nginx-container
  1. 删除容器:
docker rm my-nginx-container

输出如下:

my-nginx-container
Docker网络与存储

理解Docker的网络模式

Docker支持几种不同的网络模式:

  1. Bridge:默认模式,容器连接到一个虚拟网桥上。
  2. Host:容器直接使用主机的网络栈。
  3. None:容器不连接任何网络。
  4. Container:连接到另一个容器的网络栈。

为容器配置自定义网络

  1. 创建自定义网络:
docker network create my-network

输出如下:

43210abcdef123
  1. 使用自定义网络启动容器:
docker run -d --name my-nginx-container --network my-network my-nginx

输出如下:

9876543210abcdef
  1. 查看容器连接到的网络:
docker inspect my-nginx-container

输出如下:

...
"NetworkSettings": {
    ...
    "Networks": {
        "my-network": {
            "IPAMConfig": {},
            "Links": {},
            "NetworkID": "43210abcdef123",
            "EndpointID": "abcdef1234567890",
            "Gateway": "192.168.1.1",
            "IPAddress": "192.168.1.2",
            "IPPrefixLen": 24,
            "IPv6Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "MacAddress": "02:42:c0:a8:01:02"
        }
    }
}

使用Docker卷管理数据

  1. 创建Docker卷:
docker volume create my-volume

输出如下:

my-volume
  1. 使用Docker卷启动容器:
docker run -d --name my-nginx-container -v my-volume:/var/www/html my-nginx

输出如下:

9876543210abcdef
  1. 查看容器挂载的卷:
docker inspect my-nginx-container

输出如下:

...
"Mounts": [
    {
        "Type": "volume",
        "Name": "my-volume",
        "Source": "/var/lib/docker/volumes/my-volume/_data",
        "Destination": "/var/www/html",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]

实战案例:部署一个简单的Web应用

准备Web应用代码

  1. 创建一个简单的HTML文件:
<!DOCTYPE html>
<html>
<head>
    <title>My Docker App</title>
</head>
<body>
    <h1>Hello, Docker!</h1>
</body>
</html>

创建Dockerfile

  1. 创建Dockerfile:
FROM nginx:latest
COPY index.html /usr/share/nginx/html/
  1. 构建镜像:
docker build -t my-web-app .

输出如下:

Sending build context to Docker daemon 53 bytes
Step 1/2 : FROM nginx:latest
Step 2/2 : COPY index.html /usr/share/nginx/html/
...
Successfully built 1234567890abcdef
Successfully tagged my-web-app:latest

构建并运行容器

  1. 启动容器:
docker run -d -p 8080:80 --name my-web-app-container my-web-app

输出如下:

9876543210abcdef
  1. 访问Web应用:

在浏览器中打开 http://localhost:8080,可以看到 "Hello, Docker!" 的页面。

  1. 查看容器日志:
docker logs my-web-app-container

输出如下:

...
172.17.0.1 - - [01/Jan/1970:00:00:00 +0000] "GET / HTTP/1.1" 200 24 "-" "-"
  1. 进入容器内部:
docker exec -it my-web-app-container /bin/bash

输出如下:

root@9876543210abcdef:/# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
    <title>My Docker App</title>
</head>
<body>
    <h1>Hello, Docker!</h1>
</body>
</html>
  1. 停止并删除容器:
docker stop my-web-app-container
docker rm my-web-app-container

输出如下:

my-web-app-container
my-web-app-container

通过以上步骤,你已经成功地使用Docker部署了一个简单的Web应用。这展示了Docker的强大功能,可以快速构建、部署和管理应用。

从Docker Hub下载现有Web应用镜像并部署

假设我们要从Docker Hub下载一个现有的Web应用镜像并部署,以 nginx 为例:

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

输出如下:

9876543210abcdef

这将下载 nginx 镜像并启动一个新的容器,访问 http://localhost:8080 可以看到默认的Nginx页面。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消