docker从入门到实战

Docker

Docker 基础

Docker 容器与镜像的概念

容器 (Container)

  • 容器是一种可执行的虚拟化环境,它包含了应用程序以及运行此应用程序所需的所有依赖项(包括软件、库、配置等)。容器只存在于主机操作系统的内存中,不占用独立的系统资源,因此可以实现更高效的资源利用和更快速的启动和停止。

镜像 (Image)

  • 镜像是一个只读的静态文件,其中包含了容器运行所需的所有文件系统结构、配置、依赖项等元素。镜像构建时会从一个基础镜像开始,通过一系列指令生成一个新的镜像。每个镜像都有一个唯一的标识符(Image ID),并且可以基于其它镜像进行创建和修改。

简而言之,容器是运行中的应用程序,镜像则是容器的模板或原型,可以用来创建和管理容器。在使用 Docker 时,我们通常会先创建一个镜像,并通过这个镜像来生成并管理多个容器,它们共享同一份镜像文件。因此,在理解如何使用 Docker 时,对容器和镜像的理解是非常重要的。

Docker 应用的组成和架构

Docker 应用通常由以下三个组件构成:

  1. Docker 客户端

    Docker 客户端是我们使用的命令行工具,通过它我们可以管理、创建、启动和停止容器、镜像等各类 Docker 资源。Docker 客户端会发送操作指令给 Docker 引擎(Daemon),并接收和显示执行结果。

  2. Docker 引擎 (Daemon)

    Docker 引擎是 Docker 的核心组件,负责运行和管理容器和镜像。当 Docker 客户端发送指令时,Docker 引擎会将其解释并进行相应的操作。在 Linux 系统中,Docker 引擎会以一个后台进程的方式运行,并监听实例配置的套接字,接收来自客户端的命令请求。

  3. Docker Registry

    Docker Registry 是存储和共享 Docker 镜像的中央仓库。类似于 Git 或 SVN 中的版本控制中心,Docker Registry 提供了集中式的镜像管理和分发服务。 Docker 客户端可以从本地或远程的 Docker Registry 中拉取所需的镜像,也可以将本地的镜像推送到 Registry 中进行共享和备份。

综上所述,Docker 应用的架构包括 Docker 客户端、Docker 引擎和 Docker Registry 三部分,它们协同工作,使得 Docker 可以方便地创建、管理和分发应用所需要的镜像和容器。

Docker 安装与配置

二进制包安装
# 1、下载二进制
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.8.tgz
# 2、解压
tar -zxv docker-20.10.8.tgz /usr/bin/docker
# 3、创建service文件
cat > /etc/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false -H unix://
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
# 4、启动docker
service docker start
rpm包安装
# 1、安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2、添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3、更新并安装 Docker-CE
yum makecache fast
yum -y install docker-ce
# 4、开启docker服务
service docker start

Docker 命令行工具的使用

Docker 提供了一系列命令行工具,例如 Docker CLI、docker-compose 和 docker-machine 等工具,用于管理容器、镜像和 Docker 应用的其它组件。以下是 Docker 命令行工具的使用方法:

  1. Docker CLI

    Docker CLI 是 Docker 的核心命令行工具,在终端中通过 docker 命令调用。它支持一系列子命令,包括:

    • docker run :创建并启动一个新的容器。
    • docker build:构建新的 Docker 镜像,可以基于从 Dockerfile 文件中定义的指令进行操作。
    • docker ps :列出正在运行的所有容器。
    • docker images:列出本地缓存的所有 Docker 镜像。
    • docker exec :进入到正在运行的容器中,并在其中执行一些命令。
  2. docker-compose

    Docker Compose 提供了一种方便的方式来定义和运行多个关联的 Docker 容器。通过编写一个 YAML 配置文件,我们可以定义每个容器要使用的镜像、挂载点、网络协议等信息。然后,使用 docker-compose up 命令即可启动整个应用程序。

  3. docker-machine

    Docker Machine 允许用户在不同的主机上快速安装 Docker 工具平台。通过这个工具,我们可以在远程主机或云服务器上自动部署和配置 Docker 环境,而无需手动执行一些繁琐的步骤。

总之,在实际使用 Docker 时,通过熟练掌握上述命令和工具,可以更加方便和高效地管理和使用 Docker 平台。

Docker Hub 和 Docker Registry

