目录

docker常用命令

目录

一、docker常用命令

# 基本信息
docker info                                                                      # 查看当前系统Docker信息
docker version                                                                   # 查看docker版本信息

# 镜像操作
docker build -t "image_name:tag" .                                               # 用dockerfile构建镜像(指定镜像名),注意最后有个点号不要漏掉
docker build -t "image_name:tag" -f ./Dockerfile .                               # 用dockerfile构建镜像(指定镜像名、指定Dockerfile),注意最后有个点号不要漏掉
docker search nginx                                                              # 查找Docker Hub上的nginx镜像
docker push repository/name:Tag                                                  # 上传docker镜像到镜像仓库
docker pull repository/name:Tag                                                  # 拉取docker镜像(默认latest)
docker images                                                                    # 查看本地镜像(Docker镜像保存在/var/lib/docker目录下)
docker rmi repository/name:Tag                                                   # 删除镜像
docker create --name container_name  image_name:latest                           # 创建容器,但不运行
docker commit -a "author" -m "desc" container_id [REPOSITORY[:TAG]]              # 将容器提交为镜像保存
docker save -o filename.tar repository/name:Tag                                  # 保存镜像(包含完整layer)
docker load --input filename.tar                                                 # 导入镜像文件包
docker history image_name                                                        # 查看镜像创建历史信息                                              
docker tag old_image_name repository/name:Tag                                    # 给镜像打Tag

# 容器操作
docker run "image_name"                                                          # 运行镜像   --privileged
docker run --network=host image_name                                             # 使用主机网络模式
docker run --network=none image_name                                             # 使用无网络模式
docker run --network=container:other_container image_name                        # 共享其他容器网络栈
docker1 run -d --privileged --restart always --hostname myhost --dns 114.114.114.114 --dns 8.8.8.8 -p 8080:80 -v /opt/container1:/opt -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name my-container1 --network app-net --ip 192.168.1.11 os-openeuler:22.03-lts-sp3    # 参数示例  其他参数:--gpus all 来使用GPU
docker run -d -p "127.0.0.1:${public_network_port}:80" -h "container_host_name" --name="Assign a name to the container" -e MYSQL_ROOT_PASSWORD=123456 image_name    # 运行镜像(参数)
docker run -d -p 127.0.0.1:3306:3306  --name mdb -e MARIADB_ROOT_PASSWORD=Password123! --network=bridge mariadb:latest  # 拉取最新镜像并部署于3306端口
docker ps                                                                        # 查看当前运行的容器 -a查看所有容器
docker ps -a --format "table{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"           # 查看当前运行的容器 格式化输出  .Image镜像ID
docker inspect container_name/container_id                                       # 查看容器元数据等明细信息
docker top container_name/container_id                                           # 查看容器内进程信息
docker stats                                                                     # 显示容器使用的系统资源 CPU、MEM USAGE、NET I/O、BLOCK I/O
docker stats –no-stream container_name/container_id                              # 查看某个容器当时时刻使用的系统资源
docker logs --n100 -f container_name/container_id                                # 查看某个容器最后100条日志
docker start container_name/container_id                                         # 启动容器
docker attach container_name/container_id                                        # 进入容器
docker exec -it container_id /bin/bash                                           # 进入容器
docker exec -it --user root container_id /bin/bash --login                       # 进入容器(以root用户,bash的login模式登录)
docker stop container_name/container_id                                          # 停止容器
docker kill -s KILL container_name/container_id                                  # kill运行中的容器                     
docker rm container_name/container_id                                            # 删除容器
docker restart container_name/container_id                                       # 重启容器
docker rename old_container_name new_container_name                              # 重命名容器
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2                           # 将容器归档
docker import  filename.tar repository/name:Tag                                  # 导入容器归档文件,创建为repository/name:Tag镜像
docker pause container_name/container_id                                         # 暂停容器
docker unpause container_name/container_id                                       # 恢复容器
docker port container_name/container_id                                          # 查看容器端口映射情况
docker cp /tmp/test.txt container_name/container_id:/tmp                         # 主机拷贝文件到容器

