Ubantu安装docker
一.docker 安装
参考视频:https://www.bilibili.com/video/BV1BE6PYUESb?spm_id_from=333.788.videopod.episodes&vd_source=90ff53fe44d29e00ed0199e3c93004c2&p=6
二.docker 镜像
1 检索镜像
docker search rabbitmq
# name : 镜像名称
# description : 镜像描述
# stars : 镜像starts数量
# official : 是否官方[OK]
# 查看所有镜像的版本 https://hub.docker.com
2 下载镜像
docker pull rabbitmq:版本号
# 查看所有镜像的版本 https://hub.docker.com
3 查看镜像列表
docker images
4 删除镜像
docker rmi 镜像名称
三.docker 操作容器
1 常用命令
-d
--name
-p
-v
-e
docker ps
docker ps -a
docker ps -aq
docker stop 容器名称/容器ID
docker start 容器名称/容器ID
docker start 容器名称/容器ID
docker exec -it 容器名称
docker exec -it 容器名称 /bin/bash
docker rm 容器名称/容器ID
docker em -f 容器名称/容器ID
docker rm $(docker ps -aq)
docker logs 容器名称/容器ID
docker inspect 容器名
2 保存自定义镜像
docker commit -m "修改容器信息" 容器名称/容器ID 自定义的镜像名:版本号
docker images
docker save 自定义的镜像名:版本号
docker save -o 自定义的镜像名.tar 自定义的镜像名:版本号
docker load -i 自定义的镜像名.tar
3 分享社区
docker login -> 用户名 密码
docker tag 自定义的镜像名 用户名/新镜像名
docker push 用户名/新镜像名
四. docker存储
1 目录挂载
docker run -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html --name mynginx nginx
2 卷映射
docker run -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html -v nghtml:/etc/nginx --name mynginx nginx
3 查看存储
docker volume ls
五.自定义网络
1 查看容器的细节
docker inspect 容器名
2 创建自定义网络
docker network create mynet
3 容器加入自定义网络
docker run -d -p 88:80 --name app1 --network mynet nginx
4 redis 主从同步
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network mynet --name redis01 \
bitnami/redis
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_PASSWORD=123456 \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-E REDIS_MASTER_PASSWORD=123456 \
--network mynet --name redis02 \
bitnami/redis
六 docker compose
1 compose.yaml文件
name: myblog
services:
mysql:
container_name: mysql
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
volumes:
- mysql-data:/var/lib/mysql
- /app/myconfig:/etc/mysql/conf.d
restart: always
networks:
- blog
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_nAME: wordpress
volumes:
- wordpress:/var/www/html
restart: always
networks:
- blog
depends_on:
- mysql
volumes:
mysql-data:
wordpress:
networks:
blog:
2 启动 compose.yaml文件
docker compose up -d
docker compose -f 文件名.yaml up -d
docker compose -f 文件名.yaml down
docker compose -f 文件名.yaml down --rmi all -v
七 制作自己的镜像
1 编写dockerfile 文件的指令
FROM
RUN
CMD
LABEL
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ARG
2 示例 vim Dockerfile -> wq
FROM openjdk:17
LABEL author=hubiao
COPY okyun.jar /okyun.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/okyun.jar"]
3 制作镜像
docker build -f Dockerfile -t myapp:v1.0 .
八 生产部署
1 compose.yaml 文件
name: okyun
services:
rabbitmq:
container_name: rabbitmq
hostname: rabbitmq-okyun
image: rabbitmq:3.12.14-management
deploy:
resources:
limits:
memory: 2G
cpus: "1.5"
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_PLUGINS_DIR=/plugins
- RABBITMQ_DEFAULT_VHOST:okyun
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456
command:
- bash
- -c
- |
# 启动时确保插件激活
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
rabbitmq-server
volumes:
# ✅ 改成挂载单个插件(只放 .ez 文件即可)
- ./rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.12.0.ez:/plugins/rabbitmq_delayed_message_exchange-3.12.0.ez
- ./rabbitmq/data:/var/lib/rabbitmq
- ./rabbitmq/log:/var/log/rabbitmq
- ./rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
restart: unless-stopped
networks:
- okyun
volumes:
rabbitmq_plugin:
driver: local
networks:
okyun:
driver: bridge
2 初始化文件 init.sh
set -e
command -v docker-compose >/dev/null 2>&1 || { echo >&2 "❌ docker-compose 未安装,退出。"; exit 1; }
mkdir -p ./rabbitmq/data ./rabbitmq/log ./rabbitmq/config ./rabbitmq/plugins
chown -R 999:999 ./rabbitmq
find ./rabbitmq -type d -exec chmod 775 {} ;
PLUGIN_FILE="./rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.12.0.ez"
if [ ! -f "$PLUGIN_FILE" ]; then
echo "⬇️ 正在下载插件..."
wget -P ./rabbitmq/plugins/ \
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.12.0/rabbitmq_delayed_message_exchange-3.12.0.ez \
|| { echo "❌ 插件下载失败,请检查网络或 URL 是否正确"; exit 1; }
fi
cat > ./rabbitmq/config/rabbitmq.conf << 'EOF'
vm_memory_high_watermark.relative = 0.6
disk_free_limit.absolute = 1GB
default_vhost = okyun
loopback_users.guest = false
EOF
chmod 644 ./rabbitmq/config/rabbitmq.conf
chown -R 999:999 ./rabbitmq/data ./rabbitmq/log
docker-compose down -v
docker-compose up -d
echo "⏳ 等待 RabbitMQ 启动..."
sleep 10
docker exec rabbitmq bash -c "chmod 600 /var/lib/rabbitmq/.erlang.cookie || true"
echo "🔍 插件启用状态:"
docker exec rabbitmq rabbitmq-plugins list | grep delayed
3 运行初始化文件
chmod +x init.sh && ./init.sh
九 docker 查用命令
docker images
docker ps
dpcker ps -a
docker stop rabbitmq && docker rm rabbitmq
docker logs rabbitmq
docker compose up -d
docker compose -f 文件名.yaml up -d
docker compose down
docker compose -f 文件名.yaml down