镜像
拉取镜像
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,也就是官方镜像