文章目录
前言
本篇文章主要汇总了项目开发过程中常用的docker
命令,以便后续查询。
1. docker镜像篇
1.1 拉取镜像
只需要给出镜像的名字和标签,就能在官方仓库中定位一个镜像,命令的格式如下:
docker [image] pull repository[:<tag>]
# Ubuntu镜像的拉取
# docker image pull ubuntu:latest
# docker pull ubuntu:20.04
# docker pull ubuntu
# 加载本地的镜像文件
docker load -i ubuntu_18.04.tar
# 导出镜像
docker save -o ubuntu_18.04.tar ubuntu:18.04
一般来说,镜像的
latest
标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest
标记的镜像。
1.2 查看镜像信息
列出本地主机上已有镜像的基本信息:
docker images [ls]
REPOSITORY: 来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像
TAG: 镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容
IMAGE ID: 镜像唯一标识,如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已
CREATED: 镜像最后的更新时间(创建时间)
SIZE: 镜像大小(优秀的镜像往往体积都较小)
为了方便在后续工作中使用特定镜像,还可以使用docker tag
命令来为本地镜像任意添加新的标签:
docker tag ubuntu:latest myubuntu:latest
# 此时从本地主机上的镜像信息中就可以看到多了一个myubuntu:latest标签的镜像
1.3 搜寻镜像
使用docker search
命令可以搜索Docker Hub
官方仓库中的镜像:
# 搜索官方提供的带nginx关键字的镜像
docker search --filter=is-official=true nginx
# 搜索所有收藏数超过4且关键词包括tensorflow的镜像
docker search --filter=stars=4 tensorflow
# -f,--filter:过滤输出内容;
# --format:格式化输出内容;
# --limit:限制输出结果个数,默认为25个;
# --no-trunc:不截断输出结果
1.4 删除镜像
当不再需要某个镜像的时候,可以使用docker rmi
或docker image rm
命令来删除该镜像:
# 通过tag来删除镜像
docker rmi name:tag
# 通过id来删除镜像
docker rmi image-id # 会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身
# -f,-force:强制删除镜像,即使有容器依赖它(不建议使用)
# -no-prune:不要清理未带标签的父镜像
如果被删除的镜像上存在运行状态的容器,那么删除操作不会被允许(默认)。通常并不推荐使用-f
参数来强制删除一个存在容器依赖的镜像。正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。
docker ps # 查看本机上运行中的容器
docker ps -a # 查看本机上存在的所有容器(包括已经停止运行的)
docker stop cotianername/containerid # 停止容器
docker start cotianername/containerid # 启动容器
docker rm cotianername/containerid # 删除容器
docker exec -it containername/containerid /bin/bash # 进入
exit # 退出容器
1.5 推送镜像
# 将本地镜像推送到服务器
# 登录镜像服务器
docker login 服务器域名(默认是docker hub)
# 给镜像打标签
docker tag 镜像ID 服务器域名/镜像名:tag
# 推送镜像
docker push 服务器域名/镜像名:tag
2. docker容器篇
2.1 创建并启动容器
可以使用docker [container] create
命令新建一个容器:
# -it 交互式
docker create -it ubuntu:latest
使用docker [container] create
命令新建的容器处于停止状态,可以使用docker [container] start
命令来启动它:
docker start CONTAINER-ID
当然,也可以直接使用docker [container] run
命令来新建并启动容器:
# 后台模式启动容器,并输出`Hello world`
docker run ubuntu:latest /bin/echo 'Hello world'
# 等价于先执行docker [container] create命令,再执行docker [container] start命令
# 交互式
docker run -it ubuntu:18.04 /bin/bash
# -t: 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
# -i: 让容器的标准输入保持打开
# 更多的命令选项可以通过man docker-run 命令来查看
2.2 查看容器输出
要获取容器的输出信息,可以通过docker [container] logs
命令:
docker logs CONTAINER-ID
# -details:打印详细信息;
# -f,-follow:持续保持输出;
# -since:输出从某个时间开始的日志;
# -tail:输出最近的若干日志;
# -t,-timestamps:显示时间戳信息;
# -until:输出某个时间之前的日志
2.3 停止容器
可以使用docker [container] pause
命令来暂停一个运行中的容器:
docker pause CONTAINER-ID # 处于paused状态
# 恢复到运行状态
docker unpause CONTAINER-ID
使用docker [container] stop
来终止一个运行中的容器:
docker stop CONTAINER-ID # 处于stop状态
# 此时,执行docker container prune命令,会自动清除掉所有处于停止状态的容器
处于终止状态的容器,可以通过docker [container] start
命令来重新启动:
docker start CONTAINER-ID
# docker [container] restart命令会将一个运行态的容器先终止,然后再重新启动
2.4 进入容器
在使用-d
参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。这个时候如果需要进入容器进行操作,推荐使用官方的attach
或exec
命令。
docker [container] attach CONTAINER
docker [container] exec CONTAINER COMMAND(推荐)
2.5 删除容器
可以使用docker [container] rm
命令来删除处于终止或退出状态的容器:
docker rm CONTAINER
2.6 更新容器(镜像)
如果在容器中新安装了某些库或软件,下次新运行时就不需要再次安装了,可以使用docker commit
命令来更新镜像:
docker commit CONTAINER-ID NEW-IMAGE-NAME
2.7 查看容器(镜像)元数据
即使启动时不挂载目录,docker容器运行时也会在主机上有一个运行目录,一般是在/var/lib/docker
。使用inspect
指令可以查看容器或镜像的详细信息,包括配置、网络设置、挂载的卷等。
docker inspect CONTAINER-ID
# 比如neo4j异常关闭时,需要删除对应的pid文件才能重新启动,这个时候就需要使用inspect找到容器运行时在主机的缓存地址(UpperDir)
3. 关于docker run
docker run
表示创建一个新的容器并运行一个镜像。
docker run [option] image-name [the first command to execute after entering the container]
option | desc |
---|---|
-d | 在后台运行容器并打印容器 ID |
-p | 指定端口映射 local port:docker port |
-P | 随机端口映射 |
--name | 为容器指定一个名字 |
-i | 以交互模式运行容器 |
-t | 容器启动后会进入其命令行 |
-it | 即-i 与-t 的组合,容器创建就能登录进去,即分配一个伪终端 |
-u | 用户名 |
-v | 文件目录映射 |
-w | 容器内的工作目录 |
docker
官方镜像库----> dockerhub
4. Dockerfile
Dockerfile
是一个包含一系列命令的文本文件,用来创建Docker
镜像。
FROM python:3.8 # 定义基础镜像
MAINTAINER "chatGLM" # 镜像的作者
COPY configs /chatGLM/configs # 复制本地的configs目录到镜像
COPY webui.py /chatGLM/ # 复制本地的webui.py文件到镜像
WORKDIR /chatGLM # 设置工作目录(切换到镜像中的指定路径,可以代替cd指令)
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn # 执行pip指令
CMD ["python", "-u", "webui.py"] # 指定在启动时需要执行的命令
在Dockerfile
所在目录执行docker build .
来构建镜像。
docker build -f your-dockerfile -t xxx:latest .