工具学习-docker

docker工具

Posted by 潇湘潞 on April 24, 2026

前言

Docker:Docker容器不是模拟一个完整的操作系统,而是对进程进行隔离,它所接触的资源都是虚拟的。

  • 镜像是静态模板,类似于类
  • 容器是镜像的运行实例化对象,并且与其他容器和主机相互隔离,容器都共享主机资源。

Docker Compose: 用于定义和运行多容器应用程序的工具,通过单个 YAML 文件管理所有服务,通过yaml文件【程序】管理多个容器。

Docker

#image
docker images	 #查看 = docker image ls
docker pull 镜像	#拉取 = docker image pull 镜像
docker rmi 镜像id	#删除 = docker image rmi 镜像id
docker run [OPTIONS] IMAGE:Tag [COMMAND] [ARG...]
#docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:
    与交互时:
    -i:表示交互界面, interactive;
    -t:表示伪终端;tty
    -d:,detach,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 
    --name:为创建的容器命名;
    --rm: 容器退出时自动删除。非常适合运行“临时任务”。
    网络与端口映射
    -p (publish): 端口映射。宿主机端口:容器端口(如 -p 8080:80)。
    --network: 指定网络。将容器连接到特定的 Docker 网络(如 --network my-net)。
    -h (hostname): 设置容器主机名
    存储挂载(数据持久化):
    -v (volume): 挂载卷或目录。格式为 宿主机路径:容器路径
    --mount: 更明确的挂载方式。
    环境变量与配置
    -e (env): 设置环境变量
单横杠 - (Short Options) 用于 “缩写” 或 “单字母” 参数。可以合并连写。 
双横杠 -- (Long Options) 用于 “全拼” 或 “多字母单词” 参数。不能合并。
#通用:
docker run -it --name 容器名称 镜像名称:标签 /bin/bash
exit	#退出当前容器

注意:Docker 容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

# 只读。只能通过修改宿主机内容实现对容器的数据管理。
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
# 读写,默认。宿主机和容器可以双向操作数据。
docker run -it -v /宿主机目录:/容器目录:rw 镜像名

#以守护式方式创建容器
docker run -di --name 容器名称 镜像名称:标签

#登录守护式容器方式【running】
docker exec -it 容器名称|容器ID /bin/bash

# 启动容器
docker start 容器名称|容器ID
# 停止容器,会善后清理
docker stop 容器名称|容器ID
# 终止容器,会善后清理
docker kill 容器名称|容器ID

# 删除指定容器
docker rm 容器名称|容器ID
# 删除多个容器
docker rm 容器名称|容器ID 容器名称|容器ID
#删除所有容器
docker rm `dcoker -ps -q -a`	

#拷贝到容器内:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
#拷贝出容器:
docker cp 容器名称:容器目录 需要拷贝的文件或目录

Dockerfile

  1. 排除打包路径或文件

    新建一个文本文件 .dockerignore

  2. 在项目的根目录下,新建一个文本文件 Dockerfile

    FROM node:8.4	#该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
    COPY . /app		#将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
    WORKDIR /app	#指定接下来的工作路径为/app。
    RUN npm install	#在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
    EXPOSE 3000		#将容器 3000 端口暴露出来, 允许外部连接这个端口。
    CMD node demos/01.js	#进入容器默认执行,可以被覆盖
    
  3. 创建镜像文件

     docker image build -t koa-demo .
     -t:tag,镜像标签
     .:对应Dockerfile文件的目录
    

Docker Compose

docker compose:多个容器的协同维护,定义容器之间的编排。

  • Docker Compose主要用于在单个主机上管理和运行多个容器应用程序。
  • K8s更灵活,它在docker的基础上,还可以在多个主机上运行这些应用程序。
#启动,类似于,docker run
docker-compose up -d -f -p
-d “后台”运行
-f 识别 Docker Compose 配置文件
-p 定义项目名

#相反的操作,跑路
docker-compose down

Docker Compose 配置项:

#项目版本号
version: "3"
#服务
services:
#指定镜像
1. image	  #指定镜像 eg:
	image: redis:3.2
2. Dockerfile #构建镜像 eg:
    build:
        context: ./webapp
        dockerfile: webapp-dockerfile
        args:
        - JAVA_VERSION=1.6
#依赖声明
depends_on
#文件挂载 	 相对位置文件挂载,便于管理调式代码
#使用数据卷	存放大量数据【独立声明】
    volumes:
      mysql-data:
        external: true
#配置网络	 网络也是容器间互相访问的桥梁【独立声明】
networks:
  frontend:
  backend:

networks:
  frontend:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.10.1.0/24
## ......
#使用网络别名 直接使用容器名或服务名【别名】来作为连接其他服务的网络地址
#端口映射 宿主机与容器端口的映射

note,由于 YAML 格式对 xx:yy 这种格式的解析有特殊性,在设置小于 60 的值时,会被当成时间而不是字符串来处理,所以我们最好使用引号将端口映射的定义包裹起来,避免歧义

ref

  1. 阮一峰的网络日志
  2. Docker 最常用的镜像命令和容器命令