Docker 操作

发布时间:2024年01月18日

Docker 常规操作指南

1. 安装Docker

Windows环境下的安装流程(简要)

  • 通过官网下载:访问Docker官方网站下载适用于Windows系统的Docker Desktop安装包。
  • 安装过程
    • 运行下载的安装程序,按照向导进行安装配置。
    • 安装完成后启动Docker Desktop应用。

Linux环境下的安装流程(以CentOS 7为例)

  • 更新系统并安装必要工具
    sudo yum update -y
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 添加Docker CE仓库
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  • 安装Docker CE
    sudo yum makecache fast
    sudo yum install docker-ce docker-ce-cli containerd.io
    
  • 启动和设置开机启动Docker服务
    sudo systemctl start docker
    sudo systemctl enable docker
    

2. 基本操作命令

(1)列出已下载镜像

docker image ls # 或者 docker images

(2)拉取镜像

docker pull <image_name>:<tag>

(3)创建容器

docker run [options] <image_name>:<tag>

例如创建一个名为my_mysql且基于mysql镜像运行的容器,并暴露3306端口:

docker run --name my_mysql -p 3306:3306 -d mysql

(4)启动与停止容器

docker start <container_id_or_name>
docker stop <container_id_or_name>

(5)查看容器运行日志

docker logs <container_id_or_name>

(6)进入容器内部

docker exec -it <container_id_or_name> /bin/bash

(7)删除容器或镜像

docker rm <container_id_or_name>
docker rmi <image_id_or_name>

(8)从Dockerfile生成镜像

# 在包含Dockerfile的目录下执行
docker build -t <image_name>:<tag> .

3. 高级操作及注意事项

  • 在Docker Desktop图形界面中也可以直接执行许多常规操作,如打开命令窗口等。
  • 确保在运行容器前配置好相关的环境变量、数据卷挂载以及网络模式等参数。

4. 数据卷管理

(1)创建数据卷

docker volume create <volume_name>

(2)查看所有数据卷

docker volume ls

(3)挂载数据卷到容器

docker run -v <volume_name>:/path/in/container <image_name>:<tag>

这里将名为<volume_name>的数据卷挂载到容器内的 /path/in/container 路径。

(4)删除数据卷

docker volume rm <volume_name>

5. 网络管理

(1)列出所有网络

docker network ls

(2)创建新的网络(例如,创建一个桥接网络)

docker network create --driver bridge my_network

(3)在启动容器时连接到网络

docker run --network=my_network <image_name>:<tag>

(4)从容器中移除网络连接

  • 需要先停止容器,然后重新启动并指定新的网络。

(5)删除网络

docker network rm my_network

6. Docker Compose 使用

(1)安装 Docker Compose

# 对于Linux用户(如Ubuntu)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 对于Windows和Mac用户,直接下载Docker Desktop会自带Compose

(2)编写 Docker Compose YAML 文件

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:latest
    volumes:
      - my_postgres_data:/var/lib/postgresql/data
volumes:
  my_postgres_data:

(3)使用 Docker Compose 启动项目

docker-compose up -d

通过以上操作,可以对Docker进行基础到高级的管理和配置,包括镜像、容器、数据卷和网络的创建、启动、停止、删除等常规操作,以及使用Docker Compose来部署多容器应用。实际运用时,请根据具体需求调整相关参数与命令。

7. Docker镜像构建优化

(1)使用多阶段构建(Multi-Stage Builds)

在Dockerfile中,可以利用FROM指令多次指定基础镜像,实现多阶段构建。这样可以将编译环境和运行环境分离,减少最终镜像的大小。

# 第一阶段:构建环境
FROM node:14 AS build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 第二阶段:生产环境
FROM nginx:alpine
COPY --from=build-stage /app/dist /usr/share/nginx/html

(2)缓存层复用

Docker在构建镜像时会缓存每一层的结果以加速后续构建。因此,在编写Dockerfile时应尽量将改变频率较低的操作放在前面,如安装依赖等,而将经常变动的步骤(如COPY源代码)放在后面。

# 利用缓存
FROM python:3.8-slim AS base
RUN pip install --no-cache-dir -r requirements.txt

# 变动频繁的内容放在后面
COPY . /app
WORKDIR /app
CMD ["python", "app.py"]

(3)清理无用文件

在构建过程中,通过执行RUN命令清理临时文件、无用包或者不必要的日志文件,以减小最终镜像的体积。

# 清理无用文件
RUN apt-get update && \
    apt-get install -y --no-install-recommends <package> && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get purge -y --auto-remove <package>

8. Docker容器管理进阶

(1)查看容器资源占用情况

docker stats [container_name_or_id]

(2)限制容器资源使用

# 在Dockerfile中设置资源限制
RUN echo "fs.inotify.max_user_watches=524288" | tee -a /etc/sysctl.conf && sysctl -p

# 启动容器时指定资源限制
docker run -it --cpus=".5" --memory="200m" --name my_container <image_name>:<tag>

(3)备份与恢复容器数据

  • 备份数据卷:
docker run --rm --volumes-from <container_name> -v $(pwd):/backup busybox tar cvf /backup/backup.tar /path/to/data
  • 恢复数据卷:
docker run --rm --volumes-from <new_container_name> -v $(pwd):/backup busybox tar xvf /backup/backup.tar

以上内容涵盖了Docker的一些高级操作,包括如何进行镜像构建优化、容器资源管理以及数据备份与恢复等实践技巧

文章来源:https://blog.csdn.net/HolyLordHanChaun/article/details/135676563
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。