# 网络操作
docker network ls                                                                # 列出所有网络
docker network create app-net                                                 # 创建自定义网络
docker network create  -driver overlay --subnet=192.168.1.0/24 --gateway=192.168.1.1 --scope=swarm --attachable app-net      # 创建自定义网络 overlay网络(Swarm模式)
docker network create --driver bridge  --subnet 192.168.1.0/24 --gateway 192.168.1.1 my-bridge                                  # 创建带特定子网的bridge网络
docker network create --attachable app-net    # 创建可被独立容器附加的Swarm网络
docker network rm app-net                                                     # 删除网络
docker network prune                                                             # 删除所有未使用的网络
docker network connect app-net container_name                                 # 将容器连接到网络
docker network connect --alias my-container --ip 192.168.1.5 app-net container_name                                 # 将容器连接到网络
docker network disconnect app-net container_name                              # 断开容器与网络的连接
docker network inspect app-net                                                # 查看网络具体信息,网关、容器分配ip、类型、创建时间
docker port container_name                                                       # 查看容器端口映射
docker exec -it container_name ip addr                                           # 查看容器内部IP地址
docker exec -it container_name ping other_container                              # 测试容器间连通性
docker swarm init --advertise-addr 172.20.x.x                                    # 初始化swarm集群,当前执行宿主机将会成为创建的单节点swarm中的manager
docker node ls                                                                   # 查看Swarm节点信息
docker swarm join-token manager                                                  # 查询Manager Token:用于节点以Manager身份加入集群(可参与集群管理)。如果忘记了token,可以在Manager 节点上执行查看
docker swarm join-token worker                                                   # 查询Worker Token:用于节点以Worker身份加入集群(仅运行容器,不参与管理)。 如果忘记了token,可以在Manager 节点上执行查看
docker swarm join --token SWMTKN-1-x 172.20.x.x:2377                             # 加入集群

# 关于overlay网络无法和同网络容器通信  ping-> DNS 127.0.0.11:53 -> iptables转发到dockerd程序监听的udp端口,由dockerd程序负责解析转发
ping 127.0.0.11
vim /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0
# 如果容器中iptables转发规则不存在,可自行添加以下规则
iptables -t nat -N DOCKER_OUTPUT
iptables -t nat -N DOCKER_POSTROUTING
iptables -t nat -A OUTPUT -d 127.0.0.11/32 -j DOCKER_OUTPUT
iptables -t nat -A POSTROUTING -d 127.0.0.11/32 -j DOCKER_POSTROUTING
iptables -t nat -A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.11:51755  
iptables -t nat -A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 51755 -j SNAT --to-source :53
iptables -t nat -A DOCKER_OUTPUT -d 127.0.0.11/32 -p tcp -m tcp --dport 53 -j DNAT --to-destination 127.0.0.11:43107 
iptables -t nat -A DOCKER_POSTROUTING -s 127.0.0.11/32 -p tcp -m tcp --sport 43107 -j SNAT --to-source :53

# 宿主机:2202 ->容器172.19.0.3:40001    ,  测试按下面添加规则可以用
iptables -t nat -A DOCKER ! -i docker_gwbridge -p tcp -m tcp --dport 2202 -j DNAT --to-destination 172.19.0.3:40001
iptables -t filter -A DOCKER -d 172.19.0.3/32 ! -i docker_gwbridge -o docker_gwbridge -p tcp -m tcp --dport 40001 -j ACCEPT

# prune命令
docker image prune                                                               # 删除 所有未被 tag 标记和未被容器使用的镜像
docker image prune -a                                                            # 删除 所有未被容器使用的镜像
docker container prune                                                           # 删除 所有停止运行的容器
docker volume prune                                                              # 删除 所有未被挂载的卷
docker network prune                                                             # 删除 所有未使用的网络
docker system prune                                                              # 删除 docker 所有资源

