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 镜像加速
- 编辑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,容器启动会自动应用此处配置
}
- 重启Docker
sudo systemctl daemon-reload && sudo systemctl restart docker
- 修改容器的数据目录
- vim /etc/docker/daemon.json #修改容器的数据目录
{
"data-root":"/opt/data" # 容器、网络、集群等配置存储的目录.
}
- systemctl restart docker # 重启生效
三、部分例子
- 用dockerfile构建名为 myimage 的镜像
#在dockfile所在文件夹执行以下命令,注意最后有个点号不要漏掉
docker build -t "myimage" .
- 运行名为 myimage 的镜像
- 将内部80端口映射到主机的8080端口
- 容器主机名为 myhostname
- 容器名为 mycontainer
- 镜像名为 myimage
docker run -d -p "0.0.0.0:8080:80" -h "myhostname" --name="mycontainer" myimage
- 运行一个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
- 配置网络
# 官方文档: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
- 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"]
- 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"