重要概念:镜像、容器
镜像:可以理解为软件安装包,可以方便的进行传播和安装。
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
Docker关系图(简):
通常情况下,可以通过以下两种方式来查询想要使用的命令详情:
- 客户端输入
docker
或者docker --help
就能查看简易版的命令行列表; - 访问官方命令行文档查阅详尽版的命令行介绍;
一个完整的Docker有以下几个部分组成:
- docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- Docker Container容器
1、docker基本命令
`uname -r` :查看内核 `docker info`:查看docker详细信息 `docker --help`:查看docker命令 `systemctl start docker` #启动docker镜像 `docker --version` #查看docker版本 `sudo systemctl enable docker` #开机自启
2、操作docker镜像命令
docker images,查看本地所有顶层镜像(top level)信息的命令,按照创建时间倒序展示 ; docker images -a,查看本地所有镜像信息的命令,包含中间层; docker images -q,只显示镜像ID; docker images name:tag,根据镜像name:tag来查看详细信息,不支持模糊搜索; docker history,查看镜像的历史信息; docker history name:tag,查看name:tag对应镜像的历史信息; docker search,镜像搜索命令; docker search name,根据镜像name进行搜索; docker search --filter=stars=1000 name,增加筛选条件,只查询stars数量在1000以上的; docker pull,拉取镜像; docker pull name:tag,根据name和tag拉取镜像; docker rmi,移除镜像; docker rmi name:tag,根据name和tag删除镜像,该镜像如果已经生成容器则不能删除;如果同一个镜像有多个tag,则只有当最后一个tag删除时才会删除镜像; docker rmi -f name:tag,强制删除镜像,如论是否创建容器; docker rmi -f ${docker images -q},强制删除本地所有镜像; docker rmi id,根据镜像ID删除镜像,会先删除所有tag,然后删除镜像; docker build,构建镜像; docker build -f container_path/dockerfile -t name:tag .,指定dockerfile构建name:tag镜像,注意最后有一个.符号; docker save,导出镜像,适用于需要将镜像安装到没有网络条件的服务器上的场景; docker save -o E:\httpd.zip httpd:latest,将本地仓库中的httpd镜像导入到指定目录的指定文件中; docker load,从指定文件中加载镜像,适用于在无网络条件的服务器上使用; docker load -i E:\httpd.zip,从指定目录的指定文件中加载镜像到本地仓库中; docker tag,给指定的镜像打tag,常用于指定别名,用于上传到远程镜像仓库场景; docker tag httpd:latest zhangxun/httd:latest,一个镜像两个tag,删除任意一个都不会删除镜像,只有当所有tag都删除了才会真正删除镜像;但是如果删除镜像ID,则会先删除所有tag,再删除镜像; docker tag id zhangxun/httpd:latest,对指定ID的镜像打tag; docker tag id test.tecentcloudcr.com/project/httpd:latest,在新tag前面加上registry地址,表示后续将该镜像推送到指定的远程仓库,而非官方的Docker Hub; docker push,将镜像推送到远程镜像仓库; docker push zhangxun/httpd:latest,默认是推送到Docker Hub的远程仓库,一定要加上用户名前缀,否则无法推送,没有用户名前缀的都是官方镜像; docker push test.tecentcloudcr.com/project/httpd:latest,推送到指定的远程仓库;
3、容器命令
docker run,新建并启动容器命令; docker run -it name,以交互方式新建启动容器,此处name为image的,非容器的,此时容器name随机; docker run --name newname name,新启动的容器指定名称为newname; docker run -d name,以守护方式启动容器; docker run -it -v local_path:container_path name,-v是指挂载数据卷,使得主机和容器地址挂载; docker run --name name02 --volumes-from name01 name:tag,启动name02容器,共享name01数据卷,name01称为数据卷容器; docker run -it --network=bridge name,启动容器使用某个指定的网络; docker start,启动容器命令; docker start name,这里的name是容器的name; docker restart,重启容器命令; docker restart name,这里的name是容器的name; docker stop,停止容器命令; docker kill,杀掉正在运行中的某个容器; docker rm,移除容器; docker ps,查看容器命令; docker ps -q,只显示容器ID; docker ps -a,显示正在运行和历史运行过的容器信息; docker ps -l -n num,显示最近创建的num个容器信息; -docker container ps和docker container ls的效果和docker ps完全一样; docker top,查看容器中的进程信息; docker top name,查看name容器中的进程信息; docker container top name效果完全一样。 docker stats,查看容器的运行情况资源占用情况; docker stats name,查看某个容器的运行情况; docker container stats,效果完全一样; docker logs, 查看容器中的日志; docker logs -f -t --tail=20 name,查看name容器中的日志,-f表示跟踪日志输出,-t显示时间戳,--tail n,只显示最新的n条日志信息; docker inspect,查看docker容器的详细信息; docker inspect name,查看某个容器的详细信息; docker attach,进入容器; docker attach name,进入正在运行的容器name的命令行,显示该容器的运行信息; docker exec,进入容器并执行命令; docker exec -it name cmd,以交互方式进入容器name,同时执行cmd命令; docker commit,打包生成镜像; docker commit -a="author" -m="commit info" name newname:tag,写上作者、提交信息,并将当前容器打包为newname:tag的容器; docker cp,容器与宿主机之间的数据拷贝;推荐使用数据卷的功能,所以这个命令实际中不常用; docker cp name:/container_path local_path,将name容器中container_path路径下内容cp到宿主机的local_path路径下; docker cp local_path name:/container_path,将宿主机的local_path路径下内容cp到name容器中container_path路径下 docker volume,查看数据卷的信息; docker volume ls,查看所有存在的数据卷信息; docker volume inspect name,查看数据卷的详细信息,比如对应主机的路径; docker volume create name,创建一个name名称的数据卷; docker network,网络设置相关; docker network ls,查看宿主机上docker的网络列表; docker network inspect name,根据name查看某个具体网络的信息; docker network create --driver bridge --subnet 172.17.0.0/16 --gateway 172.17.0.1 yourNetName,创建自定义网络,指定网络类型、子网范围以及网关地址; docker export,导出容器; docker export -o /root/docker/httpd-01.tar container-id,将某个容器(无论是否正在运行)导出到指定路径的指定文件; docker import,导入容器; docker import /root/docker/httpd-01.tar - test/imagename:tag,从指定路径导入容器,同时创建一个基于容器快照的镜像;
4.附常用操作
1.进入正在运行的docker容器
# 首先使用下面的命令,查看容器ID(CONTAINER ID): docker ps -a # 然后用下面的命令进入容器,就可以使用bash命令浏览容器里的文件: docker exec -it [CONTAINER ID] bash # 有的镜像没有bash命令,可以用对应的shell,比如sh docker exec -it [CONTAINER ID] sh #-i:以交互模式运行容器 #-t:为容器重新分配一个伪输入终端
2.docker容器跟宿主机互相拷贝文件
a.宿主机文件 cp(拷贝)到 docker容器
docker cp [filename] [{container_name/ID}:/directory/filename] docker cp 宿主机文件路径 容器名:容器目录 docker cp /var/www/html/index.html tomcat001:/usr/local/tomcat/webapps
b.docker容器 文件 cp(拷贝)到宿主机
docker cp [{container_name/ID}:/directory/filename] [filename] docker cp 容器名:容器内文件路径 宿主机目录 docker cp tomcat001:/root/test.txt /home
3.docker将容器内文件夹与宿主机映射挂载
- 使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新
build
和run
,很是麻烦。 - 容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。
目录挂载解决以上问题
几种挂载方式
bind mount
直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上volume
由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上tmpfs mount
适合存储临时文件,存宿主机内存中。不可多容器共享。
文档参考:https://docs.docker.com/storage/
挂载演示
bind mount
方式用绝对路径 -v D:/code:/app
volume
方式,只需要一个名字 -v db-data:/app
示例:
docker run --name ex1 -p 89:80 -v D:/html:/usr/share/nginx/html -d nginx --name ex1 指容器名字为ex1 -p 89:90 指宿主机端口和容器端口的映射为89:90 -v 是宿主机目录与容器文件目录映射
docker run --name nginx -p 80:80 -v /usr/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/nginx/html/:/usr/share/nginx/html -d nginx:1.20.1
https://www.cnblogs.com/fps2tao/p/16470250.html
https://docker.easydoc.net/doc/81170005/cCewZWoN/kze7f0ZR
标签:容器,name,宿主机,基础,tag,常用命令,镜像,docker From: https://www.cnblogs.com/fps2tao/p/17015356.html