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
相关推荐
zfoo-framework2 小时前
docker compose安装gitea实现公司内部开发git私有仓库
docker·容器·gitea
无巧不成书02182 小时前
基于WSL 2的Docker远程开发全栈实战指南
运维·docker·容器·docker desktop·wsl 2·vs code远程开发·容器化开发
Renhao-Wan2 小时前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器
赵庆明老师2 小时前
Linux Docker打包
linux·运维·docker
Eloudy2 小时前
docker pull ubuntu:22.04 失败的解决记录
运维·docker·容器
taWSw5OjU4 小时前
Docker] Docker中`overlay2`磁盘占用爆满的清理方案
docker·容器·eureka
wwj888wwj18 小时前
Docker基础(复习)
java·linux·运维·docker
DONG99919 小时前
配置docker代理
docker·容器
怎么就重名了19 小时前
docker可以动态修改端口映射吗
运维·docker·容器
JEECG低代码平台20 小时前
敲敲云零代码平台一键部署实战:命令安装 vs Docker 安装
运维·docker·容器