DOCKER
基本命令 #
BASE #
提交镜像
docker commit -a "xhsgg12302@gmail.com" -m "with requirements.txt" 44f357ee68bc eli/anaconda3:v1.0
标签镜像docker tag bad7184c3c60 gitlab.pixdaddy.com:5050/library/eclipse-temurin:17.0.2_8-jre-3.8.18-python-alpine3.17-with-pip-deps
加载镜像docker build -t me/venvs:v1.0 -f DK-venv .
docker save me/venvs:v1.0 -o ./venvs.tar
、docker save me/venvs:v1.0 > ./venvs.tar
docker load -i /path/tmp/docker-build.tar
删除容器docker ps -qa | xargs -n 1 docker rm -f
这将列出所有没有被任何标签或容器引用的镜像。这些镜像通常被称为悬空镜像,因为它们没有被命名或引用,而且也没有被垃圾回收机制删除。
https://docs.docker.com/engine/reference/commandline/images/#filterdocker image ls -f "dangling=true"
删除所有没有被标记或容器引用的悬空镜像docker image prune
查找标记为 NONE 的镜像。运行以下命令:docker images | grep '<none>' | awk '{print $3}'
删除标记为 NONE 的镜像。使用以下命令删除这些镜像:docker rmi $(docker images | grep '<none>' | awk '{print $3}')
启动时 去除基础镜像的entryponit 或者在Dockerfile中 写入 ENTRYPOINT []docker run -d --entrypoint='' ff3b94479b5d /bin/sh -c "npm i; xvfb-run --server-args='-screen 0 1280x800x24 -ac -nolisten tcp -dpi 96 +extension RANDR' npm run dev"
docker 不使用缓存构建镜像docker build -t **:1.0 --no-cache -f Dockerfile .
docker 清理构建缓存docker builder prune
、或者更深层次的docker system prune -a
DAEMON-CONFIG #
CREDENTIAL #
可以使用命令
file $(which docker-credential-desktop)
查看工具位置ope payloadoutput list {“ https://gitlab.pixdaddy.com:5050”:“w****”,“ https://harbor.meixiu.mobi”:“zh****”,“ https://registry.cn-hangzhou.aliyuncs.com”:“ 5127****@qq.com”} get https://registry.cn-hangzhou.aliyuncs.com CTRL+D {“ServerURL”:“ https://registry.cn-hangzhou.aliyuncs.com”,“Username”:“ 5127***@qq.com”,“Secret”:"***"} store {“ServerURL”:“ https://index.docker.io/v1","Username":"david","Secret":"passw0rd1"} CTRL+D erase https://index.docker.io/v1 SEARCH #
1.) 通过api使用 sha256进行镜像搜索,貌似不太准确[ 本地sha256可能和hub上面的不一样:参见],但是可以作为验证的一种方法。
访问:官方的 repository 使用library
.
https://registry.hub.docker.com/v2/repositories/library/zookeeper/tags/?page=1&page_size=100
https://hub.docker.com/v2/repositories/library/zookeeper/tags/?page=1&page_size=100
https://registry.hub.docker.com/v2/repositories/yidadaa/chatgpt-next-web/tags/?page=1&page_size=100
2.) 另外一种就是野生的方法,直接使用grep看运气:docker image inspect yidadaa/chatgpt-next-web | grep -i version
Dockerfile #
Tip
Dockerfile 参考 .dockerignore
制作镜像的时候可以删除没用的文件,或者通过.dockerignore
进行排除,不然体积比较大,不便传输。
* 使用 rm 删除的时候可以先进行确认
删除target、build、out:find ./ -type d -a \( -name 'target' -o -name 'build' -o -name 'out' \) -exec rm -rf {} \;
删除 log、class 文件:find ./ -type f -a \( -name '*.log' -o -name '*.class' \) -exec rm -f {} \;
删除 log 目录:find ./ -type d -a -name 'log' -exec rm -rf {} \;
删除非 git 中的所有 logs:find ./ -type d -a ! -path '*.git*' -a -name 'logs' -exec rm -rf {} \;
删除 target/*.war:find ./ -type f -a -name '*.war' -a -path '*target*' -exec rm -f {} \;
Caution
macOS 构建的时候出现错误:
no space left on device
。 参考解决办法Dockerfile
.dockerignore
使用样例 #
常用镜像 #
三方镜像平台(多个防止丢失) #
name site prefix aliyun https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard registry.cn-hangzhou.aliyuncs.com
huawei https://console.huaweicloud.com/swr/?region=cn-north-4#/swr/dashboard swr.cn-north-4.myhuaweicloud.com
163yun https://c.163yun.com/dashboard#/ccr/list … 存储安装包 #
简要说明 #
将一些日常工作中用到的软件或者破解工具以及流程做个记录,利用公共仓库进行存储,使用的时候直接docker拉取镜像运行,然后挂载容器内文件到本地,直接进行安装。
流程 #
a).构建Dockerfile #
添加entrypoint.sh 是因为需要容器启动后执行移动相应文件到挂载目录的操作
b).build镜像 #
$ docker build -f .\Dockerfile -t busybox-with-scrt:8.x [--network host .] .
$ docker build -f Dockerfile -t wechat-chatgpt-base:v1.0 --network host --build-arg "HTTP_PROXY=http://192.168.164.191:7890" --build-arg "HTTPS_PROXY=http://192.168.164.191:7890" .
$ docker run -it -e http_proxy=192.168.164.191:7890 -e https_proxy=192.168.164.191:7890 demo:v1.0
c).推送镜像 #
Caution
如果推送成功在刷新网页看不到推送的镜像的话,有可能是地区选择有问题。
移动容器文件到宿主机 #
项目打包 #
简要说明 #
将原来的项目通过docker build 打包成一个镜像,如果需要查看API,或者说项目功能的话就不用直接打开IDEA查看了。
方式1: (把依赖组件(redis,zk,mysql)编排,一次性构建) #
基于依赖镜像构建,比如:
基于docker compose 进行编排
docker-compose.yml
基本命令
方式2: (分开单独打包) #
创建docker网络
单独启动redis
$ docker run -d -p 6379:6370 --name rds6379 --network demo-net [--network-alias redis] redis:6.2.7
单独启动zookeeper
$ docker run -d -p 2181:2181 --name zk2181 --network demo-net [--network-alias zookeeper] zookeeper:3.6.3
使用centos加入网络环境ping检测网络环境是否正常
$ docker run -it --name test-centos --net demo-net centos
构建springboot镜像
启动镜像启动镜像并检查是否正常
$ docker run -d -p 9017:9017 --name insurance-center --net demo-net insurance-center:5.0.1
数据卷容器(MYSQL) #
简要说明 #
将以往的mysql数据库中的数据目录
datadir
进行保存,制作成数据卷容器,方便保存及后续供mysql镜像挂载流程 #
获取 MySQL datadir目录中的数据
第一种可以直接获取到存储数据的mysql
${datadir}
目录。第二种是根据文件进行导入的,如下:构建Dockerfile
build 数据卷镜像
$ docker build -t mysql-data:1.0.0 -f Dockerfile .
push到仓库
启动数据卷容器
$ docker run -dit --rm --name mysql-data mysql-data:1.0.0
挂载数据卷容器启动MySQL服务
使用docker内部
mysql客户端
进行测试docker run -it --rm --network=host mysql:5.6.49 mysql -h 127.0.0.1 -u root -P 3336
具体使用 #
搭建chatgpt #
通过token调用openai或别的厂商的API的typescript的前端项目,并非部署模型直接生成。
reference #
安装 #
参考链接:https://docs.docker.com/engine/install/ubuntu/https://zhuanlan.zhihu.com/p/628536643https://help.aliyun.com/document_detail/51853.html
- Reference
- https://linux.how2shout.com/how-to-install-cuda-on-ubuntu-20-04-lts-linux/
- https://askubuntu.com/questions/1398568/installing-python-who-is-deadsnakes-and-why-should-i-trust-them
- https://itsfoss.com/add-apt-repository-command-not-found/
- https://gitlab.com/nvidia/container-images/cuda/blob/master/dist/12.2.0/ubuntu2004/base/Dockerfile
- https://stackoverflow.com/questions/58269375/how-to-install-packages-with-miniconda-in-dockerfile
Reference #
- https://docs.docker.com/engine/reference/run
- https://cr.console.aliyun.com/cn-hangzhou/instance/repositories
- docker volume 与bind的区别 和注意事项
- https://stackoverflow.com/questions/30137135/confused-about-docker-t-option-to-allocate-a-pseudo-tty