Docker 常用命令详解

目录

  1. Docker 简介
  2. 安装 Docker
  3. Docker 基本命令
    • 镜像命令
    • 容器命令
    • 网络命令
  4. Docker 高级命令
    • 数据卷
    • Docker Compose
  5. 实战案例
    • 部署一个简单的 Web 应用
    • 使用 Docker Compose 管理多容器应用
  6. 总结

Docker 简介

Docker 是一个开源的容器化平台,提供了简化应用程序开发、部署和运行的工具。Docker 容器是一种轻量级、可移植、自给自足的软件包,包含了应用程序及其所有依赖项。通过使用 Docker,开发人员可以确保应用程序在不同环境中具有一致的行为。

安装 Docker

在不同操作系统上安装 Docker 的方法略有不同。以下是一些常见操作系统上的安装步骤:

Windows

  1. 下载 Docker Desktop for Windows。
  2. 双击安装包并按照提示进行安装。
  3. 安装完成后,启动 Docker Desktop。

macOS

  1. 下载 Docker Desktop for Mac。
  2. 双击安装包并按照提示进行安装。
  3. 安装完成后,启动 Docker Desktop。

Linux

在 Ubuntu 上安装 Docker 的步骤如下:

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce
sudo systemctl status docker

Docker 基本命令

镜像命令

拉取镜像

从 Docker Hub 拉取镜像:

docker pull <image_name>:<tag>

例如,拉取最新版本的 Ubuntu 镜像:

docker pull ubuntu:latest
列出镜像

列出本地存储的所有镜像:

docker images
删除镜像

删除指定镜像:

docker rmi <image_id>

强制删除镜像:

docker rmi -f <image_id>
构建镜像

从 Dockerfile 构建镜像:

docker build -t <image_name>:<tag> <path_to_dockerfile>

例如,从当前目录下的 Dockerfile 构建镜像:

docker build -t myapp:latest .

容器命令

创建并运行容器

创建并运行容器:

docker run -d --name <container_name> <image_name>:<tag>

例如,运行一个 Ubuntu 容器:

docker run -d --name myubuntu ubuntu:latest
列出容器

列出所有正在运行的容器:

docker ps

列出所有容器(包括已停止的容器):

docker ps -a
停止容器

停止指定容器:

docker stop <container_id>
启动容器

启动指定容器:

docker start <container_id>
删除容器

删除指定容器:

docker rm <container_id>
进入容器

通过 exec 命令进入正在运行的容器:

docker exec -it <container_id> /bin/bash

网络命令

创建网络

创建自定义网络:

docker network create <network_name>
列出网络

列出所有网络:

docker network ls
删除网络

删除指定网络:

docker network rm <network_id>
将容器连接到网络

将指定容器连接到网络:

docker network connect <network_name> <container_id>
从网络断开容器

将指定容器从网络断开:

docker network disconnect <network_name> <container_id>

Docker 高级命令

数据卷

创建数据卷

创建数据卷:

docker volume create <volume_name>
列出数据卷

列出所有数据卷:

docker volume ls
挂载数据卷

将数据卷挂载到容器:

docker run -d --name <container_name> -v <volume_name>:<container_path> <image_name>:<tag>

例如,将数据卷挂载到 Ubuntu 容器的 /data 目录:

docker run -d --name myubuntu -v mydata:/data ubuntu:latest

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml 文件,可以方便地管理多个容器及其依赖关系。

安装 Docker Compose

可以使用以下命令安装 Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Docker Compose 基本命令
  • 启动服务:

    docker-compose up
    
  • 停止服务:

    docker-compose down
    
  • 查看服务日志:

    docker-compose logs
    
  • 重启服务:

    docker-compose restart
    

实战案例

部署一个简单的 Web 应用

下面是一个使用 Docker 部署简单的 Python Flask Web 应用的示例。

创建项目目录结构
myflaskapp/
├── app.py
├── Dockerfile
└── requirements.txt
编写 app.py
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return "Hello, World!"if __name__ == '__main__':app.run(host='0.0.0.0')
编写 requirements.txt
flask
编写 Dockerfile
# 使用官方 Python 镜像作为基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 复制当前目录内容到工作目录
COPY . /app# 安装依赖
RUN pip install -r requirements.txt# 暴露容器的 5000 端口
EXPOSE 5000# 运行应用程序
CMD ["python", "app.py"]
构建并运行 Docker 容器
  1. 构建镜像:

    docker build -t myflaskapp:latest .
    
  2. 运行容器:

    docker run -d -p 5000:5000 myflaskapp:latest
    
  3. 在浏览器中访问 http://localhost:5000,应该看到 “Hello, World!”。

