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
相关推荐
仙柒41518 小时前
Docker存储原理
运维·docker·容器
快乐的哈士奇20 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
weixin_449290011 天前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn07191 天前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
米高梅狮子1 天前
01.CentOS-Stream-8-packstack安装OpenStack
linux·云原生·容器·kubernetes·centos·自动化·openstack
zxd0203111 天前
EFK(Elasticsearch + Fluentd + Kibana) 日志收集系统
运维·docker·jenkins
终端行者1 天前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd
亚空间仓鼠1 天前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子1 天前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
console.log('npc')1 天前
Windows 11 → WSL2 → Ubuntu → Docker → Codex → Sub2API
windows·ubuntu·docker