镜像 image
# 查看本机中所有的 docker 镜像
docker images
# 删除镜像
docker rmi 镜像id
# 删除所有的镜像
# 在 Windows 中,需在 Git Bash 或 Bash for Windows 中执行该 Linux 命令
docker rmi $(docker images -q)
# 搜索镜像(默认从 Docker Hub 仓库)
docker search 镜像关键字
# 下载镜像(默认从 Docker Hub 仓库)
docker pull 镜像名:版本号
# 导出镜像
docker save -o 导出的镜像文件.tar 镜像名:版本号
# 导入镜像
docker load -i 镜像文件.tar
# 给镜像打标签
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 上传镜像
docker push [OPTIONS] NAME[:TAG]
# 查看镜像的详细信息
docker inspect [OPTIONS] NAME|ID
容器 container
# 查看正在运行的容器
docker ps
# 查看所有的容器(包括未运行的)
docker ps -a
# 停止、启动、重启某个容器,stop 会直接杀死对应的进程。
docker stop|start|restart 容器id|容器名
# 停止、启动、重启所有的容器
# 在 Windows 中,需在 Git Bash 或 Bash for Windows 中执行该 Linux 命令
docker stop|start|restart $(docker ps -a -q)
# 删除容器(需先停止容器,除非使用 -f 强制删除)
docker rm 容器id|容器名
# 删除所有的容器(先停止运行)
docker rm $(docker ps -a -q)
# 基于镜像构建容器并运行
docker run [OPTIONS] IMAGE
# 查看容器运行的日志。 -f 选项可持续追踪日志
docker logs 容器id|容器名
# 进入容器内部
docker exec -it 容器id|容器名 bash
docker exec -it 容器id|容器名 /bin/bash
docker run
示例一
以 nginx:1.23 镜像来创建并运行容器,容器被命名为 my-nginx
docker run --name my-nginx -d -p 8080:80 nginx:1.23
- docker run 表示创建并运行容器。
- –name 指定容器的名称。
- -d 表示后台运行。
- -p 8080:80 指定端口映射。8080 是宿主机的端口,80 是容器提供的服务的端口。端口映射是为了将容器的端口暴露出去,以便对外提供服务。
- nginx:1.23 表示从哪个镜像创建容器。如果没有指定 tag(1.23),默认是 latest。
说明: 创建容器时,会先从本地查找是否有指定的镜像,如果没有,就自动从远程仓库下载。
示例二
docker run --name my-redis -d -p 6379:6379 -v /host/dir:/data redis redis-server --save 60 1
- docker run 表示创建并运行容器
- –name my-redis 指定容器的名称。
- -p 6379:6379 指定端口映射。将宿主机的端口和容器的端口进行映射。
- -v /host/dir:/data 指定目录映射。将宿主机的 /host/dir 目录映射(挂载)到容器内部的 /data 目录。
- redis 表示从 redis:latest 镜像创建容器实例。
- redis-server --save 60 1 表示设置 redis-server 的持久化机制(RDB)。
docker exec
示例三
进入指定的容器内部,在交互式终端执行 bash 命令
docker exec -it my-nginx bash
- docker exec 表示进入容器内部,执行一个命令。
- -it 表示在容器内部创建一个标准输入输出的交互式终端,以便与容器持续交互。
- my-nginx 要进入的容器的名称
- bash 进入容器后执行的命令。bash 是 linux 的 shell 交互命令。
一般不推荐在容器内部直接修改文件,因为这些修改只是临时的,一旦容器重启,修改的内容就会丢失。除非做了映射。
数据卷 volume
数据卷可以解决以下问题:
- 容器内的文件(数据或配置)不方便修改的问题。
- 数据不可复用的问题。因为容器内的修改默认对外是不可见的,对新创建的容器不可复用,容器一旦重启,所有修改都会丢失。
前提是数据卷要与容器内的目录进行映射。
当然,除了数据卷的映射外,通过目录或文件的映射,也能解决上述问题。
数据卷 volume 是一个虚拟目录,指向宿主机的某个目录(挂载点)。
docker volume [command]
docker volume 是一个数据卷管理命令。它可以执行一系列数据卷相关的操作命令。
- create 创建一个数据卷。会自动将数据卷挂载到宿主机的某个目录(可通过 inspect 命令查看)
- inspect 查看数据卷的详细信息,可显示数据卷在宿主机的挂载点。
- ls 列出所有的数据卷
- prune 删除所有未使用的数据卷
- rm 删除一个或多个指定的数据卷
# 创建数据卷 html
docker volume create html
# 查看数据卷的详细信息
docker volume inspect html
# 列出所有的数据卷
docker volume ls
示例三
docker run --name my-nginx -d -p 8080:80 -v html:/usr/share/nginx/html nginx:1.23
- -v html:/usr/share/nginx/html 表示将数据卷 html 与容器内部的 /usr/share/nginx/html 目录进行映射(挂载)。如果数据卷不存在,会自动创建。
-v 参数,除了可以实现数据卷与容器内部的目录映射。还可以实现目录与目录的映射,文件与文件的映射。
- -v 宿主机目录:容器内目录
- -v 宿主机文件:容器内文件
示例四
docker run --name mysql -p 3306:3306 \
-v /my/datadir:/var/lib/mysql \
-v /my/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
- -v /my/datadir:/var/lib/mysql 表示将宿主机的 /my/datadir 目录映射到容器内的 /var/lib/mysql 目录
- -v /my/my.cnf:/etc/mysql/my.cnf 表示将宿主机的 /my/my.cnf 文件映射到容器内的 /etc/mysql/conf.d/my.cnf 文件
- -e MYSQL_ROOT_PASSWORD=123456 表示设置环境变量 MYSQL_ROOT_PASSWORD 的值,也就是 root 用户的密码
- -d 表示后台运行