Docker Hub 和 Docker Registry 都是用于存储和共享 Docker 镜像的平台,它们之间有以下几个区别:

  1. Docker Hub

    Docker Hub 是 Docker 公司维护的官方镜像仓库,其中包括大量常见的基础镜像,例如 Ubuntu、Debian、CentOS 等。Docker Hub 不仅提供了对这些官方镜像的免费访问,同时也是社区成员分享和发布 Docker 镜像的主要平台之一。用户可以上传、分享和搜索公开的 Docker 镜像,也可以在 Docker Hub 中创建私有仓库来进行团队内部协作。

    # docker 客户端登录
    docker login				# 需要有一个docker中心的用户,没有的话要去注册
    # 从仓库拉取镜像
    docker pull httpd  			# 如果你的本地镜像(docker images)里没有这个镜像,docke会自动从 docker hub 仓库里拉取镜像
    
  2. Docker Registry

    Docker Registry 是一个轻量级且可扩展的开源工具,用于构建和管理自己的 Docker 镜像仓库。与 Docker Hub 不同,Docker Registry 可以在本地或公共云中部署,从而更好地满足企业或组织内部需求。Docker Registry 支持多种后端存储驱动方式,如 Amazon S3、Google Cloud Storage 和 Microsoft Azure Blob Storage,同时也支持加密控制、身份认证等多种高级功能。

综上所述,Docker Hub 和 Docker Registry 都是用于存储和共享 Docker 镜像的平台,前者是一个免费且广泛使用的公共镜像仓库,而后者则提供了更加灵活、可定制和安全的镜像管理方案。

Docker 镜像管理

列出和搜索镜像

在 Docker 中,可以使用 docker image 命令来列出和搜索本地或远程镜像。具体的命令如下:

# 列出列出所有本地镜像
docker images     &&  docker images ls

# 远程搜素镜像
docker search <image-name>

创建和修改镜像

在 Docker 中,可以使用名为 “Dockerfile” 的文件来创建和配置 Docker 镜像,并使用 docker image build 命令来从 Dockerfile 构建镜像。具体步骤如下:

  1. 编写 Dockerfile 文件

    创建一个名为 “Dockerfile” 的新文件,该文件应包含构建所需的所有指令和配置:

    # 设置基础镜像
    FROM ubuntu:latest
    
    # 运行命令更新软件包列表
    RUN apt-get update \
        && apt-get upgrade -y
    
    # 安装 Nginx 服务器
    RUN apt-get install -y nginx
    
    # 将本地文件拷贝到镜像内部目录中
    copy index.html /usr/share/nginx/html/
    
    # 将容器监听的端口暴露出去
    EXPOSE 80
    
    # 启动 Nginx 服务
    cmd ["nginx", "-g", "daemon off;"]
    
  2. 执行构建命令

    使用以下命令来执行构建,并根据名称和标签创建和保存新的 Docker 镜像:

    docker image build -t my-nginx-image:v1 .
    

    其中 -t 参数用于指定镜像名称和标签,. 表示 Dockerfile 所在的当前目录。

  3. 使用新建的镜像

    使用以下命令来验证新的 Docker 镜像已经创建成功,并启动新的容器:

    docker run -p 8080:80 my-nginx-image:v1
    

    端口映射 -p 参数将容器内的 80 端口映射到本地的 8080 端口,因此您可以在浏览器上访问 http://localhost:8080 查看 Nginx 服务器。

除了以上命令,还可以使用其他 Docker 命令来管理和修改现有镜像,例如:

  • docker image pull :从远程获取镜像。
  • docker image tag :为现有的本地镜像打标签。
  • docker image push :将本地镜像推送到远程仓库。
  • docker image rm :删除本地镜像等。

Dockerfile 的编写和使用

Dockerfile 是一种用于定义 Docker 镜像的文本文件。编写 Dockerfile 的目的是为了构建标准化、可重复使用、可自动构建和半自动化部署的镜像。以下是一个简单 Dockerfile 文件示例:

# 基础镜像
FROM ubuntu:latest

# 作者信息
LABEL maintainer="Your Name <your.name@example.com>"