# 其他常用命令
docker rm $(docker ps -a -q)                                                     # 删除所有容器
docker rmi $(docker images -q)                                                   # 删除所有镜像
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`                     # 批量删除没有打标签的镜像
docker stop $(docker ps -a | grep "xxx" | awk '{print $1}')                      # 批量停止指定容器(1)
docker ps | grep "xxx"  | awk '{print $1}' | xargs docker stop                   # 批量停止指定容器(2)

--privileged=true                                                                # 权限相关
--cap-add或--device

docker volume ls                                                                 #列出卷
docker volume create                                                             #创建卷
docker volume rm                                                                 #删除卷

二、配置 Docker 镜像加速

  1. 编辑daemon.json(若没有该文件则新建)
	vim /etc/docker/daemon.json

   # 在文件中添加国内加速站点
{
  "registry-mirrors": [
      "https://registry.cn-hangzhou.aliyuncs.com",
      "https://docker.m.daocloud.io",
      "https://docker.nju.edu.cn",
      "https://docker.mirrors.sjtug.sjtu.edu.cn",
      "https://atomhub.openatom.cn",
      "https://hub.uuuadc.top",
      "https://docker.1panel.live"
  ],
  "dns": ["114.114.114.114", "8.8.8.8", "223.5.5.5"]   # 可配置默认dns,容器启动会自动应用此处配置
}
  1. 重启Docker
sudo systemctl daemon-reload && sudo systemctl restart docker
  1. 修改容器的数据目录
  • vim /etc/docker/daemon.json #修改容器的数据目录
{
    "data-root":"/opt/data"         # 容器、网络、集群等配置存储的目录.
}
  • systemctl restart docker # 重启生效

三、部分例子

  1. 用dockerfile构建名为 myimage 的镜像
#在dockfile所在文件夹执行以下命令,注意最后有个点号不要漏掉

docker build -t "myimage" .                 
  1. 运行名为 myimage 的镜像
  • 将内部80端口映射到主机的8080端口
  • 容器主机名为 myhostname
  • 容器名为 mycontainer
  • 镜像名为 myimage
docker run -d -p "0.0.0.0:8080:80" -h "myhostname" --name="mycontainer" myimage
  1. 运行一个MySQL
docker pull centos/mysql-57-centos7
docker run -p "127.0.0.1:3306:3306" --name "MySQL57" -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
docker exec -it 95c /bin/bash
  1. 配置网络
# 官方文档:docker 网络创建:https://docs.docker.com/reference/cli/docker/network/create/
# 查看当前已有网络
docker network ls
docker network ls --filter driver=bridge   #另外查看overlay网络 driver=overlay
docker network inspect network_id          #查看网络配置信息
# 创建网络1
docker network create --driver bridge --subnet 172.22.0.0/24 --gateway 172.22.0.1 --ip-range 172.22.0.0/24 dockernet1   #bridge网络 适用于单主机上的容器通信
docker network create --scope=swarm --attachable -d overlay --subnet=172.22.1.0/24 --gateway=172.22.1.1 dscg-network  #overlay网络 可多个主机之间的跨主机通信
# 给容器分配IP并连接到网络
docker network connect --ip 172.22.0.10 dockernet1 ubt
# 容器断开网络连接
docker network disconnect -f 默认桥接网卡id ubt
# 指定网络dockernet1
docker run --network dockernet1 --name nginx -d nginx         #可指定ip --ip

四、常用docker镜像运行命令

  • 默认宿主机IP(默认网桥网关):172.17.0.1
  • 抓包技巧(容器内无tcpdump、宿主机有):nsenter -t -n tcpdump -i lo -nn
  • 容器监控管理工具portainer
  • 常用镜像latest-20260618:
    • nginx:1.31.2
    • mariadb:12.3.2
    • redis:8.8.0 redis/redisinsight:latest
    • elasticsearch:9.4.2
    • minio/minio:RELEASE.2025-09-07T16-13-09Z
    • neo4j:2026.05.0-community-trixie
    • jdk: openjdk:21-jdk-slim\openjdk:17-jdk-slim\openjdk:8-jdk-slim
    • Maven: maven:3.9.9-openjdk-21
    • nacos/nacos-server:v2.4.3
    • rabbitmq:3.13-management # 带管理后台版本
    • docker.elastic.co/kibana/kibana:9.4.2 #和elasticsearch:9.4.2版本严格对齐
    • prometheus:prom/prometheus:v2.53.0
    • grafana/grafana:11.2.0
docker volume create portainer_data
docker pull portainer/portainer-ce
docker run -d --name portainer -p 127.0.0.1:9999:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data  portainer/portainer-ce:latest

-nginx

docker run -d \
  --name nginx \
  -p 80:80 \
  -p 443:443 \
  -v /data/docker/nginx/logs:/var/log/nginx \
  --restart always \
  nginx:1.31.2

自定义:  -v /data/docker/nginx/html:/usr/share/nginx/html \
自定义:  -v /data/docker/nginx/conf:/etc/nginx/conf.d \
  • mariadb
docker run -d \
  --name mariadb \
  -p 127.0.0.1:3306:3306 \
  -v /data/docker/mariadb:/var/lib/mysql \
  -e MARIADB_ROOT_PASSWORD=Root@123456 \
  -e MARIADB_DATABASE=temp \
  -e MARIADB_USER=dev \
  -e MARIADB_PASSWORD=Dev@123456 \
  --restart always \
  mariadb:12.3.2
  • redis
docker run -d \
  --name redis \
  -p 127.0.0.1:6379:6379 \
  -v /data/docker/redis:/data \
  -e REDIS_PASSWORD=Redis@123456 \
  --restart always \
  redis:8.8.0 \
  redis-server --requirepass Redis@123456

redis-cli -h localhost -p 6379 -a Redis@123456
  • redisinsight
docker run -d \
  --name redisinsight \
  -p 127.0.0.1:5540:5540 \
  -v /data/docker/redisinsight:/data \
  --user 1000:1000 \
  --restart always \
  redis/redisinsight:latest
  • minio
docker run -d \
  --name minio \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v /data/docker/minio:/data \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=Minio@123456 \
  --restart always \
  minio/minio:RELEASE.2025-09-07T16-13-09Z \
  server /data --address ":9000" --console-address ":9001" /data
  • rustfs
docker run -d \
  --name rustfs \
  --restart unless-stopped \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v $(pwd)/data:/data \
  -v $(pwd)/logs:/logs \
  -e RUSTFS_ACCESS_KEY="<your-access-key>" \
  -e RUSTFS_SECRET_KEY="<your-secret-key>" \
  -e RUSTFS_CONSOLE_ENABLE=true \
  rustfs/rustfs:latest \
  /data
  • xxl-job
docker run -d \
--name xxl-job \
--add-host=host.docker.internal:host-gateway \
-e PARAMS="--spring.datasource.url=jdbc:mysql://host.docker.internal:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=Root@123456 --xxl.job.accessToken=XxlJob@123456" \
-p 127.0.0.1:8080:8080 \
-v /data/docker/xxljob:/data/applogs \
--restart=always \
xuxueli/xxl-job-admin:3.4.2
# 初始化SQL:https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql
# 默认登录密码 admin 123456
  • neo4j:2026.05.0-community-trixie
docker run -d \
  --name neo4j \
  -p 127.0.0.1:7474:7474 \
  -p 127.0.0.1:7687:7687 \
  -v /data/docker/neo4j/data:/data \
  -v /data/docker/neo4j/logs:/logs \
  -v /data/docker/neo4j/plugins:/plugins \
  -e NEO4J_AUTH=neo4j/Neo4j@123456 \
  -e NEO4J_dbms_memory_heap_initial__size=1g \
  -e NEO4J_dbms_memory_heap_max__size=1g \
  -e NEO4J_dbms_security_procedures_unrestricted=apoc.* \
  -e NEO4J_dbms_security_procedures_allowlist=apoc.* \
  --restart always \
  neo4j:2026.05.0-community-trixie
# neo4j的apoc模块,下载对应版本放到plugins目录下:https://github.com/neo4j/apoc/releases
  • elasticsearch
# ES9 强制安全、单节点模式,必须配置密码 + 禁用集群校验
docker run -d \
  --name es \
  -p 127.0.0.1:9200:9200 \
  -p 127.0.0.1:9300:9300 \
  -v /data/docker/es:/usr/share/elasticsearch/data \
  -e discovery.type=single-node \
  -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
  -e ELASTIC_PASSWORD=Es@123456 \
  -e xpack.security.enabled=true \
  --restart always \
  elasticsearch:9.4.2
# 默认用户(http://127.0.0.1:9200/):elastic

-kibana

docker run -d `
  --name kibana `
  -p 5601:5601 `
  -v /data/docker/kibana:/usr/share/kibana/data `
  -e ELASTICSEARCH_HOSTS=http://es:9200 `
  -e ELASTICSEARCH_USERNAME=elastic `
  -e ELASTICSEARCH_PASSWORD=Es@123456 `
  --link es `
  --restart always `
  docker.elastic.co/kibana/kibana:9.4.2
  • oracle
