Docker基础

Docker介绍

Docker 就像是一个“软件集装箱”,把软件及其运行环境打包在一起,这样无论在哪里运行,都能保证环境一致,避免了“在我的机器上能运行,但到你机器上就出问题”的情况。

特性:

在这里插入图片描述

  • 跨平台
    就像一个万能的“打包盒”,无论你是在 Windows、Mac 还是 Linux 系统上,只要安装了 Docker,就能运行打包好的容器。
    Docker 能够跨平台运行,是因为它利用了宿主机的内核(在 Linux 上直接利用,在 Windows 和 Mac 上通过轻量级虚拟机利用),而不是自己携带内核。这种设计使得 Docker 容器启动速度快、占用资源少,同时能够保证在不同操作系统上运行的一致性。
  • 快速运行
    Docker 容器启动速度非常快,通常只需要几秒。因为它不需要像传统虚拟机那样启动一个完整的操作系统,而是直接在宿主机的操作系统上运行,共享内核,所以启动和运行都非常高效。
  • 快速构建
    通过 Dockerfile,开发者可以定义应用的运行环境、依赖库、启动命令等,然后用一条简单的命令(docker build)就能把应用和环境打包成一个容器镜像,非常方便。
  • 快速分享
    Docker 容器镜像可以上传到 Docker Hub或者私有的镜像仓库。其他开发者可以直接从仓库拉取镜像,然后在自己的机器上运行,不需要重新配置环境和安装依赖,大大提高了开发和部署的效率。

镜像与容器

镜像:是一个只读的模板,包含了运行应用所需的所有内容。(类)
容器:是从镜像启动的运行实例,具有隔离性和轻量级的特点。(对象)

  • 容器类似轻量级的虚拟机
  • 容器共享操作系统内核
  • 拥有自己的文件系统、CPU、内存、进程空间等
  • 容器之间互相隔离

Docker使用

安装需要注意配置镜像和代理

  • 命令行方式(在 Windows中,通过 Windows Subsystem for Linux(WSL)可以创建并运行 Ubuntu 等 Linux 发行版。安装完成后,用户可以在 Windows 系统中直接启动这些 Linux 系统,并使用 Bash 等 Linux 命令行工具。)
  • desktop (可视化界面)

1、查看删除

命令行

查看命令

docker images # 查看所有镜像
docker inspect [镜像ID或名称] # 查看指定镜像
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
docker logs [容器ID或名称] # 查看日志
docker volume ls # 查看所有数据卷
docker volume inspect [数据卷名称] # 查看指定数据卷

删除命令

docker rmi [镜像ID或名称] # 删除镜像
docker rm [容器ID或名称] # 删除容器
docker rm -f $(docker ps -aq) # 删除所有容器
docker container prune # 删除所有已经停止的容器 (加上prune就可以删除未使用的)

desktop
可以直接在可视化界面进行查看删除

2、查找镜像

命令行

去DockerHub中查找镜像,并获取下载命令
在这里插入图片描述docker默认下载最新版本

docker pull mysql:8.0.41-debian #image:version

desktop
在这里插入图片描述

3、运行容器

命令行

docker run -d --name mynginx -p 8080:80 -v /local/nginx/html:/usr/share/nginx/html nginx:latest
# -d:后台运行。
# --name mynginx:指定容器名称为 mynginx。
# -p 8080:80:将容器的 80 端口映射到宿主机的 8080 端口。
# -v /local/nginx/html:/usr/share/nginx/html:将宿主机的 /local/nginx/html 目录挂载到容器的 /usr/share/nginx/html 目录,用于持久化 Nginx 的网页内容。
# nginx:latest:使用最新版本的 Nginx 镜像(可以在run容器的时候下载镜像)

挂载卷与目录挂载的比较

特性挂载卷(Volume)目录挂载(Bind Mount)
存储位置Docker 管理的目录(如 /var/lib/docker/volumes宿主机的任意目录或文件
前置条件需要先创建娟不需要预先创建
初始挂载初始为空白时,镜像中的数据会被复制到挂载卷中初始为空白时,容器内部对应的路径也是空白的
重新挂载已存在数据时,挂载卷中的数据会保留,不会被镜像中的数据覆盖已存在数据时,宿主机目录中的数据会直接映射到容器中,镜像中的数据不会覆盖
docker volume create mydata # 创建mydata卷
docker run -d --name mynginx -v mydata:/usr/share/nginx/html nginx:latest # 将mynginx容器中的/usr/share/nginx/html文件挂载到mydata卷中
docker run -d --name mynginx -v /local/nginx/html:/usr/share/nginx/html nginx:latest # 将mynginx容器中的/usr/share/nginx/html文件挂载到/local/nginx/html目录下

desktop
在这里插入图片描述
在创建容器的时候选择参数(容器名、端口映射、挂载、变量)
在这里插入图片描述

停止、删除镜像/容器

命令行

docker stop [容器ID或名称] # 停止正在运行的容器
docker stop $(docker ps -q) # 停止所有容器
docker rm [容器ID或名称] # 删除容器
docker rm -f [容器ID或名称] # 强制删除容器
docker container prune # 阐述已经停止的所有容器
docker rmi [镜像ID或名称]:[标签] # 删除镜像
docker image prune -a # 删除所有未使用的镜像

容器之间的通讯

自定义网络是实现容器通信的更灵活和推荐的方式。通过自定义网络,容器可以使用容器名称进行通信,而不需要知道具体的 IP 地址。

  1. 创建自定义网络
docker network create [网络名称]
  1. 将容器连接到自定义网络
    在运行容器时,使用 --network 选项将容器连接到自定义网络:
docker run -d --name [容器名称] --network [网络名称] [镜像名称]、
docker run -d --name container1 --network mynetwork nginx:latest
docker run -d --name container2 --network mynetwork redis:latest
  1. 容器之间通过容器名称通信
    在自定义网络中,容器可以通过容器名称直接通信。例如,container1 可以通过 container2 的名称访问它。
    例如,如果 container1 是一个 Web 应用,container2 是一个 Redis 服务,container1 可以通过 redis://container2:6379 连接到 Redis 服务。

4、打包镜像并上传

命令行

在 Docker 中,将代码、应用程序或服务打包成镜像是一个常见的操作。这通常通过编写一个 Dockerfile 来完成,然后使用
docker build 命令将 Dockerfile 构建成镜像
编写Dockerfile->构建镜像->标记(Tag)镜像->登录到远程仓库->上传镜像

(1)编写Dockerfile

# 使用官方 Python 基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将当前目录下的文件复制到镜像的工作目录中
COPY . /app

# 安装依赖
RUN pip install Flask

# 暴露端口
EXPOSE 5000

# 容器启动时运行的命令
CMD ["python", "app.py"]

(2)构建镜像

docker build -t mypythonapp:latest .
# -t 参数用于指定镜像的名称和标签(例如 mypythonapp:latest)。
# . 表示当前目录是构建上下文路径。

(3)标记镜像

docker tag mypythonapp:latest yourusername/mypythonapp:latest

(4)登录到远程仓库

docker login

(5)上传镜像

docker push yourusername/mypythonapp:latest

desktop
在这里插入图片描述

参考:B站教程
Docker 设置代理的三种方法
docker for windows 设置代理以及目前能用的镜像源
解决‘wsl:检测到localhost代理配置,但未镜像到WSL‘问题
完美解决无法加载文件 WindowsPowerShell\profile.ps1系统编译问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值