Docker 学习笔记

Docker 容器化技术学习笔记,包括安装配置、核心命令、应用部署、Dockerfile 和 Docker Compose 等内容。

安装配置

nano /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io"
    ],
    "runtimes": {
        "sysbox-runc": {
            "path": "/usr/bin/sysbox-runc"
        }
    },
    "bip": "172.20.0.1/16",
    "default-address-pools": [
        {
            "base": "172.25.0.0/16",
            "size": 24
        }
    ]
}
systemctl daemon-reload
systemctl restart docker
# 安装
apt install docker.io

# 换源
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
     "https://docker.m.daocloud.io",
     "https://docker.imgdb.de",
     "https://docker-0.unsee.tech",
     "https://docker.hlmirror.com",
     "https://docker.1ms.run",
     "https://func.ink",
     "https://lispy.org",
     "https://docker.xiaogenban1993.com"
    ]
}
EOF

# 重启服务
systemctl daemon-reload
systemctl restart docker

核心命令

镜像操作

docker images                    # 查看镜像
docker search 镜像名             # 搜索镜像
docker pull 镜像名:标签          # 拉取镜像
docker rmi 镜像ID                # 删除镜像
docker rmi `docker images -q`    # 删除所有镜像

容器操作

docker ps                        # 查看运行中容器
docker ps -a                     # 查看所有容器
docker run -it --name=容器名 镜像名 /bin/bash    # 交互式启动
docker run -di --name=容器名 镜像名              # 后台启动
docker exec -it 容器名 /bin/bash  # 进入容器
docker stop/start 容器名          # 停止/启动容器
docker rm 容器名                  # 删除容器
docker cp 文件 容器名:路径         # 复制文件

常用参数

  • -i: 交互式
  • -t: 终端
  • -d: 后台运行
  • -p 8080:80: 端口映射
  • -v /host:/container: 目录挂载
  • --name: 容器名称
  • -e KEY=VALUE: 环境变量

应用部署

数据库

# MySQL
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 mysql:5.7

# Redis
docker run -di --name=redis -p 6379:6379 redis

# PostgreSQL
docker run -di --name=postgres -p 5432:5432 -e POSTGRES_PASSWORD=密码 postgres:13

Web服务

# Nginx
docker run -di --name=nginx -p 80:80 -v /usr/local/nginx:/etc/nginx nginx

# Tomcat
docker run -di --name=tomcat -p 8080:8080 tomcat:9

Dockerfile

基本结构

FROM node:16-alpine          # 基础镜像
WORKDIR /app                 # 工作目录
COPY package*.json ./        # 复制文件
RUN npm install              # 安装依赖
COPY . .                     # 复制代码
EXPOSE 3000                  # 暴露端口
CMD ["node", "app.js"]       # 启动命令

常用指令

  • FROM: 基础镜像
  • WORKDIR: 工作目录
  • COPY: 复制文件
  • ADD: 复制文件(支持解压)
  • RUN: 执行命令
  • ENV: 环境变量
  • EXPOSE: 暴露端口
  • CMD: 启动命令
  • ENTRYPOINT: 入口点

构建镜像

docker build -t 镜像名:标签 .
docker build -f Dockerfile文件 -t 镜像名 .

Docker Compose

基本格式

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=密码
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

常用命令

docker-compose up -d           # 后台启动
docker-compose down             # 停止删除
docker-compose up -d --build    # 重新构建启动
docker-compose logs             # 查看日志
docker-compose exec web bash    # 进入容器
docker-compose ps               # 查看状态

备份迁移

# 容器保存为镜像
docker commit 容器名 新镜像名

# 导出镜像
docker save -o 镜像.tar 镜像名

# 导入镜像
docker load -i 镜像.tar

Docker-compose V2

最近一直打算把网站打包,用docker-compose部署,发现docker-compose更新了于是补一个ubuntu安装docker-compose v2的步骤

# 1. 下载最新稳定版 Compose V2(Linux x86_64 架构,适配绝大多数服务器)
sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

# 2. 给二进制文件添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 3. (可选)创建软链接,确保系统能全局识别命令(部分系统需要)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 4. 验证安装是否成功(显示 V2 版本即可,比如 v2.29.2)
docker-compose --version
文章评论