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
相关推荐
生活爱好者!18 小时前
NAS帮我找回童年的快乐!部署 小游戏
运维·服务器·docker·容器·娱乐
自在极意功。19 小时前
nginx和docker面试题
运维·nginx·docker
不做超级小白21 小时前
执行docker命令时自动启动Docker Desktop?一个小工具让开发体验更丝滑
windows·docker
222you21 小时前
Ubuntu当中的Docker安装和镜像管理
ubuntu·spring cloud·docker
心易行者1 天前
别再说“在我的机器上能跑”了!Docker 入门指南,专治各种环境不服
运维·人工智能·docker·容器
zhim001 天前
【保姆级教程】使用 Docker 部署 PostgreSQL + pgvector(含踩坑指南)
linux·docker
进击切图仔1 天前
ROS 跨机通信与 Docker 多机环境搭建
运维·docker·容器
切糕师学AI1 天前
Kubernetes 中的 Informer 机制
云原生·容器·kubernetes·informer
xiaoye37081 天前
docker 迁移mysql容器
mysql·docker
切糕师学AI1 天前
Kubernetes Operator 详解
运维·分布式·云原生·容器·kubernetes·自动化·运维自动化