Docker

本文最后更新于 2026年3月23日 上午

记录有关docker的学习和使用

服务器连接


云服务商控制台安全组已放行端口:22(SSH)、80、8080、3306或者自定义端口

### 基础环境配置

  1. 关闭防火墙 ufw disable
  2. 替换为清华apt源,目的解决安装慢 超时问题
  3. 更新apt缓存 apt update -y
  4. 确认必备工具 vim curl wget是否安装,用dpkg -s 软件名检测

权限优化


root用户不用做
普通用户:

1
2
3
4
# 将当前用户加入docker用户组
sudo usermod -aG docker $USER
# 刷新用户组(生效需要断开SSH重连服务器)
newgrp docker

Docker环境搭建 + 基础学习

Docker+Docker Compose安装


安装官方稳定版本,避开snap版本的权限坑

1
2
3
4
5
6
7
8
9
# 1. 安装DockerDocker Compose
apt install -y docker.io docker-compose
# 2. 设置Docker开机自启,并立即启动服务
systemctl enable --now docker
# 3. 验证安装是否成功(有版本号输出即为成功)
docker --version
docker-compose --version
# 4. 测试Docker核心功能(出现Hello from Docker!提示,即为环境完全正常)
sudo docker run hello-world
  • 验证标准:4 条 version 命令都有版本号输出,hello-world 容器运行成功无报错。

核心概念


  1. 镜像(Image):只读的程序模板,包含代码、运行环境、依赖、配置,相当于 Windows 里的「绿色软件安装包」
  2. 容器(Container):镜像运行起来的实例,一个镜像可以启动多个互不干扰的容器,相当于「安装包打开后运行的软件」
  3. 仓库(Registry):镜像的存储分发平台,比如官方 Docker Hub,相当于「镜像的网盘」
  4. Docker 引擎:Docker 的核心后台服务,负责容器的创建、启停、销毁等全生命周期管理

常用命令


1
sudo docker run -d --name test-nginx -p 80:80 nginx:alpine
命令核心作用Ubuntu24 执行示例
docker ps / docker ps -a查看运行中 / 所有容器(包括已停止的)sudo docker ps 查看 test-nginx 是否为 Up 状态
docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名后台启动容器 + 端口映射(核心启动命令)上面的 test-nginx 启动命令,-d = 后台运行,–name = 容器命名,-p = 端口映射
docker stop/start/rm 容器名/容器ID停止 / 启动 / 删除容器sudo docker stop test-nginx 停止容器;sudo docker rm test-nginx 删除容器(必须先停止才能删除)
docker images / docker rmi 镜像名/镜像ID查看 / 删除本地镜像sudo docker images 查看本地的 nginx、hello-world 镜像
docker logs -f 容器名实时查看容器日志(排错必备)sudo docker logs -f test-nginx 查看 nginx 访问日志,Ctrl+C 退出
docker exec -it 容器名 /bin/sh进入容器内部调试sudo docker exec -it test-nginx /bin/sh 进入 nginx 容器,exit 退出

镜像构建Dockerfile

核心指令


指令核心作用Ubuntu24 实操规范
FROM指定基础镜像,必须是 Dockerfile 的第一行优先用 alpine 精简版镜像,比如nginx:alpine,体积小、拉取快,避免超时
WORKDIR设置容器内的工作目录,相当于 cd 命令避免写绝对路径,后续所有指令都基于这个目录执行
COPY把 Ubuntu 宿主机的文件 / 目录,复制到容器内核心用来拷贝代码、配置文件到镜像里
RUN镜像构建时执行的命令用来安装依赖、初始化环境
EXPOSE声明容器要暴露的端口仅做规范声明,不实现端口映射,真正的端口映射靠 run 命令的 - p 参数
CMD容器启动时执行的命令一个 Dockerfile 只能有一个 CMD,是容器的入口程序,容器必须有前台进程,否则会自动退出

自定义镜像


依次执行命令
1
2
3
4
5
6
# 1. 新建专属工作目录,进入目录(避免文件混乱)
mkdir -p /opt/docker-demo && cd /opt/docker-demo
# 2. 新建自定义的网页文件
echo '<h1>Ubuntu24 Docker自定义镜像测试成功!</h1>' > index.html
# 3. 新建Dockerfile文件(必须大写D,无后缀)
vim Dockerfile
Dockerfile 内容
1
2
3
4
5
6
7
8
9
10
# 基础镜像:nginx精简版
FROM nginx:alpine
# 设置容器内工作目录
WORKDIR /usr/share/nginx/html
# 把宿主机当前目录的index.html,复制到容器内的工作目录
COPY ./index.html .
# 声明容器暴露80端口
EXPOSE 80
# 容器启动时执行的命令,前台运行nginx
CMD ["nginx", "-g", "daemon off;"]
构建镜像并启动
1
2
3
4
5
6
7
# 1. 构建镜像,命名为my-nginx,版本v1
# 注意:结尾的 . 代表当前目录(Dockerfile所在路径),绝对不能省略!
sudo docker build -t my-nginx:v1 .
# 2. 查看构建好的镜像,能看到my-nginx:v1即为构建成功
sudo docker images
# 3. 用自定义镜像启动容器,映射8080端口
sudo docker run -d --name my-nginx-v1 -p 8080:80 my-nginx:v1
验证复盘
  • 打开浏览器,输入云服务器公网 IP:8080,能看到你写的自定义页面,即为镜像构建 + 运行成功
  • 复盘构建流程:Dockerfile→docker build→镜像→docker run→容器,吃透整个链路
  • 排查常见错误:Dockerfile 文件名错误、缩进错误、构建命令漏了结尾的.、端口未在安全组放行

独立编写 Dockerfile,完成自定义镜像构建,通过公网 IP 访问到自定义内容。


Docker
http://yething.github.io/posts/4126800539.html
作者
Odyssey
发布于
2026年3月23日
许可协议