安装后连接命令 docker exec -it docker_instance_name /bin/bash
sqlplus sys/123456@//localhost:1521/orcl as sysdba
sqlplus system/123456@//localhost:1521/orcl
sqlplus pdbadmin/123456@//localhost:1521/orclpdb1

docker run -d  --name Oracle-12c  -p 127.0.0.1:1521:1521 -p 127.0.0.1:5500:5500 ^
-e ORACLE_SID=orcl ^
-e ORACLE_PDB=orclpdb1 ^
-e ORACLE_PWD=123456 ^
-e ORACLE_CHARACTERSET=al32utf8 ^
-e ORACLE_BASE=/opt/oracle ^
-e ORACLE_HOME=/opt/oracle/product/12.2.0.1/dbhome_1 ^
-e PATH=/opt/oracle/product/12.2.0.1/dbhome_1/bin:/opt/oracle/product/12.2.0.1/dbhome_1/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ^
-v /d/docker/data/Oracle-12c/oradata:/opt/oracle/oradata ^
zhuyijun/oracle-12c:latest


docker run  -d --name oracle-19c  -p 127.0.0.1:1521:1521 -p 127.0.0.1:5500:5500 ^
-e ORACLE_SID=orcl ^
-e ORACLE_PDB=orclpdb1 ^
-e ORACLE_PWD=123456 ^
-e ORACLE_CHARACTERSET=zhs16gbk ^
-e ORACLE_BASE=/opt/oracle ^
-e ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 ^
-e PATH=/opt/oracle/product/19c/dbhome_1/bin:/opt/oracle/product/19c/dbhome_1/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ^
-v /d/docker/data/oradata:/opt/oracle/oradata ^
zhuyijun/oracle-12c:19c

