Docker入门笔记
·
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
七、参考资源
更多推荐
所有评论(0)