docker镜像相关命令
- 查看镜像:
docker images
- 删除镜像:
docker rmi 镜像名称:标签 / 镜像ID
- 搜索镜像:
docker search 镜像名称
- 拉取镜像:
docker pull 镜像名称:标签
如果不加标签默认拉去latest版本。
dockers容器相关命令
查看容器
查看正在运行的容器:
docker ps
查看所有容器:
dockers ps -a / --all
查看最后一次运行的容器:
docker ps -l
查看停止的容器:
docker ps -f status=exited
查看最近创建的5个容器:
docker ps -n 5
创建并启动容器
docker run [options] 镜像名称
-i 表示运行容器
-t 表示启动容器后进入其命令行
--name 表示为创建的容器命名
-d 表示创建一个守护式容器在后台运行
-p 表示端口映射,前面是主机端口,后面是容器端口
-P 表示随机使用主机端口与容器内暴露的端口映射
创建容器并进入容器:
docker run -it --name 自定义容器名称 -p 主机端口号:容器端口号 镜像名称
守护方式创建容器:
docker run -di --name 自定义容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称(或者容器ID) /bin/bash
启动、停止容器
docker start 容器名称:标签
docker stop 容器名称:标签
删除容器
docker rm 容器名称:标签
注:删除容器时容器必须是停止状态。
文件拷贝
从主机拷贝到容器:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
从容器拷贝到主机:
docker cp 容器名称:容器文件或目录 主机目录
目录挂载
类似于之前的端口,可以将容器的目录与主机的目录建立映射关系,这样就可以通过修改主机目录上的文件来影响容器内对应位置的文件。这个操作是双向的,可以实现备份。多个容器可以映射到同一个主机目录,某个容器被删除时,不会影响其他容器的数据。
指定目录挂载
docker run -v 主机目录:容器目录 镜像名称
可以使用docker inspect 容器名称 来查看容器所有的详细信息,在Mounts
一项中有目录挂载的配置信息。
匿名挂载:
匿名挂载只需要指定容器的目录即可,容器外对应的目录会在/var/lib/docker/volumes
中生成。
docker run -di -v 容器目录 --name 容器名称 镜像名称
可以查看volume数据卷信息:
docker volume ls
具名挂载
容器目录还是映射到主机的/var/lib/docker/volumes
中,只不过用户可以自己指定目录名称:
docker run -di -v 指定主机目录名称:容器目录名称 --name 容器名称 镜像名称
最后映射到/var/lib/docker/volumes/指定主机目录名称
中
数据卷只读或读写
只读:只能通过修改主机内容实现对容器的数据管理:
docker run -it -v /主机目录:/容器目录:ro 镜像名
读写:(默认)主机和容器可以双向操作:
docker run -it -v /主机目录:/容器目录:rw 镜像名
继承目录卷
首先开启一个指定挂载卷的容器:
docker run -di -v /主机目录:/容器目录 --name 容器名称1 镜像名称
然后开启一个新的容器,继承上一个容器的目录卷:
docker run -di --volumes-from 容器名称1 --name 容器名称2 镜像名称
查看目录卷信息
docker volume inspect 目录卷名称
查看容器IP
docker inspect 容器名称
在Networks
项中。
Dockerfile 相关指令
FROM: 表示构建的镜像基于哪个基础镜像
LABEL: 为构建的镜像添加标签信息,比如作者信息等
RUN: 表示构建镜像时需要运行的命令
ADD: 表示拷贝文件或目录到镜像中,可以是本地文件,也可以是url,且自带解压缩功能。
COPY: 类似于ADD,不支持下载和解压缩
EXPOSE: 暴露容器运行时的端口,可以指定是TCP还是UDP
ENV: 设置容器内环境变量
CMD: 启动容器时执行的shell命令
在Dockerfile中只能有一条CMD指令,如果设置了多条CMD,只有最后一条生效。如果创建容器时指定了命令,则CMD会被替代覆盖,例如,Dockerfile中是:
CMD echo “hello golang”
但是创建容器时的命令是:
docker run -it 镜像名称 echo “hello world”
那么就不会输出"hello golang"
,而是输出"hello world"
,CMD被覆盖了。
ENTRYPOINT: 类似于CMD,但是不会被覆盖。
WORKDIR: 为进入容器时设置一个工作目录
VOLUME: 指定容器挂载卷,一般不常见
使用Dockerfile创建镜像
Dockerfile文件没有后缀,首字母大写。
docker build -f 文件目录/Dockerfile -t 镜像名称 资源文件位置(Dockerfile中ADD拷贝的文件)
当资源文件与Dockerfile在同位置时,可以用.
表示:
docker build -f 文件目录/Dockerfile -t 镜像名称 .
镜像备份
镜像备份
docker save -o 目录/文件名字.tar 镜像名称
镜像恢复
docker load -i 目录/文件名字.tar
镜像迁移
上面两步就称为镜像迁移。