docker exec -it 67 /bin/bash
  • zookeeper(debezium)
docker run -it -d --name zookeeper -p 127.0.0.1:2181:2181 -p 127.0.0.1:2888:2888 -p 127.0.0.1:3888:3888 quay.io/debezium/zookeeper:2.4
  • kafka(debezium)
docker run -it -d --name kafka -p 127.0.0.1:9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.4
  • Kafka Connect(debezium)
docker run -it -d --name connect -p 127.0.0.1:8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets -e STATUS_STORAGE_TOPIC=my_connect_statuses --link kafka:kafka  quay.io/debezium/connect:2.4
  • kafka-cluster
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
docker pull provectuslabs/kafka-ui:latest
docker-compose -f kafka-cluster.yml up -d

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  kafka1:
    image: wurstmeister/kafka:latest
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 172.20.72.16:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.72.16:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka2:
    image: wurstmeister/kafka:latest
    ports:
      - "9093:9093"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: 172.20.72.16:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.72.16:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka3:
    image: wurstmeister/kafka:latest
    ports:
      - "9094:9094"
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: 172.20.72.16:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.72.16:9094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    ports:
      - "18080:8080"
    environment:
      KAFKA_CLUSTERS_0_NAME: "local"
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "172.20.72.16:9092,172.20.72.16:9093,172.20.72.16:9094"
      KAFKA_CLUSTERS_0_ZOOKEEPER: "172.20.72.16:2181"
    depends_on:
      - kafka1
      - kafka2
      - kafka3
      - zookeeper
  • 达梦
