问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker入门教程:从基础到实战部署一文概括!

创作时间:
作者:
@小白创作中心

Docker入门教程:从基础到实战部署一文概括!

引用
CSDN
1.
https://blog.csdn.net/zhouzongxin94/article/details/144053417

Docker是一种开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。这些容器可以在任何支持Docker的环境中运行,无论是本地开发环境、测试环境还是生产环境。本文将从Docker的基础概念、安装配置、常用命令详解、镜像管理、容器管理、网络存储管理、高级命令以及实战部署案例等多个方面,帮助读者快速入门并掌握Docker的基本使用方法。

1. Docker简介

Docker是一种开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。这些容器可以在任何支持Docker的环境中运行,无论是本地开发环境、测试环境还是生产环境。

容器与虚拟机的区别:

  • 轻量级:容器共享宿主机的操作系统内核,而虚拟机则需要完整的操作系统,导致虚拟机更为笨重。
  • 启动速度:容器启动速度极快,通常在秒级,而虚拟机启动可能需要数分钟。
  • 资源利用率:容器更高效地利用系统资源,因为它们共享宿主机的内核。

通过Docker,开发者可以实现“一次构建,处处运行”的目标,大大提升了开发和部署效率。

2. Docker安装与配置

在深入学习Docker命令之前,首先需要在您的开发环境中安装并配置Docker。以下以Ubuntu为例介绍安装步骤:

安装步骤

  1. 更新现有的软件包列表
sudo apt-get update  
  1. 安装必要的软件包,允许
    apt
    通过HTTPS使用仓库
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的APT仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"  
  1. 更新APT包列表,并安装Docker
sudo apt-get update  
sudo apt-get install docker-ce  
  1. 验证Docker安装是否成功
sudo docker run hello-world  

如果看到“Hello from Docker!”的消息,则表示安装成功。

配置Docker用户权限

为避免每次使用Docker命令都需要
sudo
,可以将当前用户添加到
docker
组:

sudo usermod -aG docker ${USER}  

然后重新登录以使更改生效。

3. 基本Docker命令详解

掌握Docker的基本命令是使用Docker的第一步。以下将介绍几组常用的Docker命令,帮助您快速上手。

docker run
docker run
命令用于创建并启动一个新的容器。其基本语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]  

常用选项:

  • -d
    :后台运行容器,返回容器ID。
  • -it
    :以交互模式运行容器,常用于调试或进入容器内部。
  • --name
    :为容器指定一个名称。
  • -p
    :映射容器端口到宿主机端口,例如
    -p 8080:80

示例:

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

此命令将以后台模式运行一个名为
my-nginx
的Nginx容器,并将容器的80端口映射到宿主机的8080端口。

docker ps
docker ps
命令用于列出当前运行的容器。默认情况下,只显示正在运行的容器。

常用选项:

  • -a
    :显示所有容器,包括已停止的。
  • -q
    :只显示容器ID。

示例:

docker ps -a  

此命令将列出所有容器,无论其当前状态如何。

docker stop

docker start
用于停止和启动容器。

停止容器:

docker stop [CONTAINER_ID或NAME]  

启动容器:

docker start [CONTAINER_ID或NAME]  

示例:

docker stop my-nginx  
docker start my-nginx  

docker exec
docker exec
命令允许在运行中的容器内执行命令,常用于进入容器内部进行操作。

基本语法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]  

常用选项:

  • -it
    :以交互模式进入容器。

示例:

docker exec -it my-nginx /bin/bash  

此命令将打开一个交互式的bash shell,让您可以在
my-nginx
容器内执行命令。

4. 镜像管理命令

镜像是Docker容器的基础,理解如何管理镜像对于高效使用Docker至关重要。

docker build
docker build
命令用于根据Dockerfile构建镜像。

基本语法:

docker build [OPTIONS] PATH | URL | -  

常用选项:

  • -t
    :为构建的镜像指定标签。

示例:

docker build -t my-app:latest .  

此命令将在当前目录下查找Dockerfile,并构建一个标签为
my-app:latest
的镜像。

docker pull

docker push
用于从Docker仓库拉取和推送镜像。

拉取镜像:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]  

示例:

docker pull nginx:latest  

此命令将从Docker Hub拉取最新版本的Nginx镜像。

推送镜像:

docker push [OPTIONS] NAME[:TAG]  

示例:

docker push my-repo/my-app:latest  

在推送之前,确保您已登录到目标Docker仓库,并且镜像标签正确。

docker images
docker images
命令用于列出本地存储的所有镜像。

基本语法:

docker images [OPTIONS] [REPOSITORY[:TAG]]  

示例:

docker images  

此命令将显示所有本地镜像的列表,包括仓库名、标签、镜像ID、创建时间和大小。

docker rmi
docker rmi
命令用于删除本地镜像。

基本语法:

docker rmi [OPTIONS] IMAGE [IMAGE...]  

示例:

docker rmi my-app:latest  

此命令将删除标签为
my-app:latest
的镜像。

5. 容器管理命令

除了镜像管理,容器的管理同样重要。以下介绍一些常用的容器管理命令。

docker rm
docker rm
命令用于删除一个或多个容器。

基本语法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]  

常用选项:

  • -f
    :强制删除正在运行的容器。
  • -v
    :删除与容器关联的卷。

示例:

docker rm my-nginx  

此命令将删除名为
my-nginx
的容器。如果容器正在运行,需要使用
-f
选项强制删除。