# 安装所需软件包
RUN apt-get update \
    && apt-get install -y software-properties-common \
                          python3.8 \
                          python3-pip \
                          git \
    && rm -rf /var/lib/apt/lists/*

# 工作目录
WORKDIR /app

# 拷贝文件到容器中
COPY . .

# 安装 Python 依赖包
RUN pip3 install --no-cache-dir -r requirements.txt

# 对外暴露端口
EXPOSE 8000

# 启动命令
CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000" ]

上述 Dockerfile 中,我们首先指定基础镜像为最新版本的 Ubuntu 镜像,然后安装所需的软件包,并将工作目录设为 /app,接着拷贝应用代码到镜像内部,并安装依赖包,对外暴露 8000 端口并设置启动命令。

在使用 Dockerfile 构建镜像时,请确保在 Dockerfile 所在目录运行以下命令:

docker build -t image-name:tag .

其中,-t 用于指定镜像的名称和标签;. 表示 Dockerfile 文件所在目录。

构建完成后,可以使用 docker run 命令启动容器并验证镜像是否按预期运行。如果需要修改 Dockerfile,请重新运行构建命令以更新镜像。

导出和导入镜像

在 Docker 中,可以使用 docker save 命令将一个或多个镜像打包为 tar 文件(通常称为 Docker 镜像存档文件),然后使用 docker load 命令将该文件导入到本地 Docker 服务器中。以下是 docker savedocker load 命令的示例用法:

导出镜像
docker save myimage:latest -o myimage.tar

上述命令将名为 “myimage” 并标记为 “latest” 的 Docker 镜像保存至名为 “myimage.tar” 的 tar 文件中。

导入镜像

在执行以下命令导入 Docker 镜像之前,需确保镜像存档文件已位于相应位置:

docker load -i myimage.tar

上述命令将从名为 “myimage.tar” 的 tar 文件中读取 Docker 镜像,并在本地 Docker 服务器中创建与该镜像对应的镜像。

除了 docker savedocker load 命令外,还可以使用以下 Docker 命令来管理和操作 Docker 镜像:

  • docker images :列出所有本地镜像。
  • docker tag :为现有的本地镜像打标签。
  • docker push :将本地镜像推送到远程仓库。
  • docker rmi :删除本地镜像等。

需要注意的是,在使用导出和导入镜像的方法时,镜像内的信息和状态都会一同导出或导入,包括容器中从运行到关闭的所有内容。因此不推荐将大型镜像和实例导出为文件,并通过文件共享方式进行传递,除非使用者意识到该问题并有充分准备处理相关问题。

Docker 容器管理

启动、停止和删除容器

在 Docker 中,容器是可运行的镜像实例。可以使用 docker run 命令在 Docker 上启动新的容器(不同的容器名称和 ID 是唯一的)。以下是如何启动、停止和删除 Docker 容器的示例:

启动容器
docker run --name myws nginx:latest

上述命令将基于名为 “myws” 并标记为 “latest” 的 Docker 镜像启动一个名为 “nginx” 的容器。

停止容器
docker stop myws

上述命令将停止名为 “myws” 的容器。

删除容器
docker rm myws

上述命令将删除名为 “myws” 的容器。请注意,如果容器处于运行状态,则需要先停止该容器,然后才能进行删除操作。

除了上述命令之外,还有一些其他有用的 Docker 命令,如下所示:

  • docker ps :列出所有正在运行的容器。
  • docker logs :查看容器日志。
  • docker inspect :查看容器的详细信息。
  • docker exec :在正在运行的容器中执行命令。

需要注意的是,在删除容器时,容器内部的存储数据也将被删除。要保留这些数据,请使用数据卷来挂载宿主机上的目录,以便在容器删除时保存数据。

管理容器网络和存储

在 Docker 中,网络和存储都是容器的重要组成部分。可以使用以下 Docker 命令来管理容器网络和存储:

管理容器网络

Docker 提供了多种方式来管理容器之间的网络连接,包括桥接网络、主机网络和用户自定义网络。以下是一些常用的 Docker 命令来管理容器网络:

  • docker network create :创建一个新的自定义网络。
  • docker network connect :将一个容器连接到一个现有的网络。
  • docker network disconnect :将一个容器从一个网络中断开连接。
  • docker network ls :列出所有 Docker 网络。
管理容器存储

在 Docker 中,容器通常需要访问某些共享存储,如数据库或其它存储服务。也可以挂载数据卷来共享容器内外部的文件系统目录。以下是一些常用的 Docker 命令来管理容器存储:

  • docker volume create :创建一个新的存储卷。
  • docker volume ls :列出所有 Docker 存储卷。
  • docker volume rm :删除一个或多个存储卷。
  • docker run -v :挂载一个存储卷,使得卷的内容可以由宿主机或其他容器共享(采用 -v 开关)。

需要注意的是,在使用容器网络和存储时,请确保将其配置为安全或适应需求的设置。例如,当使用 Docker 桥接网络时,容器之间可以自由通信,因此确保运行在此网络上的容器都来自可靠来源是重要的。在有些情况下,需要跨多个容器使用数据卷并且需要对卷进行访问控制,这就需要更仔细的分析和管理。

常见运行选项和参数

在 Docker 中,使用 docker run 命令来启动一个新的容器。下面列举一些常见的运行选项和参数:

指定镜像和标签

使用 -i 选项以交互方式运行容器,并使用默认 ENTRYPOINT 或设置的命令进行操作。

使用 -t 选项来分配一个伪终端(Pseudo-Terminal),通常与 -i 选项结合使用。

使用 --name 选项来指定容器名称。

使用 -d 选项以后台模式运行容器(Daemonized Mode)。

使用 --rm 选项在容器停止时是否自动删除容器。

例如,以下命令启动基于名为 “myimage” 标记为 “latest” 的 Docker 镜像的容器,并将其命名为 “mycontainer”:

docker run -it --name mycontainer myimage:latest
映射端口和挂载卷

使用 -p 选项将宿主机上的端口映射到容器内部运行的端口上,形式为 <host_port>:<container_port>。例如,以下命令将宿主机的 8080 端口映射到容器内部的 80 端口:

docker run -p 8080:80 myimage:latest

使用 -v 选项将宿主机或其他容器内的存储卷挂载到容器内的文件系统目录上,形式为 <host_path>:<container_path>。例如,以下命令将宿主机上的 /path/on/host 目录挂载到容器内部的 /path/on/container 目录上:

docker run -v /path/on/host:/path/on/container myimage:latest
环境变量和启动命令

使用 -e 选项设置环境变量。

使用 --entrypoint 选项可以覆盖 Dockerfile 中指定的默认 ENTRYPOINT 命令。例如,以下命令将在 Docker 容器中运行指定的命令而不是 Dockerfile 中定义的 ENTRYPOINT 命令:

docker run --entrypoint "/bin/bash" myimage:latest

更多的 Docker 运行选项和参数可以在 Docker 官方文档中查找。

进入容器交互终端

在 Docker 中可以使用 docker exec 命令进入正在运行的容器交互终端。以下是如何使用 docker exec 命令进入容器的示例:

查看正在运行的容器列表

首先使用 docker ps 命令列出正在运行的容器列表。查找目标容器并记下其名称或 ID。

docker ps

示例输出:

CONTAINER ID   IMAGE          COMMAND      CREATED         STATUS         PORTS                    NAMES
2f3c9b9fa1b0   ubuntu:latest  "bash"       3 minutes ago   Up About a minute                            admiring_brattain
e63a66d01ab7   nginx:latest   "/docker-entrypoint.…"   7 days ago   Up About an hour   0.0.0.0:80->80/tcp   nginx
进入容器

使用 docker exec -it 命令加上容器的名称或 ID 并指定要进入的 shell,其中 -i-t 选项启用了交互式会话和伪终端。例如:

docker exec -it myws bash

执行该命令后将进入正在运行的容器的 Bash 环境中。现在你可以在容器中运行任何命令,操作文件系统等等。

需要注意的是,只有在容器内安装了所需的 shell(如 Bash、Zsh、Fish)时,才能使用相应的 shell。如果没有安装,则需要先在容器内执行该 shell 的安装命令。例如,在 Ubuntu 容器中,可以通过以下命令安装 Bash:

apt-get update
apt-get install bash

现在你就可以使用 docker exec 命令进入正在运行的容器并在 Bash 环境中运行任何命令了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一款几乎可以运行任何应用程序的开源容器引擎。随着云计算和DevOps的普及,Docker已经成为从开发、测试到部署的必备工具。如果你想深入学习Docker,建议先下载《Docker入门实战PDF》。 《Docker入门实战PDF》是一本权威详细的Docker实践指南,由国内知名的Docker实践者编写。它从Docker的基本概念、安装、命令行操作到Docker的高级特性,以及介绍了如何将Docker用于构建应用、CI/CD流水线和容器集群管理等实践案例。这本书还涵盖了个人笔记、调试技巧、错误处理和最佳实践等方面。 如果你是一个开发人员或运维人员,想要更好地了解Docker容器化技术,那么《Docker入门实战PDF》是非常适合你的。这本书非常详细,内容涵盖了各种Docker使用场景,你可以通过下载PDF版的电子书免费阅读学习。通过实践,你可以深入了解Docker并且掌握如何使用它构建更加高效的应用程序和云计算环境。 ### 回答2: Docker是一款流行的容器化技术工具,它能够快速、高效地构建、打包和部署应用程序。由于其灵活性和易用性,越来越多的企业和开发者开始把Docker应用到他们的工作中。因此,学习如何使用Docker已经成为了许多人必备的技能。 对于想要学习Docker的人来说,《Docker入门实战》是一本非常好的参考书籍。它由德国作者Tobias Gesellchen所著,包含了有关Docker的基础知识、实践和最佳实践等方面的内容。 这本书的内容分为四个部分: 第一部分介绍了Docker基础,并展示如何在自己的计算机上安装和使用Docker。 第二部分主要讲解了如何使用Docker来构建和打包应用程序,以及如何使用Docker Compose来管理复杂的应用程序。 第三部分重点关注了Docker容器和网络的安全性,以及如何扩展和优化Docker容器的性能。 最后一部分提供了一些使用Docker的最佳实践和案例研究,以帮助读者快速掌握Docker的运用。 这本书不仅适用于Docker的初学者,还适合有经验的开发者和系统管理员。读完本书,您将会对Docker的工作原理有清晰的了解,掌握Docker的基础操作,应用Docker构建并部署应用程序,并可以使用Docker的最佳实践来提高您的效率。 总之,《Docker入门实战》是一本非常有用的书籍,能够帮助您更好地了解和使用Docker。您可以在各大电子书商城中购买或下载PDF版本来阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值