docker pull wangbangming/dm:7.6
docker run -d --name dm7 -p 5236:5236 wangbangming/dm:7.6            #运行容器
docker exec -it dm7_bash  /bin/bash
cd /home/dmdba/dmdbms/dm7/bin
nohup ./dmserver path=/home/dmdba/DAMENG/dm.ini &                    #运行数据库
./disql                                                              #SQL执行器
SQL>CREATE USER username IDENTIFIED BY password_123 LIMIT CONNECT_TIME 6;  #创建用户
  • weaviate
# 注意存储卷路径及环境变量文件
docker run -d \
  --name weaviate \
  --restart always \
  --env-file ./middleware.env \
  -v ${WEAVIATE_HOST_VOLUME:-./volumes/weaviate}:/var/lib/weaviate \
  -e PERSISTENCE_DATA_PATH=${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} \
  -e QUERY_DEFAULTS_LIMIT=${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} \
  -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-false} \
  -e DEFAULT_VECTORIZER_MODULE=${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} \
  -e CLUSTER_HOSTNAME=${WEAVIATE_CLUSTER_HOSTNAME:-node1} \
  -e AUTHENTICATION_APIKEY_ENABLED=${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} \
  -e AUTHENTICATION_APIKEY_ALLOWED_KEYS=${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} \
  -e AUTHENTICATION_APIKEY_USERS=${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} \
  -e AUTHORIZATION_ADMINLIST_ENABLED=${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} \
  -e AUTHORIZATION_ADMINLIST_USERS=${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} \
  -p ${EXPOSE_WEAVIATE_PORT:-8080}:8080 \
  semitechnologies/weaviate:1.19.0
  • code-server:网页版Vscode
