docker
基础知识
- 每一条保留指令都必须以大写字母并且后面至少要跟一个参数
- 指令从上至下顺序执行
- 注释用#表示
- 每条指令都会创建一个新的镜像层并对镜像进行提交
Docker 执行 Dockerfile 的流程
- docker 从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似 docker commit 的操作提交一个新的镜像层
- docker 再基于刚提交的镜像运行一个新容器
- 执行 dockerfile 中的下一条指令直到所有指令都执行完成
四种网络模式
默认为 bridge
| 网络模式 | 区别 |
|---|---|
| bridge | 虚拟网桥,为每一个容器分配并设置 ip,将容器都连接到 docker0 |
| host | 容器不会虚拟出自己的网卡,也不会配置自己的 ip,而是使用宿主的 ip 和端口 |
| none | 容器有独立的 network namespace,但是并没有对其进行任何的网络设置,如 veth pair 和网桥连接,ip |
| container | 新创建的容器不会创建自己的网卡和配置自己的 ip,而是和指定的容器共享 ip 和端口范围 |
docker 命令
docker images 查看本地的镜像
docker search 镜像名字:搜索镜像
docker pull 镜像名字:拉去镜像
docker system df:查看镜像/容器/数据卷所占的空间
docker run -it --name 镜像名字 命令 :启动交互式容器 --name为容器指定名字
docker run -d 镜像名字 :启动后台运行的容器
docker rmi 镜像名字id: 删除镜像
docker ps:查看全部启动的容器
docker ps -a:查看全部容器(当前启动中的跟历史上运行过的)
exit:run进去容器,exit退出,容器停止
ctrl+p+q: run进去容器,ctrl+p+q退出,容器不停止
docker start 容器id或者容器名字:启动已停止运行的容器
docker restart 容器id或者容器名字:重启容器
docker stop 容器id或者容器名字:停止容器
docker kill 容器id或者容器名字:强制停止容器
docker rm 容器id:删除已停止的容器
docker rm -f 容器id:强制删除容器
docker logs 容器id:查看日志
docker top 容器id:查看容器内运行的进程
docker inspect 容器id:查看容器内部细节
docker exec -it 容器id bashShell:进入容器,在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
docker attach 容器id:重新进入容器,直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
docker cp 容器id:容器内路径 目的主机路径:从容器内拷贝文件到主机上
docker export 容器id > 文件名.tar:导出容器的内容,留作为一个tar归档文件,对应import命令
docker import:从tar包中的内容创建一个新的文件系统再导入为镜像,对应export
docker commit -m=“描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]:提交容器副本使之成为一个新的镜像
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名:容器数据卷
docker run -it --privileged=true --volumes-from 父类 --name 容器名字 镜像名字 : 容器数据卷继承
Docker 安装部署 RabbitMQ
搜索 rabbitmq 镜像
docker search rabbitmq

docker pull rabbitmq
查看镜像文件
docker images
运行 rabbitmq 镜像
docker run -d --name rabbitMQ-01 -p 10000:5672 -p 10001:15672 rabbitmq
-p 10000:5672 的含义
linux 服务器的端口 10000 端口对应 docker 的 rabbitmq 容器的 5672 端口 写了两组端口对应
查看 docker 中正在运行的容器
docker ps

进入到 rabbitMQ 容器中
docker exec -it rabbitMQ-01 /bin/bash
安装可视化插件
rabbitmq-plugins enable rabbitmq_management
测试,出现登录框,表示安装并启动成功
http://ip:10001

Dockerfile
java 开发之 Dockerfile 是什么 (baidu.com)
CMD [“java”, “-jar”, “-Xmx2048m”,"-Xms2048m", “web-site-1.0.jar”, “–server.port=8080”, “–use_proxy=false”]
Docker 学习——Dockerfile 指令详解(五) 顶 - 腾讯云开发者社区-腾讯云 (tencent.com)
Docker 如何对镜像进行命名_普通网友的博客-CSDN 博客_dockerfile 镜像名字
Portainer 使用图形化界面管理 docker 容器
DockerFile
-
首先,确保你已经创建了 Docker Hub 的账号,并使用
docker login命令登录到 Docker Hub:Copy Codedocker login -
在命令行中,进入包含 Dockerfile 的目录。
-
运行以下命令来构建镜像并为其打标签,将
<dockerhub_username>替 换为你的 Docker Hub 用户名,<image_name>替换为你想要给镜像起的名称,<tag>替换为标签(通常是版本号):Copy Codedocker build -t <dockerhub_username>/<image_name>:<tag> . -
等待镜像构建完成后,运行以下命令将镜像推送到 Docker Hub:
Copy Codedocker push <dockerhub_username>/<image_name>:<tag> -
推送结束后,你可以在 Docker Hub 上看到你的镜像,并可通过以下方式在其他环境中拉取镜像(将
<dockerhub_username>/<image_name>:<tag>替换为你的镜像名称和标签):Copy Codedocker pull <dockerhub_username>/<image_name>:<tag>
请确保在上述指令中替换 <dockerhub_username>、<image_name> 和 <tag> 为你实际使用的值。
构建 vue 项目

创建 dockerhub 仓库

# 首先,使用Node.js作为基础镜像,并构建Vue项目
FROM node:latest as build-stage
#CD到 node镜像的/app目录
WORKDIR /app
# 将本地的package*.json 复制到 /app的当前目录
COPY package*.json ./
#安装pnpm工具
RUN npm install -g pnpm
#使用pnpm安装依赖
RUN pnpm i
#复制DockerFile上层的所有文件(不包含在.dockerignore文件的)复制到 /app下
COPY ../ .
#使用pnpm构建vue项目
RUN pnpm run build
# 接下来,使用Nginx作为基础镜像,并设置Nginx配置
FROM nginx:latest as production-stage
#删除nginx镜像中html中现有所有文件
RUN rm -rf /usr/share/nginx/html/*
#将node镜像构建出来的产物 /app/dist复制到nginx镜像的/usr/share/nginx/html目录下
COPY --from=build-stage /app/dist /usr/share/nginx/html
#将DockerFile文件当前目录下的nginx.conf复制到nginx镜像的 /etc/nginx/conf.d/default.conf文件中
COPY nginx.conf /etc/nginx/conf.d/default.conf
#暴露80端口
EXPOSE 80
#告诉 Nginx 不以守护进程(daemon)的方式运行,而是在前台执行
CMD ["nginx", "-g", "daemon off;"]
RUN echo 'it-utils is running!'
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
}
}
构建 docker 镜像
docker build -f docker/DockerFile -t qingbomy/it-utils:v1 .
-
-f 指定 DockerFile 文件
-
-t 指定 tag
推送到 dockerHub 仓库
docker push qingbomy/it-utils:v1