外链资料:
祖传代码:
Docker和pip (python)、apt (debian)之类的工具一样,都是需要连接网络拉取数据的,曾经因为国内的网络,我也研究过很长时间的类似「如何自己从源码编译安装pip包」,「如何保存Linux软件的离线安装包」,「如何自己搭建软件源」之类的问题,就怕没办法连接网络或者下载失败。但是研究这些问题,还不如想办法解决自己的网络问题。实用主义至上,不需要没有必要的问题浪费时间(特别是自己没有兴趣的时候)
镜像:Image
# 查看(本地)现有的镜像列表 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker images REPOSITORY TAG IMAGE ID CREATED SIZE dj 1.0.0 9de00d187cd2 12 hours ago 274MB diygod/rsshub latest a4da8b424ebd 15 hours ago 1.46GB redis alpine 987c376c7276 5 weeks ago 98.8MB couchbase community-7.6.2 9710241dec75 3 months ago 1.63GB browserless/chrome latest 57d19e414d9f 19 months ago 4.59GB # 删除一个镜像(根据ID) ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker image rm a4da8b424ebd Untagged: diygod/rsshub:latest Deleted: sha256:a4da8b424ebd60adfb9418030e6751c26b1d8f7f1029547e7904bbbacb71d7fa # 拉取一个镜像(默认是从DockerHub拉取),需要镜像的name和tag ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker pull hello-world:linux linux: Pulling from library/hello-world 198f93fd5094: Pull complete Digest: sha256:53cc1017c16ab2500aa5b5367e7650dbe2f753651d88792af1b522e5af328352 Status: Downloaded newer image for hello-world:linux docker.io/library/hello-world:linux
一条典型的启动命令:
docker run -d --name musicplayer \ -p 8080:8080 -v <本机缓存目录>:/var/www/html/cache \ quchaonet/musicplayer:arm64
其他常用参数:
AI:
要进入正在运行的 Docker 容器的命令行界面,你可以使用 docker exec 命令。通常,我们会配合 -it 参数来启动一个交互式终端。这里的 -i 表示交互式操作,-t 表示分配一个伪终端。
以下是典型的使用方式:
docker exec -it <容器ID或容器名> /bin/bash
一个容器,已经在运行中了,还可以进入交互界面吗?当然可以。一个容器相当于一个Linux系统,这个系统当然是可以同时开启/连接多个Terminal/Shell的,并不是「只能在run的时候才能进入交互界面」
如何理解端口映射?字面意思
如何理解卷(地址)映射?字面意思
关于端口/地址映射,不用想的太复杂
Docker compose是Docker自己的容器编排工具,经常用于启动容器,详细请参照下面的专题内容
docker-compose -f docker-compose.yaml up
# 查看正在运行中的容器 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 86ea1e9d4321 dj:1.0.0 "python manage.py ru…" 12 hours ago Up 12 hours 0.0.0.0:8001->8000/tcp # 停止容器 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker stop 86ea1e9d4321 86ea1e9d4321 # 开启容器 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker start 86ea1e9d4321 86ea1e9d4321 # 删除容器(需要首先停止容器) ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker rm 86ea1e9d4321 86ea1e9d4321
安装Docker Desktop,在Terminal可以使用docker命令
Network
# 查看现有的网络列表 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker network ls NETWORK ID NAME DRIVER SCOPE 3be19772c266 api_in_docker_cb_net bridge local 06a59e3b7869 bridge bridge local 3fc75fc1b7c2 host host local 86f1845909e8 none null local # 创建网络 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker network create test_net 01a4f1b4356882445a2083eb04bbbb49ea77917bc035c4ab56bba1aa7069c040 # 删除网络 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker network rm 01a4f1b43568 01a4f1b43568
Volume
# 查看现有卷 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker volume ls DRIVER VOLUME NAME local api_in_docker_cb_var local rsshub_redis-data # 创建卷 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker volume create test_data test_data # 删除卷 ar-zhonghui.ge@JP-FW7WV7P9PW ~ % docker volume rm test_data test_data
官方镜像仓库
可以 pull / push
自己创建的 Image 在 push 之前,需要先打好 tag (docker tag)
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
<image_name>:<version / tag>
数据库需要持久化存储数据,所以容器化的时候可能有一些特殊的地方要注意
TODO
Docker Hub是官方的镜像库,但是(应该)也可以在第三方的地址拉取镜像
docker pull registry.hf.space/bhaskartripathi-pdfchatter:latest