使用 Docker Compose 管理多容器应用

下面是一个使用 Docker Compose 管理多容器应用的示例,该应用包括一个 Flask Web 应用和一个 Redis 数据库。

创建项目目录结构
mycomposeapp/
├── app.py
├── Dockerfile
├── requirements.txt
└── docker-compose.yml
编写 app.py
from flask import Flask
from redis import Redisapp = Flask(__name__)
redis = Redis(host='redis', port=6379)@app.route('/')
def hello():redis.incr('hits')return f"Hello, World! This page has been viewed {redis.get('hits').decode('utf-8')} times."if __name__ == '__main__':app.run(host='0.0.0.0')
编写 requirements.txt
flask
redis
编写 Dockerfile
# 使用官方 Python 镜像作为基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 复制当前目录内容到工作目录
COPY . /app# 安装依赖
RUN pip install -r requirements.txt# 暴露容器的 5000 端口
EXPOSE 5000# 运行应用程序
CMD ["python", "app.py"]
编写 docker-compose.yml
version: '3'services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"
使用 Docker Compose 启动应用
  1. 启动应用:

    docker-compose up -d
    
  2. 在浏览器中访问 http://localhost:5000,应该看到 “Hello, World! This page has been viewed X times.”,其中 X 表示页面的访问次数。

总结

本文详细介绍了 Docker 的常用命令,包括镜像、容器和网络的基本命令,以及数据卷和 Docker Compose 等高级命令。通过实战案例展示了如何使用 Docker 部署和管理应用程序。希望本文能帮助读者全面掌握 Docker 的基本操作和高级用法,提高在容器化技术方面的技能。如果你有任何疑问或需要进一步的帮助,欢迎随时联系我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OCC 创建方管(拉伸操作)

目录 一、OCC 拉伸操作 二、例子 1、使BRepBuilderAPI_MakeFace 2、使用BRepPrimAPI_MakeRevol 3、垂直路径扫掠 一、OCC 拉伸操作 BRepPrimAPI_MakeSweep Class Reference - Open CASCADE Technology Documentation OCC提供几种图形的构建是由基本图形的旋转,拉伸等方…

C++进程遍历的几种方法

在应用层下&#xff0c;进程遍历有多种方式&#xff0c;这里介绍几种常用的方式&#xff1a;进程快照、NtQuerySystemInformation、EnumProcesses函数、WMI等。 在C#中Process类提供了一个GetProcesses()函数&#xff0c;这个函数内部就是调用的NtQuerySystemInformation进行获…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(二)|| 堆 / 栈

堆和栈 1. 堆 堆就是空闲的一块内存&#xff0c;可以通过malloc申请一小块内存&#xff0c;用完之后使用再free释放回去。管理堆需要用到链表操作。 比如需要分配100字节&#xff0c;实际所占108字节&#xff0c;因为为了方便后期的free&#xff0c;这一小块需要有个头部记录…

电子加密狗的定义与功能

电子加密狗&#xff0c;也称为加密锁、硬件锁或USB密钥&#xff0c;是一种用于软件保护和授权管理的硬件设备。它通常是一个外部设备&#xff0c;插入到计算机的USB接口上&#xff0c;通过加密算法和技术来确保软件的安全性和防止非法复制、盗版以及未经授权的使用。以下是关于…

软件测试面试准备工作

1、 什么是数据库? 答&#xff1a;数据库是按照某种数据模型组织起来的并存放二级存储器中的数据集合。 2、 什么是关系型数据库? 答&#xff1a;关系型数据库是建立在关系数据库模型基础上的数据库&#xff0c; 借助集合代数等概念和方法处理数据库中的数据。目前主流的关…

AR 眼镜之-蓝牙电话-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 1. &#x1f531; 技术方案 1.1 结构框图 1.2 方案介绍 1.3 实现方案 步骤一&#xff1a;屏蔽原生蓝牙电话相关功能 步骤二&#xff1a;自定义蓝牙电话实现 2. &#x1f4a0; 屏蔽原生蓝牙电话相关功能 …

[linux] seqeval安装报错

新建一个新的环境 然后安装&#xff1a; # 不能拷贝别人的环境再安mebert_wash的环境。有冲突。我需要重新安一个空的conda环境&#xff0c;再安装。 # conda create -n wash python3.10 ipykernel python -m pip install --upgrade setuptools python -m pip install --upgr…

【Unity】关于Luban的简单使用

