Skip to main content

docker

基础知识

  1. 每一条保留指令都必须以大写字母并且后面至少要跟一个参数
  2. 指令从上至下顺序执行
  3. 注释用#表示
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交

Docker 执行 Dockerfile 的流程

  1. docker 从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似 docker commit 的操作提交一个新的镜像层
  4. docker 再基于刚提交的镜像运行一个新容器
  5. 执行 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

  1. 首先,确保你已经创建了 Docker Hub 的账号,并使用 docker login 命令登录到 Docker Hub:

    Copy Codedocker login
  2. 在命令行中,进入包含 Dockerfile 的目录。

  3. 运行以下命令来构建镜像并为其打标签,将 <dockerhub_username> 替换为你的 Docker Hub 用户名,<image_name> 替换为你想要给镜像起的名称,<tag> 替换为标签(通常是版本号):

    Copy Codedocker build -t <dockerhub_username>/<image_name>:<tag> .
  4. 等待镜像构建完成后,运行以下命令将镜像推送到 Docker Hub:

    Copy Codedocker push <dockerhub_username>/<image_name>:<tag>
  5. 推送结束后,你可以在 Docker Hub 上看到你的镜像,并可通过以下方式在其他环境中拉取镜像(将 <dockerhub_username>/<image_name>:<tag> 替换为你的镜像名称和标签):

    Copy Codedocker pull <dockerhub_username>/<image_name>:<tag>

请确保在上述指令中替换 <dockerhub_username><image_name><tag> 为你实际使用的值。

构建 vue 项目

image-20230827233205745

创建 dockerhub 仓库

image-20230827233545093

# 首先,使用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