docker logs
docker logs
命令用于查看容器的日志输出,常用于调试和监控。

基本语法:

docker logs [OPTIONS] CONTAINER  

常用选项:

  • -f
    :跟随日志输出。
  • --tail
    :仅显示最近的指定行数。

示例:

docker logs -f my-nginx  

此命令将实时显示
my-nginx
容器的日志输出。

docker inspect
docker inspect
命令用于获取容器或镜像的详细信息,输出为JSON格式。

基本语法:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]  

示例:

docker inspect my-nginx  

此命令将显示
my-nginx
容器的详细配置信息,包括网络设置、挂载卷、环境变量等。

6. 网络与存储命令

Docker提供了强大的网络和存储管理功能,以下介绍相关命令。

docker network
docker network
命令用于管理Docker网络,支持创建、自定义和删除网络。

常用子命令:

  • create
    :创建一个新的网络。
  • ls
    :列出所有网络。
  • rm
    :删除一个或多个网络。

示例:

docker network create my-network  
docker network ls  
docker network rm my-network  

docker volume
docker volume
命令用于管理数据卷,帮助持久化容器数据。

常用子命令:

  • create
    :创建一个新的数据卷。
  • ls
    :列出所有数据卷。
  • rm
    :删除一个或多个数据卷。
  • inspect
    :获取数据卷的详细信息。

示例:

docker volume create my-volume  
docker volume ls  
docker volume rm my-volume  

7. 高级Docker命令

掌握高级命令可以让您更高效地使用Docker,以下介绍几个常用的高级命令。

docker-compose
docker-compose
是一个用于定义和管理多容器Docker应用程序的工具。通过
docker-compose.yml
文件,您可以一次性启动、停止和管理多个相关的容器。

基本语法:

docker-compose [OPTIONS] COMMAND [ARGS...]  

常用命令:

  • docker-compose up
    :启动并运行所有服务。
  • docker-compose down
    :停止并移除所有服务。
  • docker-compose build
    :构建或重建服务。

示例:

# docker-compose.yml  
version: '3'  
services:  
  web:  
    image: nginx:latest  
    ports:  
- "8080:80"  
  db:  
    image: mysql:5.7  
    environment:  
      MYSQL_ROOT_PASSWORD: example  

使用以下命令启动应用:

docker-compose up -d  

docker swarm
docker swarm
是Docker的原生集群管理和编排工具,允许您将多个Docker主机组成一个集群,并在其上部署服务。

基本命令:

  • docker swarm init
    :初始化一个新的Swarm集群。
  • docker swarm join
    :将节点加入到Swarm集群。
  • docker service create
    :在Swarm上创建一个新服务。
  • docker service ls
    :列出所有服务。
  • docker service rm
    :删除服务。

示例:

docker swarm init  
docker service create --name my-service -p 80:80 nginx  
docker service ls  

8. 常见问题与解决方案

在使用Docker的过程中,可能会遇到各种问题。以下列出一些常见问题及其解决方案。

问题1:

docker run
命令失败,提示“Cannot connect to the Docker daemon”

解决方案:

  • 确认Docker服务是否正在运行:
sudo systemctl status docker  
  • 如果未运行,启动Docker服务:
sudo systemctl start docker  
  • 确认当前用户是否在
    docker
    组中。如果没有,添加用户到
    docker
    组:
sudo usermod -aG docker ${USER}  

然后重新登录。

问题2:删除镜像时报错“image is being used by running container”

解决方案:

  • 停止并删除使用该镜像的容器:
docker stop [CONTAINER_ID或NAME]  
docker rm [CONTAINER_ID或NAME]  
  • 然后重新删除镜像:
docker rmi [IMAGE_ID或NAME]  

问题3:容器内无法访问外部网络

解决方案:

  • 检查容器的网络配置,确保其连接到了正确的Docker网络。
  • 确认宿主机的防火墙设置允许容器访问外部网络。
  • 使用
    docker inspect
    查看容器的网络设置,必要时重新配置网络。

9. 实战案例:使用Docker进行应用部署

为了更好地理解Docker命令的实际应用,以下通过一个实战案例展示如何使用Docker部署一个简单的Web应用。

案例描述

我们将部署一个基于Nginx和MySQL的Web应用,使用Docker Compose进行编排。

步骤1:创建项目目录

mkdir docker-web-app  
cd docker-web-app  

步骤2:编写

docker-compose.yml

version: '3'  
services:  
  web:  
    image: nginx:latest  
    ports:  
- "8080:80"  
    volumes:  
- ./nginx.conf:/etc/nginx/nginx.conf  
    depends_on:  
- db  
  db:  
    image: mysql:5.7  
    environment:  
      MYSQL_ROOT_PASSWORD: example  
      MYSQL_DATABASE: mydb  
    volumes:  
- db-data:/var/lib/mysql  
volumes:  
  db-data:  

步骤3:创建Nginx配置文件

在项目目录下创建
nginx.conf

events { }  
http {  
    server {  
        listen 80;  
        location / {  
            return 200 'Hello from Docker!';  
            add_header Content-Type text/plain;  
        }  
    }  
}  

步骤4:启动应用

docker-compose up -d  

步骤5:验证部署

在浏览器中访问
http://localhost:8080
,应看到“Hello from Docker!”的消息。

步骤6:查看容器状态

docker-compose ps  

步骤7:停止和删除应用

docker-compose down  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号