最近看了下Luban导出Excel数据的方式&#xff0c;来记录下 【Unity】关于Luban的简单使用 安装Luban开始使用UnityLubanC# 扩展 安装Luban Luban文档&#xff1a;https://luban.doc.code-philosophy.com/docs/beginner/quickstart 1.安装dotnet sdk 8.0或更高版本sdk 2.githu…

ViewPager2实现原理分析

ViewPager2 是 Android 开发中用于实现水平滑动视图的组件&#xff0c;它是 ViewPager 的一个改进版&#xff0c;提供了更多的功能和更好的性能。下面&#xff0c;我们将结合源码来简要分析 ViewPager2 的实现原理。 1. 基本架构 ViewPager2 的主要架构基于 RecyclerView&…

Activiti 6 兼容openGauss数据库bytes类型不匹配

当前有个项目需要做国产调研&#xff0c;需要适配高斯数据库&#xff0c;项目启动的时候&#xff0c;提示column "bytes_" is type bytea but expression is of type blob byte_字段是act_ge_bytearray表的&#xff0c;openGauss里的类型是bytea&#xff0c;类型是匹…

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程

一、问题描述 在日常的工作中,我们需要给不同角色的人员创建不同的账号,他们各自可访问的数据库或权限不一样,这时就需要创建用户和赋予不同的权限内容了。 二、问题分析 1、创建不同的角色账号; 2、给这些账号授予各自可访问数据库的权限。 三、实现方法 Centos8安装…

房子装修完显得大的一些

雅静说房子装修完怎么让它显得大一些      说七点,给大家总结装修三十年的经验      1,把阳台纳入大厅里来,拆掉开发商给的推拉门,换个大点但不影响通风的窗户      视觉上的通透感就会显得空间更大      2,全屋通铺,在瓦工阶段跟师父交代好,      直接通铺…

Java Generic练习(2024.7.25)

GenericExercise1 package GenericExercise20240725;import java.util.ArrayList; import java.util.List;public class GenericExercise1 {public static void main(String[] args) {// 泛型是JDK5以后引入的新的特性&#xff0c;主要目的是为了提供编译时的类型安全检测机制…

STM32——GPIO(LED闪烁)

一、什么是GPIO&#xff1f; GPIO&#xff08;通用输入输出接口&#xff09;&#xff1a; 1.GPIO 功能概述 GPIO 是通用输入/输出&#xff08;General Purpose I/O&#xff09;的简称&#xff0c;既能当输入口使用&#xff0c;又能当输出口使用。端口&#xff0c;就是元器件…

Java 代码规范if嵌套

在Java编程中&#xff0c;过度的if嵌套会使代码难以阅读和维护。为了遵循良好的代码规范&#xff0c;我们应尽量减少嵌套的深度。这通常可以通过重新组织代码或使用其他结构&#xff08;如switch语句&#xff0c;或者将逻辑封装到单独的方法中&#xff09;来实现。 以下是一个…

android settings提示音开关状态与修改(一)

android系统&#xff0c;settings提示音类型&#xff1a; 提示音开关默认状态&#xff0c;定义文件&#xff1a; frameworks/base/packages/SettingsProvider/res/values/defaults.xml 提示音默认定义&#xff1a; // 锁屏提示音 <integer name"def_lockscreen_sounds_…

Kylin自定义函数全解:释放数据分析的无限潜能

Kylin自定义函数全解&#xff1a;释放数据分析的无限潜能 Apache Kylin是一款高性能的分布式分析引擎&#xff0c;专为大规模数据集提供快速的SQL查询能力。Kylin的一个强大特性是支持自定义函数&#xff0c;这使得用户能够根据自己的业务需求扩展Kylin的数据处理能力。本文将…

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展 时间&#xff1a;2025年3月14-16日 地点&#xff1a;西安国际会展中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&am…

MySQL C API的介绍

1. MySQL C API是什么&#xff1f; MYSQL是最流行的SQL数据库管理系统&#xff0c;MySQL C API是一个基于C语言的API&#xff0c;用C语言编写的客户端应用程序可以使用它与MySQL服务器进行通信。 2. MySQL C API的发布 MYSQL C API代码随MySQL一起发布&#xff0c;并在libmy…

Nacos 2.x 新增 grpc 端口,Nginx 需要配置TCP端口转发的注意事项

Nacos 2.x 开始&#xff0c;最大的变化就是端口。在默认主端口 8848 之外又新增了三个端口&#xff0c;新增端口是在配置的主端口 server.port 的基础上&#xff0c;进行一定偏移量自动生成。 8848&#xff08;主端口&#xff0c;默认8848&#xff09;web页面端口及相关http接口…