docker使用指南(持续更新)

2024-02-28

docker

docker可以理解为一个低配版的虚拟机,跟虚拟机一样具有沙箱运行环境。你可以在上面部署或测试自己的程序,但跟虚拟机不同的是:docker只负责提供程序的运行环境,不提供虚拟机那种完备的硬件模拟。因此docker相较于虚拟机具有更小得到资源占用。

0c41702017108706e2f8ad135c515cbe.jpeg

docker用途

如果你有以下需求,可以采用docker

  1. 服务部署需要各种的程序版本:假如你在服务器上部署了多个程序,有的程序需要java8的运行环境,而有的需要jdk17的环境等诸如此类。虽然可以通过建立不同软连接或采取环境变量映射等操作。但是属实麻烦,还会导致服务器环境越来越复杂,可能会导致意外的程序bug。此时,你便可以考虑docker,容器之间相互隔离,在内存允许的情况下,想梭哈几种环境都没问题。

  2. 快速部署应用程序:你是否还在为部署程序时的各种环境的搭建感到烦恼,各种初始化操作感到心累。将应用程序打包成docker镜像,一次操作,到处运行。两行命令就可以将项目跑起来。

还有。。。。。

docker相关概念

  1. docker容器:docker容器可以理解为你的程序,及程序运行环境。

  2. docker镜像:可以理解为你的程序的安装包,用来构建docker容器的。

  3. dockerfile:用来构建docker镜像的脚本,用来做的程序,及程序运行环境的初始化。

  4. 数据卷:存放程序数据的地方,建立宿主机与docker容器的文件路径映射,保证容器被删除后,容器内产生的数据不被销毁。

docker常用命令


# 创建镜像 
docker build -t 镜像名称 dockerfile所在目录,例 docker build -t py-server .
# 运行容器
docker run  --name <指定容器名称(也可不指定)> -p <本地端口>:<容器端口> -d py-server ,例 docker run  -p 80:8080 -d py-server (将本地80端口映射到容器8080端口)
-d 让容器在后台运行 --restart=always(总是跟随docker启动)

# 容器相关命令
列举运行中容器:docker ps   docker ps -a 查看所有容器(包括未在运行的)
停止容器:docker stop <容器ID/名称>
重启容器:docker restart <容器ID/名称>
启动容器:docker start <容器ID/名称>
删除容器:docker rm<容器ID/名称>
启动-个远程Shell::docker exec-it<容器ID>/bin/bash

#镜像
docker images 查看所有镜像
docker rmi <镜像id/镜像名> 删除镜像

# 查看日志
docker logs <容器id或容器名>
docker logs <容器id或容器名> -n100 查看最近100行日志
docker logs <容器id或容器名> --since="20m" 查看最近20分钟日志

#网络,同一个网络的容器,通过 容器名称:端口(容器端口) 相互访问
docker network create 名称   创建一个docker网络
docker network ls 查看现有的docker网络
docker run --network=网络名称 在运行容器时指定容器的网络

# 查看容器
docker ps 查看运行中的容器
docker ps -a 查看所有容器

# 文件复制
# 将宿主机文件复制到docker
docker cp 宿主机文件路径  容器名称:容器文件夹路径
例:docker cp . my_app:/home/app 将当前目录下的所有文件复制到my_app容器中的/home/app下
# 将docker文件复制到宿主机/home/app下
docker cp 容器名称:容器文件路径  宿主机文件夹路径  


# volumes 数据卷:可以当成是一个在本地主机和不同容器上运行的的共享的文件夹,用来永久保存容器中的数据
创建数据卷 docker volume create <数据卷名称> 例 docker volume create my-finance-data
启动时挂载数据卷 docker run -dp 80:5000 -v <数据卷名称>:<挂载路径> my-finance 例 docker run -dp 80:5000 -v my-finance-data:/etc/finance my-finance

# docker-compose   创建多个容器
# 步骤:创建docker-compose.yml配置文件
# 进入docker-compose.yml目录
docker compose up -d  启动 Halo 服务
docker compose logs -f 实时查看日志

# 查看容器配置
docker inspect 容器id或名称

# docker update
docker update 容器名称  要添加的命令
例如:docker update app --restart=always  给app容器添加自启动

# 进入docker容器并运行命令
docker exec -it --user=root 容器id或名称  bash
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
--user=root : 指定以管理员身份

# docker修改时间,进入docker容器后

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 将docker容器内的文件挂载到系统
docker run -dp 8080:80 -v 系统目录:容器目录 --name api_server api_server
例:docker run -dp 8080:80 -v /home/images/:/home/images --name api_server api_server

#在运行容器的时候,给容器加特权,及加上--privileged=true参数(解决执行命令时的权限问题)
docker run -dp 90:6379 --name redis --privileged=true redis

PREV
关于箭头函数中this的指向问题
NEXT
爬虫基础指南(持续更新)