docker run -d \
  --name=code-server \
  -e TZ=Etc/CST \
  -e PASSWORD=Code@123456`
  -p 8443:8443 \
  -v /mnt/code-server/config:/config \
  -v /opt/code-server/opt:/opt \
  --restart unless-stopped \
  lscr.io/linuxserver/code-server:latest
  • nacos
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -v /data/docker/nacos:/home/nacos/data \
  -e MODE=standalone \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e MYSQL_SERVICE_HOST=mariadb \
  -e MYSQL_SERVICE_PORT=3306 \
  -e MYSQL_SERVICE_DB_NAME=nacos_config \
  -e MYSQL_SERVICE_USER=root \
  -e MYSQL_SERVICE_PASSWORD=Root@123456 \
  -e NACOS_AUTH_ENABLE=true \
  -e NACOS_AUTH_TOKEN=SecretKey01234567890123456789012345678901234567890123456789012345678901234 \
  --link mariadb \
  --restart always \
  nacos/nacos-server:v2.4.3
  • rabbitmq
docker run -d \
  --name rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  -v /data/docker/rabbitmq:/var/lib/rabbitmq \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=Mq@123456 \
  --restart always \
  rabbitmq:3.13-management
  • prometheus
docker run -d \
  --name prometheus \
  -p 9090:9090 \
  -v /data/docker/prometheus:/prometheus \
  -v /data/docker/prometheus-conf:/etc/prometheus \
  --restart always \
  prom/prometheus:v2.53.0
  • grafana
docker run -d \
  --name grafana \
  -p 3000:3000 \
  -v /data/docker/grafana:/var/lib/grafana \
  -e GF_SECURITY_ADMIN_PASSWORD=Grafana@123456 \
  --restart always \
  grafana/grafana:11.2.0

五、docker-compose常用命令

docker-compose config                                        # 验证yml文件有效性
docker-compose build                                         # 启动构建
docker-compose up -d                                         # 后台启动
docker-compose down                                          # 停止并删除容器
docker-compose restart                                       # 重启容器
docker-compose -f /opt/docker-kafka-cluster/kafka-cluster.yml images            # 查看由build命令构建的所有镜像
docker-compose -f /opt/docker-kafka-cluster/kafka-cluster.yml ps                # 查看由up命令启动的所有容器
docker-compose -f /opt/docker-kafka-cluster/kafka-cluster.yml exec -it kafka1 /bin/bash  # 进入容器 kafka1为yml中定义的服务名
docker-compose -f /opt/docker-kafka-cluster/kafka-cluster.yml logs kafka2                # 查看日志
docker-compose start <service>                               #启动yml中定义的单个服务,使用服务名,不是容器名
docker-compose stop <service>                                #停止yml中定义的单个服务
docker-compose rm <service>                                  #停止已停止的某个服务

# 修改docker-compose.yml文件后,如修改extra_hosts 需要重建服务容器
docker compose up -d --force-recreate plugin_daemon
# 重建完成,检查配置是否生效,查看是否有添加的内容
docker exec -it docker-plugin_daemon-1 cat /etc/hosts

#未开启端口映射,只允许同网络容器访问时的排查手段,除了直接进入容器。
# 临时启动一个mariadb客户端容器,加入app_net网络连接问题容器排查,--rm退出之后自动销毁临时容器
docker exec -it mariadb bash
docker run --rm -it --network app_net mariadb:12.3.2 mariadb -h mariadb -uroot -p
docker run --rm -it --network app_net redis:8.8.0 redis-cli -h redis -a Redis@123456

六、Docker harbor

echo '172.20.68.62 registry.harbor.com' >> /etc/hosts

vim /etc/docker/daemon.json
{
  "insecure-registries": ["registry.harbor.com"],  # 添加仓库地址
}
sudo systemctl daemon-reload && sudo systemctl restart docker

docker login registry.harbor.com -u admin
# 拉镜像
docker pull registry.harbor.com/dir/dify-api:1.4.1
# 推镜像 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag langgenius/dify-api:1.4.1 registry.harbor.com/dir/dify-api:1.4.1
docker push registry.harbor.com/dir/dify-api:1.4.1

五、kubectl常用命令

Docker Desktop for Mac/Windows 开启 Kubernetes: https://github.com/denverdino/k8s-for-docker-desktop

kubectl config get-contexts                                   # 查看当前上下文   设置上下文:kubectl config use-context docker-desktop
kubectl cluster-info                                          # 查看集群状态
kubectl get node -n <namespace-name>                          # 查看节点
kubectl describe node <node-name> -n <namespace-name>         # 查看节点详情
kubectl apply -f deployment-service.yaml                      # 部署应用
kubectl get pods -n <namespace-name> -w                       # 持续查看pod状态
kubectl get pods --all-namespaces                             # 查看所有pod
kubectl proxy --port=8001                                     # 启动代理,默认端口8001
kubectl create namespace argo                                   # 创建命名空间



# K8s进入一个pod里有多个容器的方法;注释:--namespace 为命名空间kube-dns为pod的名字,-c或-container为Pod里其中的一个容器名字
kubectl --namespace=kube-system exec -it kube-dns-1336009800-15b1h --container nginx -- sh
kubectl --namespace=kube-system exec -it kube-dns-1336009800-15b1h  -c  nginx -- sh

六、常用Dockerfile

  1. Java21 jar应用
FROM openjdk:21-jdk-slim

# 元数据
LABEL maintainer="devops-team@company.com"
LABEL version="1.0.0"
LABEL description="AI Support Service"

# 环境配置
ENV TZ=Asia/Shanghai
ENV LANG=zh_CN.UTF-8
ENV JAVA_OPTS="-XX:+UseContainerSupport \
               -XX:MaxRAMPercentage=75.0 \
               -XX:+UseG1GC \
               -XX:MaxGCPauseMillis=200 \
               -XX:+UnlockExperimentalVMOptions \
               -XX:+ExitOnOutOfMemoryError \
               -Djava.security.egd=file:/dev/./urandom \
               -Dfile.encoding=UTF-8"
# 设置时区及修改国内源配置
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak
RUN sed -i 's|http://deb.debian.org|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \
    sed -i 's|http://security.debian.org|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources



# 最小化工具集 - 只安装必要的排查工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    # 必须的进程工具ps, free, top
    procps \
    \
    # 必须的网络工具 iproute2含ip, ss (替代 netstat)
    iproute2 \
    iputils-ping \
    curl \
    \
    # 系统诊断(查看端口和文件、文件检测)
    lsof \
    file \
    \
    # 文本查看
    less \
    \
    # 基础依赖
    ca-certificates \
    tzdata \
    \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# 按类别安装工具
# RUN apt-get update && apt-get install -y --no-install-recommends \
#     # 1. 进程和系统监控
#     procps \          # ps, free, top, uptime, vmstat
#     htop \            # 增强版 top
#     sysstat \         # iostat, mpstat, pidstat, sar
#     \
#     # 2. 网络工具
#     iproute2 \        # ip, ss
#     net-tools \       # netstat, ifconfig, route
#     iputils-ping \    # ping
#     dnsutils \        # dig, nslookup
#     curl \
#     wget \
#     \
#     # 3. 系统诊断
#     lsof \            # 查看打开的文件
#     file \            # 文件类型检测
#     strace \          # 系统调用跟踪
#     ltrace \          # 库调用跟踪
#     \
#     # 4. 文本和编辑
#     vim-tiny \
#     nano \
#     less \
#     tree \
#     \
#     # 5. 压缩工具
#     zip \
#     unzip \
#     \
#     # 6. 基础依赖
#     ca-certificates \
#     tzdata \
#     \
#     && rm -rf /var/lib/apt/lists/* \
#     && apt-get clean




# 创建应用用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
WORKDIR /app
RUN mkdir -p /app/logs /app/tmp && chown -R appuser:appuser /app
COPY --chown=appuser:appuser ai-support-0.0.1-SNAPSHOT.jar app.jar

USER appuser

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
  1. docker-compose 中间件
networks:
  app_net:
    driver: bridge

services:
  nginx:
    image: nginx:1.31.2
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /data/docker/nginx/logs:/var/log/nginx
      - /data/docker/nginx/html:/usr/share/nginx/html
#      - /data/docker/nginx/conf:/etc/nginx/conf.d
    networks:
      - app_net
    sysctls:
      net.core.somaxconn: 4096

  mariadb:
    image: mariadb:12.3.2
    container_name: mariadb
    restart: unless-stopped
    ports:
      - "127.0.0.1:3306:3306"
    mem_limit: 2g
    memswap_limit: 2g
    environment:
      MARIADB_ROOT_PASSWORD: "Root@123456"
      MARIADB_DATABASE: "java_db"
      MARIADB_USER: "dev"
      MARIADB_PASSWORD: "Dev@123456"
    volumes:
      - /data/docker/mariadb:/var/lib/mysql
    networks:
      - app_net
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --default-time-zone=+8:00

  redis:
    image: redis:8.8.0
    container_name: redis
    restart: unless‑stopped
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
      - /data/docker/redis:/data
    networks:
      - app_net
    command: >
      redis-server
      --requirepass Redis@123456
      --appendonly yes
      --appendfsync everysec

  redisinsight:
    image: redis/redisinsight:latest
    container_name: redisinsight
    restart: unless‑stopped
    ports:
      - "127.0.0.1:5540:5540"
    user: "1000:1000"
    volumes:
      - /data/docker/redisinsight:/data
    networks:
      - app_net

  minio:
    image: minio/minio:RELEASE.2025-09-07T16-13-09Z
    container_name: minio
    restart: unless‑stopped	
    ports:
      - "127.0.0.1:9000:9000"
      - "127.0.0.1:9001:9001"
    environment:
      MINIO_ROOT_USER: "admin"
      MINIO_ROOT_PASSWORD: "Minio@123456"
    volumes:
      - /data/docker/minio:/data
    networks:
      - app_net
    command: server /data --address ":9000" --console-address ":9001"
← 返回技术