Docker入门笔记

1.概述
  • 基于Go云开源,一次镜像处处运行,系统平滑移植,容器虚拟化技术。

  • Docker容器(启动速度快、占用体积小)是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,

    &传统虚拟机则是在硬件层面实现虚拟化。

  • Docker组成(简易Linux):

    1.镜像(相当于容器的"源代码",docker镜像文件类似于Java的类模板)

​ 2.容器(类似于一个虚拟化的运行环境,容器实例类似于java中new出来的实例对象)

​ 3.仓库(集中存放镜像文件的场所)

  • 查看内核:

  • 在 Ubuntu 中安装 Docker:推荐

    并添加国内镜像:

    systemctl status docker

    sudo mkdir -p /etc/docker

    vim /etc/docker/daemon.json

    添加:

bash 复制代码
{
  "registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/" 
],
 "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
    ],
"debug": true,
"experimental": false
}

重载和重启dockers服务

sudo systemctl daemon-reload

sudo systemctl restart docker

docker info

2.命令
2.1 帮助启动类命令
命令 说明
systemctl start docker 启动 Docker
systemctl stop docker 停止 Docker
systemctl restart docker 重启 Docker
systemctl status docker 查看 Docker 状态
systemctl enable docker 设置开机自启
docker info 查看 Docker 系统信息(版本、容器/镜像数量等)
docker --help 查看 Docker 总体帮助文档
docker <具体命令> --help 查看具体命令的帮助文档(如 docker run --help

2.2 镜像命令
命令 说明
docker images 列出本地镜像 -q:仅显示镜像 ID;-a:显示所有镜像(含中间层)
docker search <镜像名> 从 Docker Hub 搜索镜像 --filter=stars=3000:过滤星标 ≥3000 的镜像
docker pull <镜像名>[:tag] 下载镜像(不指定 tag 时默认为 latest
docker rmi <镜像名或ID> 删除镜像 -f:强制删除;可同时删多个(如 docker rmi -f id1 id2
docker rmi $(docker images -qa) 删除所有本地镜像
docker build -t <镜像名> . 通过 Dockerfile 构建镜像
docker save -o <文件名>.tar <镜像名> 将镜像保存为 tar 文件(如 docker save -o nginx.tar nginx:latest
docker load -i <文件名>.tar 从 tar 文件加载镜像

2.3 容器命令

基础操作

命令 说明
docker run [参数] <镜像名> 创建并启动容器 常用参数: --name:指定容器名称 -d:后台运行 -it:交互模式(如 docker run -it --name=mycentos centos /bin/bash-p:端口映射(主机端口:容器端口,如 -p 8080:80-v:目录挂载(主机目录:容器目录) -e:设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123456
docker start <容器名或ID> 启动已停止的容器
docker restart <容器名或ID> 重启容器
docker stop <容器名或ID> 停止容器(优雅退出)
docker kill <容器名或ID> 强制停止容器
docker rm <容器名或ID> 删除已停止的容器 -f:强制删除运行中的容器 docker rm -f $(docker ps -aq):删除所有容器
docker ps 查看运行中的容器 -a:显示所有容器;-q:仅显示容器 ID

命令别名

进入/查看容器

命令 说明
docker exec -it <容器名> /bin/bash ctrl+p+q 推荐:进入运行中的容器(退出后容器不停止)
docker attach <容器名> 进入容器(退出会导致容器停止)
docker logs <容器名> 查看容器日志 -f:实时跟踪;--tail=100:显示最后100行
docker inspect <容器名> 查看容器详细信息(IP、配置等)
docker top <容器名> 查看容器内运行的进程
docker cp <容器名>:<容器路径> <主机路径> 从容器复制文件到主机(如 docker cp mynginx:/etc/nginx/nginx.conf ./

状态监控

命令 说明
docker stats 实时监控容器资源占用(CPU/内存/网络)
docker update --memory=512m <容器名> 动态调整容器内存限制

常用操作流程图

启动容器 docker run 后台运行 -d 交互模式 -it 端口映射 -p 目录挂载 -v 查看日志 docker logs 进入容器 docker exec 访问服务 http://host:port 主机与容器数据同步

3.镜像
  • UnionFS(联合文件系统)分层(共享资源,方便复制迁移,复用)
  • Docker镜像加载原理:bootfs(boot file system)主要包含bootloader(boot加载器)kernel(内核), bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs
  • 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作"容器层","容器层"之下的都叫"镜像层"。
    所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
docker commit 命令
bash 复制代码
docker commit [选项] <容器ID或名称> [仓库名[:标签]]

常用选项:

  • -m--message: 提交的描述信息
  • -a--author: 作者信息
  • --pause-p: 在提交过程中暂停容器(默认为true)

eg.

初始情况

  1. 首先运行一个基础的Ubuntu容器:
bash 复制代码
docker run -it ubuntu /bin/bash
  1. 进入容器后发现没有vim编辑器:
bash 复制代码
vim
# 会提示命令未找到

修改容器

  1. 更新apt包管理器:
bash 复制代码
apt-get update
  1. 安装vim:
bash 复制代码
apt-get -y install vim

提交修改

  1. 在另一个终端中查看容器ID:
bash 复制代码
docker ps
  1. 提交修改创建新镜像(假设容器ID为88270a4917e7):
bash 复制代码
docker commit -m="Added vim support" -a="YourName" 88270a4917e7 my-ubuntu:v1

使用新镜像

  1. 运行新创建的镜像:
bash 复制代码
docker run -it 79f3ce78e883 /bin/bash
  1. 现在新容器中已经包含了vim编辑器。
4.容器数据卷

4.容器数据卷

双向映射,改宿主机,容器跟着变

● 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,

目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

● 运行一个带有容器卷存储功能的容器实例docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

○ 当目录不存在时,Docker会自动创建

○ --privileged=true 赋予容器足够的权限

● 在执行docker run命令时,使用-v数据卷:容器内目录可以完成数据卷挂载

● 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

  • 将运用与运行的环境打包镜像,run后形成容器实例运行 ,为了能保存数据在docker中我们使用卷。

  • 容器与宿主机文件同步

    1. 在容器中操作 /tmp/docker_data 目录下的文件
    2. 在宿主机上查看 /tmp/host_data 目录会看到相同的变化
    3. 反之亦然,在宿主机上的修改也会同步到容器中
复制代码
  docker inspect 容器ID

可以查看容器的详细信息,包括数据卷挂载的详情

4.1容器卷读写规则
复制代码
docker run -it --privileged=true -v /宿主机路径:/容器内目录 镜像名
  • 默认是读写模式(rw)

两种规则:

  • rw: 可读可写(默认)

  • ro: 只读

    docker run -it --privileged=true -v /tmp/myubuntu1:/tmp/u1:ro --name=u1 ubuntu

  • 容器内 /tmp/u1 目录将变为只读

4.2容器卷继承

操作步骤:

  1. 启动第一个容器(u1)并创建文件 a.txt

    bash

    复制代码
    docker run -it -v /宿主机路径:/容器路径 --name=u1 ubuntu
  2. 启动第二个容器(u2)继承 u1 的数据卷

    bash

    复制代码
    docker run -it --volumes-from u1 --name=u2 ubuntu
    • u2 容器中也能看到 a.txt 文件

特点:

  • 多个容器可以共享同一个数据卷
  • 即使容器停止,数据仍然持久化
  • 新创建的容器通过继承可以访问相同的数据
4.3本地目录挂载

查看容器详情Mounts:docker inspect

自动生成匿名卷docker inspect Mysql

5.安装软件

步骤:

  1. 搜索镜像
  2. 拉取镜像
  3. 查看镜像
  4. 启动镜像------------端口映射
  5. 停止容器
  6. 移除容器
6.DockerFile
  • Dockerfile是用来构建镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
  • 构建三步骤:
    1. 编写Dockerfile文件
    2. docker build命令构建镜像
    3. docker run依镜像运行容器实例
Dockerfile 指令
  1. FROM

设置基础镜像

必须是Dockerfile第一条有效指令

语法:

dockerfile 复制代码
FROM [--platform=<平台>] <镜像>[:<标签>] [AS <名称>]
  1. LABEL

    添加元数据(键值对)

    替代已废弃的MAINTAINER指令

    dockerfile 复制代码
    LABEL version="1.0" description="示例镜像"
  2. RUN

执行命令并提交结果

两种形式:

dockerfile 复制代码
RUN <command>                # shell形式
RUN ["可执行文件", "参数1", "参数2"]  # exec形式
  1. CMD

指定容器启动时的默认命令

三种形式:

dockerfile 复制代码
CMD ["executable","param1","param2"]  # exec形式(推荐)
CMD ["param1","param2"]               # 作为ENTRYPOINT默认参数
CMD command param1 param2             # shell形式
  1. EXPOSE

声明容器运行时监听的端口

语法:

dockerfile 复制代码
EXPOSE <端口> [<端口>/<协议>...]
  1. ENV

设置环境变量

语法:

dockerfile 复制代码
ENV <键>=<值> ...
  1. ADD

复制文件/目录/URL到镜像

支持自动解压tar文件

语法:

dockerfile 复制代码
ADD [--chown=<用户>:<组>] <源路径>... <目标路径>
  1. COPY

复制文件/目录到镜像

比ADD更简单直接

语法:

dockerfile 复制代码
COPY [--chown=<用户>:<组>] <源路径>... <目标路径>
  1. ENTRYPOINT

配置容器启动时运行的命令

不会被docker run参数覆盖

两种形式:

dockerfile 复制代码
ENTRYPOINT ["executable", "param1", "param2"]  # exec形式
ENTRYPOINT command param1 param2               # shell形式
  1. VOLUME

    创建挂载点

    用于数据持久化

    语法:

    dockerfile 复制代码
    VOLUME ["/data"]
  2. USER

    指定运行用户

    语法:

    dockerfile 复制代码
    USER <用户名>[:<用户组>]
  3. WORKDIR

    设置工作目录

    语法:

    dockerfile 复制代码
    WORKDIR /path/to/workdir
7.Docker Network

Docker 提供了多种网络模式来管理容器间的通信:docker network ls

  • bridge:默认网络模式,为每个容器创建独立的网络命名空间
  • host:容器直接使用宿主机的网络
  • none:禁用所有网络
  • overlay:用于跨多个 Docker 主机的网络通信
  • macvlan:为容器分配 MAC 地址,使其在物理网络中显示为物理设备
常用命令
docker network create

创建一个新的 Docker 网络

bash 复制代码
docker network create [OPTIONS] NETWORK_NAME

常用选项:

  • --driver-d:指定网络驱动(bridge, overlay等)

  • --subnet:指定子网(如 172.18.0.0/16)

  • --gateway:指定网关

bash 复制代码
docker network create --driver bridge my-bridge-network
docker network ls

列出所有 Docker 网络

bash 复制代码
c
docker network rm

删除一个或多个网络

bash 复制代码
docker network rm NETWORK_NAME [NETWORK_NAME...]
docker network prune

删除所有未使用的网络

bash 复制代码
docker network prune
docker network connect

将容器连接到网络

bash 复制代码
docker network connect [OPTIONS] NETWORK CONTAINER

示例:

bash 复制代码
docker network connect my-bridge-network my-container
docker network disconnect

断开容器与网络的连接

bash 复制代码
docker network disconnect [OPTIONS] NETWORK CONTAINER
docker network inspect

显示网络的详细信息

bash 复制代码
docker network inspect [OPTIONS] NETWORK [NETWORK...]
8.Docker Compose
  • Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用程序的服务,然后使用单个命令创建并启动所有服务。
  • 创建 docker-compose.yml 文件:定义服务、网络和卷
常用命令
  1. 启动服务:

    bash 复制代码
    docker-compose up
  2. 后台启动服务

    bash 复制代码
    docker-compose up -d
  3. 停止服务

    bash 复制代码
    docker-compose down
  4. 查看运行中的服务

    bash 复制代码
    docker-compose ps
  5. 查看服务日志

    bash 复制代码
    docker-compose logs
  6. 构建服务

    bash 复制代码
    docker-compose build
  7. 启动服务

    bash 复制代码
    docker-compose start
  8. 停止服务

    bash 复制代码
    docker-compose stop
  9. 重启服务

    bash 复制代码
    docker-compose restart
  10. 扩展服务实例

    bash 复制代码
    docker-compose up --scale web=3
  11. 查看服务日志

    bash 复制代码
    docker-compose logs -f web
  12. 执行命令

    bash 复制代码
    docker-compose exec web bash
相关推荐
帅帅梓1 小时前
NE综合实验2:RIP 与 OSPF 动态路由精细配置及ACL访问控制列表 电脑
笔记·网络协议·计算机网络·网络安全·信息与通信
致***锌1 小时前
上证50etf期权交易限制的是什么?
笔记
饕餮争锋2 小时前
设计模式笔记_结构型_桥接模式
笔记·设计模式·桥接模式
笑衬人心。4 小时前
访问网页的全过程笔记
笔记·计算机网络·url
边译4 小时前
内核剖析- PID Namespace 生命周期
容器
学通4 小时前
MySQL元数据库Docker Compose部署Apache DolphinScheduler 3.1.9集群实战
docker
吉吉614 小时前
docker的搭建
spring cloud·docker·容器
江湖有缘5 小时前
Docker实战:使用Docker部署IT工具箱Team·IDE
ide·docker·容器
David爱编程5 小时前
Kubernetes 中的 Ingress 详解:HTTP 负载均衡、TLS 与路径转发实践
云原生·容器·kubernetes