Docker入门笔记

本文整理Docker基础知识、常用命令、Dockerfile编写及Docker Compose使用,适合Docker初学者快速上手。


一、Docker基础概念

什么是Docker?

Docker是一个开源的容器化平台,可以将应用程序及其依赖打包到一个轻量级、可移植的容器中,实现"一次构建,到处运行"。

核心概念:

  • 镜像(Image):只读模板,包含创建容器所需的所有内容
  • 容器(Container):镜像的运行实例
  • 仓库(Repository):存储镜像的地方

二、Docker安装

2.1 Ubuntu安装

sudo apt-get install docker.io

2.2 CentOS安装

# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 查看可安装版本
yum list docker-ce --showduplicates | sort -r

# 安装指定版本
yum install docker-ce-23.0.2-1.el7 docker-ce-cli-23.0.2-1.el7 containerd.io

# 安装最新版本
yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
systemctl start docker

# 设置开机启动
systemctl enable docker

2.3 卸载

# Ubuntu
sudo apt remove --purge docker.io

2.4 镜像加速

国内镜像源:docker.1ms.run/

# 使用加速拉取镜像
docker pull docker.1ms.run/nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04

三、Docker常用命令

3.1 查看容器

docker ps        # 查看正在运行的容器
docker ps -a     # 查看所有容器(包括已停止的)

3.2 运行容器

基本语法:

docker run [选项] 镜像名:Tag [命令]

常用选项:

选项 说明
-i 交互式操作
-t 分配伪终端
-d 后台运行(守护式运行)
--name 容器名称
--env 设置环境变量
-v 挂载目录
-p 端口映射
--net=host 使用主机网络
-m 内存限制
--gpus GPU支持

示例:

# 基本运行
docker run -it -d --name mycontainer ubuntu:20.04 /bin/bash

# 添加环境变量
docker run -it -d \
  --env=ENV_VAR1=value1 \
  --env=ENV_VAR2=value2 \
  --name mycontainer \
  ubuntu:20.04 /bin/bash

# 挂载目录和端口映射
docker run -it -d \
  --name stream_decoder \
  --env=SDS_OMSTREAM_NUM=2 \
  --net=host \
  -v /opt/service:/opt/service \
  -v /mnt/data:/mnt/data \
  --gpus all \
  frame_decoder:v0.3

# 内存限制
docker run -it -d -m 2GB --name mycontainer ubuntu:20.04

3.3 容器管理

# 启动容器
docker start 容器名或ID

# 停止容器
docker stop 容器名或ID

# 重启容器
docker restart 容器名或ID

# 删除容器
docker rm 容器名或ID

# 进入运行中的容器
docker exec -it 容器名或ID /bin/bash

# 查看容器日志
docker logs 容器名或ID

# 查看容器详情
docker inspect 容器名或ID

3.4 镜像管理

# 查看镜像
docker images

# 拉取镜像
docker pull ubuntu:20.04

# 删除镜像
docker rmi 镜像名:Tag

# 构建镜像
docker build -t 镜像名:Tag .

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

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

四、Dockerfile编写

4.1 常用指令

指令 说明
FROM 指定基础镜像
RUN 执行命令
COPY 复制文件
ADD 添加文件(支持URL和解压)
WORKDIR 设置工作目录
ENV 设置环境变量
EXPOSE 暴露端口
CMD 容器启动命令
ENTRYPOINT 入口点

4.2 COPY命令详解

# 复制文件到指定目录
COPY test.txt /opt/src/

# 复制目录
COPY src /opt/src/

注意事项:

  • 源路径必须在上下文内
  • 目录复制时,复制的是目录内容,不是目录本身
  • 尾部斜杠很重要:/app 视为文件,/app/ 视为目录

4.3 添加执行权限

RUN chmod +x /app/start.sh

4.4 示例Dockerfile

FROM ubuntu:20.04

# 设置工作目录
WORKDIR /app

# 安装依赖
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# 复制文件
COPY . /app/

# 安装Python包
RUN pip3 install -r requirements.txt

# 添加执行权限
RUN chmod +x /app/start.sh

# 暴露端口
EXPOSE 8080

# 启动命令
CMD ["python3", "app.py"]

4.5 精简Docker镜像

  • 压缩RUN语句
  • 使用多阶段构建
  • 清理缓存和临时文件

五、Docker Compose

Docker Compose用于定义和运行多容器应用。

5.1 安装

从GitHub下载二进制文件,复制到 /usr/local/bin/docker-compose

5.2 示例配置

docker-compose.yml

version: "3.2"
services:
  audio-server:
    image: registry.example.com/audio_server:v1.4
    restart: always
    container_name: audio-server
    environment:
      AUDIO_MQ_HOST: rabbitmq
      AUDIO_MQ_PORT: 5672
      AUDIO_MQ_TOPIC: amq.topic
      AUDIO_MQ_USER: admin
      AUDIO_MQ_PASSWD: admin
    networks:
      - local_default

networks:
  local_default:
    external: true

5.3 注意事项

  • 文件名必须为 docker-compose.yml
  • 使用2个空格作为缩进
  • 缩进格式必须严格正确

5.4 常用命令

# 启动
docker-compose up -d

# 停止
docker-compose down

# 查看日志
docker-compose logs

# 重启
docker-compose restart

六、常见问题与技巧

6.1 启动时执行脚本

docker run 命令最后添加:

docker run -it -d --name mycontainer ubuntu:20.04 bash /opt/run.sh

6.2 环境变量问题

写入 .bashrc 的环境变量在启动脚本中可能不生效,需要在脚本中直接设置或使用 ENV 指令。

6.3 GPU支持

docker run --gpus all nvidia/cuda:11.6.1-base nvidia-smi

6.4 网络模式

  • --net=host:使用主机网络,容器直接使用主机端口
  • -p 主机端口:容器端口:端口映射

6.5 数据持久化

使用 -v 挂载目录实现数据持久化:

-v /host/path:/container/path

七、参考资源

更多推荐