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
相关推荐
张忠琳13 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
Elastic 中国社区官方博客14 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
风曦Kisaki17 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着201317 小时前
docker 安装 ,在centos7.9
运维·docker·容器
骑上单车去旅行20 小时前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka
前端Baymax21 小时前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes
spider_xcxc21 小时前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
java_logo21 小时前
Docker Compose 部署 Apache Superset:轻松搭建开源 BI 平台
docker·开源·apache·superset·轩辕镜像·superset部署方案·docker superset
zy happy21 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
阿标在干嘛1 天前
从物理机到K8s:政策快报平台的容器化部署实践
云原生·容器·kubernetes