diff --git a/Java/Docker指南.md b/Java/Docker指南.md index 1319f7d..a867de7 100644 --- a/Java/Docker指南.md +++ b/Java/Docker指南.md @@ -60,7 +60,7 @@ Docker是一个CS架构的程序,由两部分组成: 1. docker push,将本地镜像上传到远程仓库(例如 Docker Hub) -``` +```text docker login #docker hub登录 # 假设已有本地镜像 myimage,需要先打上标签: docker tag myimage yourusername/myimage:latest @@ -70,31 +70,31 @@ docker push yourusername/myimage:latest 2. docker pull ,从远程仓库拉取镜像到本地。 -``` +```text docker pull yourusername/myimage:latest ``` 3. docker save,将本地镜像保存为 tar 文件,方便备份或传输 -``` +```text docker save -o myimage.tar yourusername/myimage:latest ``` 4. docker load,从 tar 文件中加载镜像到本地 Docker。 -``` +```text docker load -i myimage.tar ``` 5. docker images ,查看本地镜像 -``` +```text docker images ``` 6. docker build ,构建镜像 -t后面跟镜像名 -``` +```text docker build -t yourusername/myimage:latest . ``` @@ -116,7 +116,7 @@ docker build -t yourusername/myimage:latest . ​ -v <宿主机目录>:<容器目录>` 或 `--volume : 如 -v /host/data:/app/data -``` +```text docker run --name test-container -d test:latest ``` @@ -124,49 +124,49 @@ docker run --name test-container -d test:latest ​ -it : 给当前进入的容器创建一个标准输入、输出终端 -``` +```text docker exec -it test-container sh ``` 3. docker logs ,查看 test-container 的日志输出: -``` +```text docker logs --since 1h test-container #查看最近1h ``` 4. docker stop 停止正在运行的 test-container: -``` +```text docker stop test-container ``` 5. docker start 启动一个已停止的 test-container: -``` +```text docker start test-container ``` 6. docker cp 复制文件(或目录)到容器内部,先cd到文件所在目录 -``` +```text docker cp localfile.txt test-container:/target_dir/ ``` 7. docker stats ,查看docker中运行的所有容器的运行状态(CPU 内存占用) -``` +```text docker stats ``` 8. docker container ls,查看运行容器的创建时间、端口映射等 -``` +```text docker container ls ``` 9. docker ps 查看 Docker 容器的状态,默认情况下,它只显示正在运行的容器 -``` +```text docker ps -a #查看所有容器,包括已经停止或启动失败的容器 ``` @@ -196,7 +196,7 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器 - **示例**:将宿主机的 `/path/on/host` 挂载到容器内的 `/app/data`: - ``` + ```text docker run -v /path/on/host:/app/data your_image ``` @@ -212,25 +212,25 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器 - **示例**:创建并挂载名为 `my_volume` 的卷到容器内的 `/app/data`: - ``` + ```text docker run -v my_volume:/app/data your_image ``` 创建命名卷 -``` +```text docker volume create my_volume ``` 查看命名卷,这将列出所有 Docker 管理的卷。 -``` +```text docker volume ls ``` 显示该命名卷的详细信息 -``` +```text zy123@hcss-ecs-588d:~/zbparse$ sudo docker volume inspect html [ { @@ -259,13 +259,13 @@ Docker 网络的主要作用是实现容器之间的**通信和隔离**,同时 1.创建自定义网络 ,名为 `app-net` -``` +```text docker network create app-net ``` 2.启动 MySQL 容器,并加入 `app-net` 网络,同时为其指定别名 `db` -``` +```text docker run -d --name mysql \ --network app-net \ --network-alias db \ @@ -287,7 +287,7 @@ docker run -d --name mysql \ 3.启动 Web 应用容器,加入同一个 `app-net` 网络 -``` +```text docker run -d --name webapp \ --network app-net \ your_webapp_image:latest @@ -295,7 +295,7 @@ docker run -d --name webapp \ 4.验证容器间通信,进入 Web 应用容器,尝试通过别名 `db` 连接 MySQL: -``` +```text docker exec -it webapp bash # 在 webapp 容器内执行,比如使用 ping 测试网络连通性: ping db @@ -303,7 +303,7 @@ ping db 举个例子,如果你的 Java 应用运行在容器 B 中,而数据库容器 A 已经通过 `--network-alias db` 起了别名,那么在 Java 应用中,你只需要写: -``` +```text String dbUrl = "jdbc:mysql://db:3306/your_database"; ``` @@ -311,7 +311,7 @@ String dbUrl = "jdbc:mysql://db:3306/your_database"; 否则: -``` +```text String dbUrl = "jdbc:mysql://<宿主机IP或localhost>:3306/your_database"; ``` @@ -322,13 +322,13 @@ String dbUrl = "jdbc:mysql://<宿主机IP或localhost>:3306/your_database"; 接时可以使用 `--alias` 参数为容器在该网络中设置别名 -``` +```text docker network connect app-net mysql --alias db ``` 6.断开连接 -``` +```text docker network disconnect app-net mysql ``` @@ -336,7 +336,7 @@ docker network disconnect app-net mysql 需要注意的是,只有当网络中没有容器连接时才能删除。 -``` +```text docker network rm app-net docker network prune #删除所有未使用的网络 ``` @@ -361,7 +361,7 @@ sudo apt-get remove docker docker-engine docker.io containerd runc 在安装新版 Docker 前,需要更新 apt 源并安装一些依赖包,以便能够通过 HTTPS 协议访问 Docker 官方仓库。 -``` +```text sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release ``` @@ -372,7 +372,7 @@ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release **3.添加 Docker 官方 GPG 密钥** -``` +```text curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg ``` @@ -386,13 +386,13 @@ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o 这是最关键的一步,配置docker官方地址,往往**很难下载**!!! -``` +```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` 推荐使用以下阿里云的镜像加速源 -``` +```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` @@ -404,7 +404,7 @@ cat /etc/apt/sources.list.d/docker.list 可以查看是否配置成功 更新 apt 缓存后,安装最新版的 Docker Engine、CLI 工具和 containerd: -``` +```text sudo apt update #如果是docker官方,这一步可能失败! sudo apt install docker-ce docker-ce-cli containerd.io ``` @@ -441,11 +441,11 @@ linux vim: ### docker配置代理 -``` +```text sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf ``` -``` +```text [Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" @@ -454,12 +454,12 @@ Environment="NO_PROXY=localhost,127.0.0.1" -``` +```text sudo systemctl daemon-reload //加载配置文件,更新环境变量 sudo systemctl restart docker ``` -``` +```text systemctl show --property=Environment docker //验证是否配置成功 ``` @@ -469,13 +469,13 @@ systemctl show --property=Environment docker //验证是否配置成功 1.编辑 Docker 配置文件,如果该文件不存在,可以创建一个新的文件。 -``` +```text sudo vim /etc/docker/daemon.json ``` 2.添加多个镜像仓库配置 -``` +```text { "registry-mirrors": [ "http://hub-mirror.c.163.com", @@ -491,13 +491,13 @@ sudo vim /etc/docker/daemon.json 3.重启 Docker 服务以应用 -``` +```text sudo systemctl restart docker ``` 4.验证配置 -``` +```text docker info ``` @@ -513,7 +513,7 @@ docker info 在 Dockerfile 中,RUN 指令用于在构建镜像的过程中执行命令,这些命令会在镜像的一个临时容器中执行,然后将执行结果作为新的镜像层保存下来。常见的用途包括安装软件包、修改系统配置、编译代码等。 -``` +```text RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8 @@ -525,7 +525,7 @@ RUN cd $JAVA_DIR \ 当你修改原镜像时,只需使用相同的镜像名执行: -``` +```text docker build -t zbparse . ``` @@ -544,7 +544,7 @@ Docker 会根据 **Dockerfile 和上下文的变化**来判断哪些层需要重 以下方法可以删除none镜像。 -``` +```text # 查找无标签镜像 docker images -f "dangling=true" # 删除无标签镜像 @@ -561,7 +561,7 @@ docker rmi $(docker images -f "dangling=true" -q) 1. 编写dockerfile文件 - ``` + ```text # 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim @@ -599,19 +599,19 @@ docker rmi $(docker images -f "dangling=true" -q) 5. 构造镜像 -t后面是镜像名 ,最后的点号 (`.`) 代表当前目录 -``` +```text docker build -t zbparse . ``` 5. 运行容器 -p后面,第一个5000代表宿主机端口,第二个5000代表容器内端口 ,zbparse-container为创建的容器名,zbparse是使用的镜像名字 -``` +```text docker run -d -p 5000:5000 --name zbparse-container zbparse ``` 6. 查看日志 ,若无报错贼容器正常启动 -``` +```text docker logs zbparse-container docker logs --tail 10 [容器ID或名称] 查看最近10条日志 docker logs --since 1h [容器ID或名称] 查看最近1小时的日志 @@ -619,32 +619,32 @@ docker logs --since 1h [容器ID或名称] 查看最近1小时的日志 7. 停止和删除容器,先停止后删除 -``` +```text docker stop zbparse-container docker rm zbparse-container ``` 8. 删除镜像 -``` +```text docker rmi zbparse ``` 9. 进入容器,可以查看容器内的数据 -``` +```text docker exec -it zbparse-container /bin/bash ``` 10. 保存镜像为tar文件 (最简单的应该是上传docker hub镜像库,但是现在貌似被墙了) -``` +```text docker save -o zbparse.tar zbparse ``` 11. 使用scp传输文件 -``` +```text scp zbparse.tar root@118.178.236.139:/home/zy ``` @@ -652,13 +652,13 @@ scp zbparse.tar root@118.178.236.139:/home/zy 12. 加载镜像 -``` +```text sudo docker load -i zbparse.tar ``` 13. 上传镜像 -``` +```text docker login #输入邮箱 密码 docker tag zbparse yourusername/zbparse #标记你的 Docker 镜像 #其中yourusername/zbparse是标记名 @@ -676,7 +676,7 @@ docker tag zbparse 646228430smile/zbparse:latest 这里的646228430smile是用 14. 查看镜像 -``` +```text docker images ``` @@ -686,7 +686,7 @@ docker images - **linux中构建镜像问题:** -``` +```text RuntimeError: can‘t start new thread。 ``` @@ -697,7 +697,7 @@ RUN pip config set global.progress_bar off -``` +```text => [flask_app internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 982B 0.0s => ERROR [flask_app internal] load metadata for docker.io/library/python:3.8-slim 60.4s @@ -719,14 +719,14 @@ exit status 1 - **docker运行权限问题** -``` +```text OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 4: Operation not permitted OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max ``` 解决方法: -``` +```text docker run --name zbparse-container --security-opt seccomp=unconfined zbparse ``` @@ -740,7 +740,7 @@ docker run --name zbparse-container --security-opt seccomp=unconfined zbparse 验证安装 -``` +```text docker compose version ``` @@ -748,19 +748,19 @@ docker compose version 下载二进制文件(或者下载别人的镜像复制到服务器中的/usr/local/bin下) -``` +```text sudo curl -L "https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ``` 赋予执行权限 -``` +```text sudo chmod +x /usr/local/bin/docker-compose ``` 验证安装 -``` +```text docker-compose --version ``` @@ -793,7 +793,7 @@ docker-compose --version -``` +```text version: '3' services: @@ -839,7 +839,7 @@ volumes: -``` +```text build: context: ./web_app dockerfile: Dockerfile @@ -855,13 +855,13 @@ build: ./web_app #两种写法是等效的 **构建镜像:**这个命令根据 docker-compose.yml 中各服务的配置构建镜像。如果你修改了 Dockerfile 或者项目代码需要打包进镜像时,就需要运行该命令来构建新的镜像。 -``` +```text docker-compose build ``` **启动容器:**这个命令用于启动服务,参数 `-d` 表示以后台守护进程的方式运行。如果镜像不存在,它会自动构建镜像;但如果镜像已经存在,则默认直接使用现有的镜像启动容器。 -``` +```text docker-compose up -d ``` @@ -869,19 +869,19 @@ docker-compose up -d **只针对 pyapp 服务进行重构和启动,不影响其他服务运行** -``` +```text docker-compose build pyapp ``` 启动容器并进入bash -``` +```text docker compose run --rm -it pyapp /bin/bash ``` 运行脚本 -``` +```text python typecho_markdown_upload/main.py ``` @@ -889,7 +889,7 @@ python typecho_markdown_upload/main.py **更新并重启容器** -``` +```text docker-compose up --build -d ``` @@ -901,40 +901,40 @@ docker-compose up --build -d **查看服务的日志输出** -``` +```text docker-compose logs flask_app --since 1h #只显示最近 1 小时 ``` **停止并删除所有由 docker-compose 启动的容器、网络等(默认不影响挂载卷)。** -``` +```text docker-compose down #不能单独指定 ``` **删除停止的容器** -``` +```text docker-compose rm docker-compose rm flask_app ``` **停止运行的容器** -``` +```text docker-compose stop docker-compose stop flask_app #指定某个服务 ``` **启动服务** -``` +```text docker-compose start #启动所有停止的.. docker-compose start flask_app ``` **重启服务(停止+启动)** -``` +```text docker-compose restart docker-compose restart flask_app #指定某个服务 ``` @@ -953,13 +953,13 @@ docker-compose up生成的容器名默认是 `项目名_服务名_索引号` 如 -``` +```text docker-compose -p my_custom_project up -d ``` 在docker-compose.yml中指定容器名 -``` +```text version: '3' services: web: @@ -986,7 +986,7 @@ services: 一个**基础镜像可以构造多个容器**,互不影响, -``` +```text db: image: mysql:8.0 environment: @@ -998,7 +998,7 @@ db: - db_data_project1:/var/lib/mysql ``` -``` +```text db: image: mysql:8.0 environment: @@ -1036,13 +1036,13 @@ db: 1.创建一个 Docker 网络 -``` +```text docker network create my_shared_network ``` 2.创建 MySQL 的 `docker-compose-mysql.yml` -``` +```text version: '3' services: mysql: @@ -1063,7 +1063,7 @@ networks: 3.在 `docker-compose-app.yml` 里连接这个 MySQL -``` +```text version: '3' services: web_app: @@ -1100,13 +1100,13 @@ networks: 4.启动 MySQL 容器 -``` +```text docker-compose -f docker-compose-mysql.yml up -d ``` 5.启动 Web 应用 -``` +```text docker-compose -f docker-compose-app.yml up -d ``` diff --git a/Java/JavaWeb——前端.md b/Java/JavaWeb——前端.md index 1849b91..1a172bc 100644 --- a/Java/JavaWeb——前端.md +++ b/Java/JavaWeb——前端.md @@ -97,7 +97,7 @@ 这里使用了第二种CSS引入方式,内嵌样式,