Docker核心概念与实战指南

本文通过 实际操作示例 带你从 0 学会 Docker。

内容包括:

  • Docker安装
  • 镜像管理
  • 容器管理
  • 数据卷
  • Dockerfile
  • Docker Compose

一、Docker安装

1 安装Docker

bash 复制代码
curl -fsSL https://get.docker.com -o install-docker.sh
sh install-docker.sh

查看版本

css 复制代码
docker --version

示例输出

复制代码
Docker version 24.0.5, build ced0996

查看服务状态

lua 复制代码
systemctl status docker

启动docker

sql 复制代码
systemctl start docker

设置开机启动

bash 复制代码
systemctl enable docker

二、配置镜像加速

编辑配置文件

bash 复制代码
vi /etc/docker/daemon.json

添加内容

json 复制代码
{
  "registry-mirrors":[
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
  ]
}

重启docker

复制代码
systemctl restart docker

三、Docker镜像管理

1 拉取镜像

下载 nginx 镜像

复制代码
docker pull nginx

示例输出

vbnet 复制代码
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:xxxx
Status: Downloaded newer image for nginx:latest

2 查看镜像

复制代码
docker images

示例

复制代码
REPOSITORY   TAG       IMAGE ID       SIZE
nginx        latest    605c77e624dd   141MB

3 删除镜像

按名称删除

复制代码
docker rmi nginx

按ID删除

复制代码
docker rmi 605c77e624dd

4 指定CPU架构

有些服务器需要指定架构

ini 复制代码
docker pull --platform=linux/amd64 nginx

常见架构:

bash 复制代码
linux/amd64
linux/arm64

四、Docker容器管理

1 创建并运行容器

arduino 复制代码
docker run nginx

如果本地没有镜像,Docker会自动下载。


2 后台运行容器

arduino 复制代码
docker run -d nginx

示例输出

复制代码
a8d3c1b34f1f9b

3 查看运行中的容器

复制代码
docker ps

示例

复制代码
CONTAINER ID   IMAGE   STATUS
a8d3c1b34f1f   nginx   Up 10 seconds

查看所有容器

css 复制代码
docker ps -a

4 端口映射

启动 nginx 并映射端口

arduino 复制代码
docker run -d -p 80:80 nginx

访问:

arduino 复制代码
http://服务器IP

就可以看到 nginx 页面。


5 指定容器名称

css 复制代码
docker run -d \
--name mynginx \
-p 80:80 \
nginx

查看容器

复制代码
docker ps

输出

复制代码
CONTAINER ID   IMAGE   NAMES
xxxx           nginx   mynginx

6 停止容器

arduino 复制代码
docker stop mynginx

启动容器

sql 复制代码
docker start mynginx

删除容器

bash 复制代码
docker rm mynginx

五、进入容器

进入容器终端

bash 复制代码
docker exec -it mynginx /bin/bash

如果没有 bash

bash 复制代码
docker exec -it mynginx /bin/sh

查看容器文件

bash 复制代码
ls

退出容器

bash 复制代码
exit

六、查看容器日志

查看日志

复制代码
docker logs mynginx

实时日志

复制代码
docker logs -f mynginx

七、数据持久化(Volume)

如果容器删除,数据会丢失。

所以需要 数据卷挂载。

示例

bash 复制代码
docker run -d \
-p 80:80 \
-v /data/nginx:/usr/share/nginx/html \
nginx

解释

复制代码
宿主机目录 : 容器目录

访问网页时实际读取:

bash 复制代码
/data/nginx

八、命名卷

创建卷

lua 复制代码
docker volume create nginx_data

查看卷

bash 复制代码
docker volume ls

使用卷

diff 复制代码
docker run -d \
-p 80:80 \
-v nginx_data:/usr/share/nginx/html \
nginx

查看卷信息

复制代码
docker volume inspect nginx_data

九、Dockerfile 构建镜像

创建 Dockerfile

sql 复制代码
FROM nginx

WORKDIR /app

COPY . /app

RUN apt update

EXPOSE 80

CMD ["nginx","-g","daemon off;"]

构建镜像

erlang 复制代码
docker build -t mynginx .

查看镜像

复制代码
docker images

运行镜像

arduino 复制代码
docker run -d -p 8080:80 mynginx

访问

arduino 复制代码
http://服务器IP:8080

十、Docker网络

查看网络

bash 复制代码
docker network ls

示例

sql 复制代码
NETWORK ID     NAME      DRIVER
xxxx           bridge    bridge
xxxx           host      host
xxxx           none      null

创建网络

lua 复制代码
docker network create mynet

使用网络

css 复制代码
docker run -d \
--network mynet \
--name nginx1 \
nginx

十一、Docker Compose

如果系统包含:

复制代码
nginx
mysql
redis
backend

手动管理会非常复杂。

Docker Compose 可以 一键启动全部容器。


docker-compose.yml

yaml 复制代码
version: "3"

services:

  nginx:
    image: nginx
    ports:
      - "80:80"

  redis:
    image: redis

  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456

启动服务

复制代码
docker compose up -d

查看容器

复制代码
docker ps

停止服务

复制代码
docker compose down

十二、总结

Docker核心体系

复制代码
镜像 Image
   ↓
容器 Container
   ↓
仓库 Registry

开发流程

arduino 复制代码
Dockerfile
   ↓
docker build
   ↓
docker run
   ↓
docker compose
相关推荐
m0_646429978 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
吴声子夜歌11 小时前
Docker入门与实战——实战案例(Web服务与应用)
docker·容器
Wang's Blog11 小时前
Java 项目部署之 Docker工具快速入门: Docker 架构拆解:镜像、容器、守护进程与 Registry
java·docker·架构
java_logo11 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
数据库·人工智能·docker·agent·火山引擎·openviking·轩辕镜像
a59865212 小时前
Docker云手机搭建挂机环境,外网远程访问完整实操
docker·容器·智能手机·云手机
夜之眷属12 小时前
服务启动即崩:InetAddress.getLocalHost() 抛 UnknownHostException 排查记
java·运维·后端·docker
郭老二13 小时前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
Wang's Blog16 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
AIGC大时代17 小时前
LLM Agent 执行沙箱闸门:失败含义与当天最小实验
docker·沙箱·闸门·bubblewrap·llm agent
灯澜忆梦18 小时前
【docker】#2 | 基础命令
docker·容器·eureka