Docker

2022/10/11 soft 共 2934 字,约 9 分钟

容器是 Docker 中运行的实例化镜像,可以将镜像与容器的关系类比为类(class)与对象(object)的关系。镜像是一个包含了运行应用程序所需的一切组件(代码、运行时环境、库等)的静态模板,而容器则是在镜像的基础上创建的动态实体。容器可以被启动、停止、删除,每个容器都是相互隔离的运行环境。

Docker常用命令

# 将当前用户添加到该组,登出并重新登录以使更改生效,后续可以不必再用sudo
sudo usermod -aG docker $USER

# 查看Docker版本信息
docker version

# 查看docker简要信息
docker -v

# 检索镜像
docker search 关键字

# 拉取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

# 列出镜像
docker image ls
docker images

# 运行
docker-compose up -d     # or `docker compose up -d` based on your docker-compose version

# 版本升级
docker-compose pull && docker-compose up -d     # Or `docker compose up -d`

容器操作命令

请注意,执行这些命令之前,请确保您具有适当的权限来执行 Docker 命令。

# 查看运行的容器列表
docker ps

# 停止一个正在运行的容器
docker stop <container_id_or_name>

# 停止所有正在运行的容器
docker stop $(docker ps -q)

停止包含 “immich” 关键词的所有容器,您可以使用以下命令:

docker stop $(docker ps -q -f name=immich)

这个命令使用了 docker ps 命令的 -q 选项来仅返回容器的 ID, -f 选项用于过滤容器,并通过指定 name=immich 来只返回名称包含 “immich” 的容器。然后,这些容器的 ID 将作为参数传递给 docker stop 命令,以停止它们。

请注意,这个命令会停止所有名称包含 “immich” 的容器,而不仅仅是容器名称中包含 “immich” 的部分。

要重新启动已停止的容器,您可以使用以下命令:

docker start $(docker ps -aq -f status=exited -f name=immich)

这个命令使用了 docker ps 命令的 -aq 选项来返回所有容器的 ID,-f 选项用于过滤容器,并通过指定 status=exitedname=immich 来只返回已停止的名称包含 “immich” 的容器。然后,这些容器的 ID 将作为参数传递给 docker start 命令,以重新启动它们。

同样地,这个命令会重新启动所有已停止的、名称包含 “immich” 的容器,而不仅仅是容器名称中包含 “immich” 的部分。

Windows上使用docker

以下均为 Windows 操作系统上的 docker 安装使用方法,区别是 Docker Desktop on WindowsWSL Docker,最终效果一样,只是一个有图形界面一个没有。均需要先安装 wsl,可以参考:在Windows上使用VisualStudio配合WSL进行Linux程序开发 — 朱皮特的烂笔头

安装

Docker Desktop on Windows

  1. 下载安装 Docker Desktop on Windows
  2. 安装 wsl
  3. 运行 Docker Desktop on Windows

WSL Docker

  1. 安装 wsl

  2. wsl 中安装 docker

    # 安装 docker
    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh
       
    # 安装完成后输入命令
    sudo groupadd docker
    sudo gpasswd –a $USER docker
    newgrp docker			# 如果不行,可以在前面执行一句: 
       
    # 启动 docker
    sudo service docker start
       
    # 检查 docker 是否安装成功,返回:Docker is running 说明正常运行
    sudo service docker status
    

局域网访问Windows 10 WSL 的网络服务

应用场景:在 Windows 10 系统上 WSL 里运行的服务端程序,需要在局域网内访问(例如手机)。如果手机与Windows宿主机不在同一个网段,例如手机使用路由器WiFi,但是宿主机使用光猫直连,则可以配置路由器的上网模式为桥接模式(Bridge AP),让光猫来统一给设备分配IP地址,这样所有设备就都在一个网段了,配置完成后记得重启路由器。

解决办法:在 Windows 宿主机上做端口映射

假定有以下信息:

  • Windows宿主机的IP:192.168.1.2
  • WSL服务的IP及端口:172.23.192.21:2283

打开 powershell,输入命令:

# 端口映射,将对本机 ip:8080 的访问请求转发到 172.23.192.21:2283
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 protocol=tcp listenport=8080 connectport=2283 connectaddress=172.23.192.21

# 查看端口映射情况
netsh interface portproxy show all

# 配置防火墙添加允许入站规则
New-NetFirewallRule -DisplayName "Allow Inbound TCP Port 8080" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080

# 如需删除配置使用如下命令:
netsh interface portproxy show v4tov4
netsh interface portproxy delete v4tov4 listenport=8080
Remove-NetFirewallRule -DisplayName "Allow Inbound TCP Port 8080"

docker更新提速

docker应用需要更新的时候发现速度超级慢,经常性就失败了,为了加快更新速度,可以按照如下方式操作。

进入WSL,输入以下命令:

cd /etc/docker
touch daemon.json
chmod 777 daemon.json

修改文件 \\wsl.localhost\Ubuntu\etc\docker\daemon.json(在Windows上可以直接打开文件夹:\\wsl.localhost\Ubuntu\etc\docker),输入以下内容:

{
    "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}

最后输入如下命令重启服务:

systemctl daemon-reload
systemctl restart docker

重启服务需要稍等片刻,然后再更新就快很多了。

文档信息

Search

    Table of Contents