重新上手,Docker随笔【Docker】【Linux】

在这里插入图片描述

Docker

方便之处:有提供镜像,一键部署,像虚拟机一样的环境、文件隔离,当我需要改动server的个人目录之外内容时,就显得尤为需要了这种隔离性了,目前不会给我带来明显收益。

常用操作,

容器

列出运行容器
docker ps
进入容器
docker exec -it xxx bash
停止容器
docker stop xxx

创建容器(在镜像那边介绍,需要镜像)

删除容器
docker rm xxx
查看容器日志
docker logs xxx
列出全部容器
docker ps -a

镜像

查看镜像
docker image ls

查看的是本地Docker主机上的镜像列表

用镜像创建容器

假设你想要在 Docker 中运行一个 Nginx 容器,并且希望将容器的 80 端口映射到宿主机的 8080 端口上。同时,你想要给这个容器起一个名字,比如叫做 my-nginx。你可以使用以下命令:

docker run -d -p 8080:80 --name my-nginx nginx

让我们分解这个命令:

  • docker run:Docker 运行命令,用于创建并启动一个新的容器。
  • -d:表示以“detached”模式运行容器,即在后台运行。
  • -p 8080:80:表示端口映射。将容器内部的 80 端口映射到宿主机的 8080 端口。格式为 <宿主机端口>:<容器端口>
  • --name my-nginx:为容器指定一个名称,这里是 my-nginx
  • nginx:指定要运行的 Docker 镜像的名称。在这个例子中,我们使用的是官方的 Nginx 镜像。

执行完这个命令后,Docker 会从 Docker Hub 下载 nginx 镜像(如果本地没有的话),然后创建并启动一个名为 my-nginx 的容器。容器的 80 端口会映射到宿主机的 8080 端口。

那如果我没有想要明确指定的镜像,默认可以选择哪些镜像来创建容器?

  1. ubuntu:一个流行的 Linux 发行版,通常用作基础环境。
  2. debian:另一个广泛使用的 Linux 发行版。
  3. alpine:一个非常小的 Linux 发行版,适合用作容器的基础镜像,因为它体积小,启动快。
  4. nginx:一个高性能的 HTTP 服务器和反向代理。
  5. redis:一个开源的内存数据结构存储系统,用作数据库、缓存和消息中间件。
  6. mongo:MongoDB 是一个基于文档的分布式数据库。
  7. mysql:一个广泛使用的开源关系数据库管理系统。
  8. python:Python 是一种高级编程语言,其官方镜像提供了一个 Python 运行环境。
  9. node:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
  10. java:Java 是一种广泛使用的编程语言,用于企业级应用开发。

使用这些官方镜像的好处是它们都是预先配置好的,可以直接用来创建容器并运行相应的服务。例如,如果你想要创建一个运行 Python 应用的容器,你可以选择 python 镜像。

创建容器时,如果没有指定镜像,Docker 会尝试寻找一个合适的默认镜像,或者提示你指定一个镜像。如果你没有特别的需求,可以使用这些官方镜像作为起点。例如,要使用官方的 Nginx 镜像创建并运行一个容器,可以使用以下命令:

docker run -d -p 8080:80 --name my-nginx nginx

这个命令会从 Docker Hub 下载 nginx 镜像(如果本地没有的话),并将容器的 80 端口映射到宿主机的 8080 端口,然后启动容器。

请注意,选择哪个镜像取决于你想要在容器中运行什么应用或服务。如果你有特定的需求,应该寻找或创建一个包含所需环境和依赖的镜像。

运行本地 Docker Registry(忽略,目前有)

如果你还没有运行一个本地 Docker Registry,你可以通过以下命令启动一个:

docker run -d -p 5000:5000 --name 容器名称 镜像名称:2
  • docker run:Docker CLI 的命令,用于创建一个新的容器实例。
  • -d:表示以 detached 模式运行容器,即在后台运行,不会阻塞命令行。
  • -p 5000:5000:这个参数用于端口映射,格式为 <宿主机端口>:<容器端口>。在这里,它将宿主机的 5000 端口映射到容器内部的 5000 端口。这意味着,当你从宿主机或其他机器访问宿主机上的 Registry 服务时,你会使用宿主机的 5000 端口。
  • --name 容器名称:为新创建的容器指定一个名称,这里是 容器名称。你可以使用 docker ps 命令通过这个名称来查看容器的状态。
  • 镜像名称:这是 Docker Registry 服务的镜像名称。Docker 会从 Docker Hub 下载这个镜像(如果本地没有的话),然后基于这个镜像创建容器。
  • 镜像名称:2:指定使用的 Docker Registry 镜像的标签(tag),这里是 2。Docker 镜像可以有多个标签,用于区分不同的版本。在这个例子中,我们使用的是标签 2,它可能代表了 Registry 的一个特定版本。

这将启动一个本地的 Docker Registry 服务,并将其映射到宿主机的 5000 端口。

用容器制作镜像
docker commit my-ubuntu-container myusername/my-ubuntu-nginx:v1
镜像推送或存放
可以直接存放在本地:
docker commit my-ubuntu-container myusername/my-ubuntu-nginx:v1

