Docker常用指令

162 阅读3分钟

镜像

拉取镜像

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

构建镜像

docker build [OPTIONS] PATH | URL | -

docker build -t containerName:tag .

常用OPTIONS

  • --tag , -t 打tag
  • --file, -f 指定dockerfile的名称,默认是Dockerfile
  • --no cache 构建镜像的时候不使用缓存构建
  • --platform 指定系统平台,例如可以指定platform为amd64
  • --pull 总是拉取最新的镜像

删除镜像

docker rmi <镜像Id>

导出镜像,将镜像导出为归档文件

docker save 

导入镜像

docker load

Dockerfile构建镜像

  • FROM制定基础镜像
  • RUN执行命令
  • COPY复制文件
  • ADD更高级的复制文件
  • CMD容器启动命令
  • ENV设置变量环境
  • EXPOSE暴露端口

容器

启动容器

docker run [镜像名/镜像ID]

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用的OPTIONS

  • -i stdin(standard input)打开标准输入
  • -t pseudo-tty分配一个虚拟终端 pseudo:伪。tty:teletypewriter电传打印机,引申为虚拟控制台。
  • --name 给容器分配一个名字
  • --rm 退出容器容器后,自动删除容器
  • -p , --publish 端口映射 宿主端口:容器端口
  • -d , --detach 容器后台运行

启动容器并打开一个虚拟终端,/bin/sh /bin/bash

docker run -it IMAGE_NAME /bin/sh

进入运行的容器

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用的OPTIONS

  • -i stdin(standard input)打开标准输入
  • -t pseudo-tty分配一个虚拟终端 pseudo:伪。tty:teletypewriter电传打印机,引申为虚拟控制台。

清理已经停止的容器

docker container prune

其他

查看容器日志

docker logs [OPTIONS] CONTAINER

常用的OPTIONS

  • --since 显示某个开始时间的日志
  • --timestamps , -t 显示时间戳
  • --tail , -n 显示最后日志的条数
  • --follow , -f 实时输出日志
  • --details 输出详细信息
  • --until 显示某个时间戳之前的log,或者某个时间段(eg:42m,42minutes)之前的log

跨架构构建镜像,并推送远程

在本地尝试成功后,可以试着把镜像推送到远程仓库,云服务器才可以拉取到镜像。通过build指令构建一个镜像,镜像可以直接命名为 dockerName/containerName:tag,例如dongzhiqin/amd64-nginx:v2.0.

docker build --platform linux/amd64 -t dongzhiqin/amd64-nginx:v2.0 .
//由于我使用的是arm架构的芯片,所以需要特别指定一下platform为amd64,否则默认构建成arm64的镜像
// 目前mac m1环境docker也可以跑amd64的镜像,但是amd架构环境下docker不能跑arm64的镜像

//docker build --platform linux/arm64 -t [name]:latest . // 如果远程服务器是arm架构就使用这个指令

如果不需要指定amd64架构重新构建镜像的,可以通过打tag的方式,把原有的镜像重新命名,总之就是要使用docker登陆的名称+/镜像名[+/tag],否则push不成功。

docker tag [镜像名[:tag]] [可以推送到仓库的镜像名:dockerName/imageName:tag]

执行push

docker push dongzhiqin/amd64-nginx:v2.0

推送成功后登陆远程服务器,拉取镜像执行运行

docker pull docker.io/dongzhiqin/amd64-nginx:v2.0
// docker pull dongzhiqin/amd64-nginx:v2.0  // 如果没有指定仓库地址会有交互提示你选择仓库

docker pull命令格式是

docker pull [选项]  [Docker 仓库地址[:端口号]/]仓库名[:标签]
  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像

参考资料

docker官方文档

docker-compose