Docker, Docker Compose & Dockerfile 速查表
本文档旨在提供一个清晰、易于查阅的 Docker、Docker Compose 和 Dockerfile 常用命令与语法参考。
一、Docker 核心命令
镜像管理 (Image Management)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| docker search [image_name]
docker pull [image_name]:[tag]
docker images
docker image inspect [image_name]
docker rmi [image_id_or_name]
docker rmi $(docker images -q)
docker commit [container_id] [new_image_name]:[tag]
docker save -o [archive_name].tar [image_name]
docker load -i [archive_name].tar
docker login
docker tag [source_image] [hub_user]/[repo_name]:[tag]
docker push [hub_user]/[repo_name]:[tag]
|
容器生命周期 (Container Lifecycle)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| docker run [options] [image_name] [command]
docker ps
docker ps -a
docker start [container_id_or_name]
docker stop [container_id_or_name]
docker restart [container_id_or_name]
docker rm [container_id_or_name]
docker rm $(docker ps -aq)
|
docker run 常用选项:
-d: 后台运行容器 (detached mode)。
-p [host_port]:[container_port]: 将主机的端口映射到容器的端口。
--name [container_name]: 为容器指定一个名称。
-v [host_path]:[container_path]: 将主机的目录挂载到容器中(绑定挂载)。
-v [volume_name]:[container_path]: 将一个命名的卷挂载到容器中。
-e [KEY]=[VALUE]: 设置环境变量。
--network [network_name]: 将容器连接到一个指定的网络。
--restart always: 配置容器在退出时总是自动重启。
容器交互与监控
1 2 3 4 5 6 7 8 9 10 11
| docker exec -it [container_id_or_name] bash
docker logs [container_id_or_name]
docker stats
docker container inspect [container_id_or_name]
|
网络与数据卷管理
1 2 3 4 5 6 7 8 9 10
| docker network create [network_name] docker network ls docker network rm [network_name]
docker volume create [volume_name] docker volume ls docker volume inspect [volume_name] docker volume rm [volume_name]
|
二、Docker Compose
用于定义和运行多容器 Docker 应用程序的工具。
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| docker-compose up -d
docker-compose down
docker-compose down -v --rmi all
docker-compose start [service_name]
docker-compose stop [service_name]
docker-compose scale [service_name]=3
docker-compose -f [file_name].yml up -d
|
docker-compose.yml 示例
一个典型的 WordPress + MySQL 应用配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| version: '3.8'
services: mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress volumes: - mysql-data:/var/lib/mysql networks: - blog-net
wordpress: image: wordpress:latest container_name: wordpress restart: always ports: - "8888:80" environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wordpress volumes: - wordpress-data:/var/www/html networks: - blog-net depends_on: - mysql
networks: blog-net:
volumes: mysql-data: wordpress-data:
|
三、Dockerfile
用于自动构建 Docker 镜像的文本文件。
常用指令
FROM: 指定基础镜像。
LABEL: 为镜像添加元数据(如作者)。
WORKDIR: 设置工作目录。
COPY: 将文件或目录从构建上下文复制到镜像中。
ADD: 功能类似 COPY,但支持 URL 和自动解压。
RUN: 在镜像构建过程中执行命令。
ENV: 设置环境变量。
EXPOSE: 声明容器运行时监听的端口(仅为文档目的)。
CMD: 提供容器启动时的默认命令(可被 docker run 的命令覆盖)。
ENTRYPOINT: 配置容器启动时的主命令(不易被覆盖)。
USER: 指定运行容器时的用户名或 UID。
VOLUME: 创建一个可以从本地主机或其他容器挂载的挂载点。
ARG: 定义构建时变量。
构建镜像
1 2 3
|
docker build -t my-java-app:v1.0 .
|
Dockerfile 示例
一个简单的 Java 应用 Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| FROM openjdk:17-jdk-slim
LABEL author="Your Name"
WORKDIR /app
COPY target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
|