这就结束了,我感觉本地就完全够了,都没必要上仓库,我的项目的程度更不需要上云。

关于本地 Docker 主机或本地 Docker Registry 服务区别?

Docker 镜像在本地可以存储在两种地方:本地 Docker 主机或本地 Docker Registry 服务。了解它们之间的区别很重要:

本地 Docker 主机上的镜像

  1. 存储位置:这些镜像存储在 Docker 主机的本地文件系统中,通常位于 /var/lib/docker 目录下。
  2. 访问方式:它们可以通过 Docker 主机上的 Docker 守护进程直接访问和管理,无需网络连接。
  3. 用途:本地镜像用于快速部署容器,因为它们不需要从远程位置下载。
  4. 共享和分发:本地镜像不能直接通过网络共享或分发。如果需要在多台主机间共享,必须先将镜像推送到一个 Docker Registry,然后其他主机从 Registry 拉取。
  5. 版本控制:本地镜像可以很容易地通过 docker savedocker load 命令进行备份和恢复。

本地 Docker Registry 服务中的镜像

  1. 存储位置:这些镜像存储在运行 Docker Registry 服务的服务器上,可能是 Docker 主机本身或网络中的另一台机器。
  2. 访问方式:需要通过网络连接访问。Docker 主机通过 Registry 服务的 API 与 Registry 交互,进行镜像的拉取和推送。
  3. 用途:Registry 用于镜像的集中存储和分发,尤其适合于在多台 Docker 主机间共享镜像。
  4. 共享和分发:Registry 使镜像的共享和分发变得容易。团队成员可以拉取所需的镜像,或将新镜像推送到 Registry 中。
  5. 版本控制:Registry 通常提供版本控制功能,允许用户为镜像指定不同的标签(tags),方便管理和部署不同版本的镜像。
  6. 安全性:本地 Registry 可以配置认证和加密传输,增加安全性。
  7. 私有镜像:Registry 允许存储私有镜像,这些镜像不会公开到公共仓库,适合包含敏感信息或专有应用的场景。
可以推送到本地仓库(Local Docker Registry):

在推送镜像到本地仓库之前,你需要给你想要推送的镜像打上标签,指向你的本地仓库地址。例如,如果你想要推送 Ubuntu 镜像到本地仓库,你可以这样标记:

docker tag ubuntu:latest localhost:5000/ubuntu:latest
  • docker tag:Docker CLI 的命令,用于给镜像设置一个新的标签。
  • ubuntu:latest:这是要标记的原始镜像的名称和标签。在这个例子中,ubuntu 是镜像的仓库名,而 latest 是该仓库下的一个标签,通常表示最新版本的镜像。
  • localhost:5000/ubuntu:latest:这是新标签的完整名称,包括了镜像仓库的地址、仓库名、以及新的标签。在这个例子中:
    • localhost:5000:指定了本地 Docker Registry 服务的地址和端口。这里假设 Registry 服务运行在本地宿主机的 5000 端口上。
    • ubuntu:这是新标签中使用的仓库名,它与原始镜像的仓库名保持一致,但可以根据你的本地仓库结构进行更改。
    • latest:这是新标签中使用的标签名,它与原始镜像的标签保持一致。你也可以选择使用不同的标签名,如 v1stable 等,以区分不同的镜像版本。
推送到本地仓库
docker push localhost:5000/ubuntu:latest
可以推送到远程仓库(Docker Registry):

关于远程仓库

在使用 docker push 镜像名 命令时,通常需要指定一个远程仓库(repository),这是用来存放你的 Docker 镜像的远程服务器。远程仓库可以是 Docker Hub,也可以是任何其他兼容 Docker 的容器镜像仓库,比如 Google Container Registry、Amazon Elastic Container Registry (ECR)、Harbor、JFrog Artifactory 等。

当你使用 docker push 命令推送镜像时,如果没有指定仓库的完整路径,Docker 默认会将其推送到 Docker Hub 上的仓库。仓库的完整路径格式通常是 仓库名/镜像名:标签

例如,如果你想要推送一个名为 my-ubuntu 的镜像到 Docker Hub 上的 myusername 仓库,并使用 latest 作为标签,你应该运行:

docker push myusername/my-ubuntu:latest

在这个命令中:

  • docker push 是 Docker CLI 的命令,用于将本地镜像推送到远程仓库。
  • myusername/my-ubuntu:latest 是要推送的镜像的完整仓库路径。其中 myusername 是 Docker Hub 上的用户名,my-ubuntu 是镜像名,latest 是标签。

如果你没有特别指定仓库名和标签,Docker 默认会使用当前目录下 Dockerfile 中的 FROM 指定的基础镜像名,以及默认的 latest 标签。

在推送镜像之前,你需要确保已经通过 docker login 命令登录到了远程仓库,否则 Docker 无法将镜像推送到远程服务器。

docker操作

几乎不用,会影响所有正在run的容器。

启动docker
sudo systemctl start docker
拷贝文件

例如,从当前目录拷贝一个文件到名为 my_container 的容器内

docker cp /path/on/host my_container:/path/in/container

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值