一、镜像操作

查看本地镜像

docker ps images

删除本地镜像

docker rmi nginx:lastest
#删除镜像需要先删除所有以此镜像生成的容器
#使用 -f 强制删除

修改镜像标签

docker tag nginx:latest harbor.example.com/base/nginx:1.20.0
#给指定镜像添加标签
#原有标签仍然存在

docker rmi -f harbor.example.com/base/nginx:1.20.0
#删除标签
#当一个镜像有多个tag时,删除指定的tag。
#当一个镜像只有一个tag时,此方法将会删除镜像!

查看镜像构建历史

docker history nginx:latest
#列出镜像构建历史及执行的具体命令

搜索镜像

docker search nginx --limit 100
#搜索镜像仓库中名为nginx的镜像
#默认只返回25行,使用--limit 100来指定返回的行数,最多100行。

拉取镜像

docker pull nginx:1.20.0
#从默认仓库拉取nginx:1.20.0版本的镜像

docker pull nginx
#未指定具体镜像版本时,默认拉取latest镜像

docker pull harbor.example.com/base/nginx:1.20.0
#从指定仓库拉取镜像(需要使用账号登陆仓库)

登陆仓库

docker login
#登陆docker官方hub.docker仓库,默认。
#根据提示输入账号与密码

docker login harbor.example.com
#登陆私有镜像仓库

推送镜像

docker push nginx:1.20.0
#推送镜像到hub.docker.com官方仓库

docker push harbor.example.com/base/nginx:1.20.0
#推送镜像到私有镜像仓库
#私有仓库中需要建立对应的项目,项目路径与镜像名称一致。

二、容器操作

查看本地容器

docker ps
#查看运行中的容器,非运行的容器不显示。

docker ps -a
#显示全部容器,包括非运行的容器。(常用)

删除本地容器

docker rm web-nginx
#删除容器名称为web-nginx的容器。
#删除容器前,需要先停止容器运行。

docker rm -f 72a6a93b890f
#删除CONTAINER ID为72a6a93b890f的容器。
#-f 强制删除
#使用强制删除,可以直接删除运行中的容器。

运行容器

docker run -dit centos
#运行一个centos容器
#docker会自动拉取所需镜像
#-d 后台运行容器。
#-i 以交互模式运行容器,即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
#-t 为容器重新分配一个伪终端

docker run -it centos
#创建centos容器,并以交互方式分配终端。
#容器创建后会直接进入容器命令行。
#因为没有使用-d参数退出容器后,容器将直接退出。

docker run -dit centos
#创建一个centos容器,并在后台运行。

docker run -it centos --rm
#创建一个centos容器,并直接进入容器。
#--rm 在退出容器后直接删除,此参数适合调试时使用。

停止、重启容器

docker stop b5f8c5d4e6b4
#停止b5f8c5d4e6b4容器

docker restart b5f8c5d4e6b4
#重启b5f8c5d4e6b4容器

进入容器

docker exec -it b5f8c5d4e6b4 /bin/bash
#进入容器b5f8c5d4e6b4,并执行/bin/bash

docker exec -it b5f8c5d4e6b4 /bin/sh
#进入容器b5f8c5d4e6b4,并执行/bin/sh

exit
#在容器内执行,则退出容器,回到宿主机。

复制文件

docker cp /usr/share/zoneinfo/Asia/Shanghai b5f8c5d4e6b4:/etc/localtime
#从宿主机复制文件到容器内
#复制时区配置文件,可修改容器内时间。

docker cp <container_id>:<container_path> <host_path>
docker cp b5f8c5d4e6b4:/etc/hosts /opt/
#从容器内复制文件到宿主机

三、数据卷操作

查看数据卷

docker volume ls
#查看本地所有数据卷

创建数据卷

docker volume create nginx-http
#创建一个名为nginx-http的数据卷

删除数据卷

docker volume rm nginx-http
#名为nginx-http的数据卷

查看数据卷信息

docker volume inspect nginx-http
#查看名为nginx-http的数据卷信息

#示例信息如下
[
    {
        "CreatedAt": "2022-11-04T20:47:50+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-http/_data",
        "Name": "nginx-http",
        "Options": {},
        "Scope": "local"
    }
]

挂载数据卷

docker run -d -v nginx-http:/usr/share/nginx/html -p 80:80  --name nginx-web nginx:1.20.0
#在创建容器时映射数据卷到容器。
#-v nginx-http:/usr/share/nginx/html将数据卷nginx-http映射到容器内的/usr/share/nginx/html路径下。
#当进行数据卷映时,如果指定名称的数据卷不存在,会自动创建。镜像内部映射路径内原有的文件将会存在。

docker run -d -v /opt/html:/usr/share/nginx/html -p 80:80 --name nginx-web nginx:1.20.0
#指定一个宿主机路径(而非数据卷名称),映射到容器内。目录内容将会取代容器内的原有文件。

#原则:即数据卷中有文件时,数据卷中的文件优先于容器内的文件。当数据卷为空时,容器内的文件将会保存在数据卷中。当指定的是一个宿主机目录时,不论这个宿主机目录内是否有文件,容器内的文件都将不存在。```

四、网络操作

查看网络

docker network ls
#列出Docker主机上的全部网络


docker network inspect web-app
#查看web-app网络的详细信息

创建网络

docker network create web-app
#创建一个名称为web-app的网络
#默认使用brigde驱动,可使用-d指定其它驱动。

删除网络

docker network prune
#删除主机上全部未使用的Docker网络

docker network rm web-app
#删除web-app网络

五、镜像打包

Commit 将容器打包为镜像

docker commit -p -a paper1 -m "this is a nginx container for web-app" 8cdf6bb76ed9 web-app-nginx:v1.0
#将8cdf6bb76ed9容器打包为web-app-nginx:v1.0镜像
# -a 提交镜像的作者
# -m 说明文字
# -p 在commit时将镜像暂停
#commit导出的镜像会保留所有的分层信息,这包括了基础镜像本身的分层,以及在镜像基础之上产生的新数据的分层。
#commit打包的镜像会出现在docker images中,而非一个独立的tar包。

Export 将容器导出为镜像

docker export  -o web-app-nginx.tar
#将8cdf6bb76ed9容器导出为tar包,没有压缩。
#export和commit的对象是容器,是一种将容器的当前状态导出为镜像的方法。
#export导出的镜像会失去原有的分层信息,但是有(相对)最小的文件体积。
#export命令导出的镜像tar包需要使用-o指定输出路径。

Save 将镜像导出为tar包

docker save nginx:1.20.0 -o /opt/nginx-1.20.0-docker-image.tar
#将nginx:1.20.0镜像导出为tar包,没有压缩。
#-o 指定文件名或完整输出路径,不指定路径则保存在当前目录下。
#导出后的镜像将会保留所有的分层信息,实际上导出的镜像tar包和原本的镜像没有任何区别。

dockerfile 制作镜像

FROM #声明基础镜像
LABEL maintainer="example admin@example.com" #添加key,value对,可自定义。

ADD #添加文件到镜像中,自动解压tar包,但是zip包不会解压。可指定url自动下载,但url方式下载的tar包则不会解压。
COPY #添加文档到镜像中,不会自动解压压缩文件。
RUN #执行shell命令,非交互方式执行。
WORKDIR #设置工作目录。
EXPOSE #声明要把容器的某些端口暴露到宿主机。
CMD #镜像启动时的默认命令。当dockerfile中定义了ENTRYPOINT时,CMD的内容将作为参数传给ENTRYPOINT。
ENTRYPOINT #指定当前镜像的入口程序。

#详细用方法见Dockerfile文章

标签: Docker

添加新评论