docker 常用命令
docker 常用命令
docker ps
查看当前运行中的容器docker images
查看镜像列表docker rm container-id
删除指定 id 的容器docker stop/start container-id
停止/启动指定 id 的容器docker rmi image-id
删除指定 id 的镜像docker volume ls
查看 volume 列表docker network ls
查看网络列表
docker logs 容器id 查看容器日志
docker run -d -p 56379:6379 --name redis redis:latest 下载镜像,创建容器并运行
docker exec -it cdda31f69770 /bin/sh 进入容器内部
docker login --username=xxx [url] 登录默认url:Docker, 可换成阿里云等
docker tag redis:latest xxx/redis:latest 创建tag,要求xxx必须和username一致,准备推送至仓库
docker push xxx/redis:latest 推送至xxx用户仓库下
或者: docker push 172.16.200.98:5000/library/nginx:latest 推送至harbor仓库
docker run -it --name jdk17v1 ee7a950c30cc sh 参数覆盖:sh替换镜像中的cmd命令
docker inspect c52d1bb7654a 查看镜像或容器详情
docker inspect c52d1bb7654a |grep Mounts -A 50 查看镜像或容器挂载情况
docker cp host_path containerID:container_path 从主机复制到容器
docker cp containerID:container_path host_path 从容器复制到主机
几种挂载方式
bind mount
直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上volume
由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上tmpfs mount
适合存储临时文件,存宿主机内存中。不可多容器共享。
文档参考:https://docs.docker.com/storage/
bind mount
方式用绝对路径 -v D:/code:/app
volume
方式,只需要一个名字 -v db-data:/app
示例:
docker run -p 50080:8080 --name test-hello -v D:/code:/app -d test:v1
-p 映射 宿主机对外端口:容器内
--name 容器名字
-d 后台运行
命令参考文档:https://docs.docker.com/engine/reference/run/
Build 创建镜像和运行
基于dockerfile创建镜像
编译 docker build -t test:v1 .
-t 设置镜像名字和版本号
命令参考:https://docs.docker.com/engine/reference/commandline/build/
基于容器创建镜像
将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
docker commit -m 新的镜像copy -a me cdda31f69770 docker.ui:v1
查看镜像提交历史
docker history docker.ui:v1
运行镜像,创建容器并运行
运行 docker run -p 8080:8080 --name test-hello test:v1
-p 映射容器内端口到宿主机
--name 容器名字
-d 后台运行
命令参考文档:https://docs.docker.com/engine/reference/run/
编写 Dockerfile
FROM node:11 MAINTAINER easydoc.net # 复制代码 ADD . /app # 设置容器启动后的默认运行目录 WORKDIR /app # 运行命令,安装依赖 # RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。 # 例如 RUN npm install && cd /app && mkdir logs RUN npm install --registry=https://registry.npm.taobao.org # CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。 # 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。 # 例如 CMD cd /app && ./start.sh CMD node app.js
结构说明: https://www.cnblogs.com/panwenbin-logs/p/8007348.html
镜像导入导出
Docker - 实现本地镜像的导出、导入(export、import、save、load) (hangge.com)
docker ps –format参数可以实现格式化输出自定义列。各列意义如下:
-format="TEMPLATE" Pretty-print containers using a Go template. Valid placeholders: .ID - Container ID .Image - Image ID .Command - Quoted command .CreatedAt - Time when the container was created. .RunningFor - Elapsed time since the container was started. .Ports - Exposed ports. .Status - Container status. .Size - Container disk size. .Names - Container names. .Labels - All labels assigned to the container. .Label - Value of a specific label for this container. For example {{.Label "com.docker.swarm.cpu"}} .Mounts - Names of the volumes mounted in this container.
比较方便的查看命令:
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}"
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Size}}\t{{.Status}}"
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.RunningFor}}\t{{.Ports}}\t{{.Status}}\t{{.Size}}\t{{.Names}}\t{{.Labels}}\t{{.Mounts}}"
在显示容器列表的命令后面加上--no-trunc,大概是不省略的意思,可以显示列的完整信息
docker ps -a --no-trunc
镜像网络
(53条消息) docker network详解、教程_wangyue23com的博客-CSDN博客
容器vs宿主机 的进程信息
docker top 2c604607849c(容器id)
就会得到类似下面的信息,其中PID是容器内进程在宿主机上的pid,ppid是容器内进程在宿主机上的父进程pid
https://blog.csdn.net/yjclsx/article/details/81508455 【linux-top命令详解】
其他概念:
-
Docker Swarm是Docker的集群管理工具,它允许用户将多个Docker主机组合成一个虚拟的Docker主机,从而可以在这些主机上运行容器。
-
Docker Service是Docker Swarm中的一个概念,它代表着在Swarm集群中运行的一个容器实例。用户可以使用Docker Service来定义、创建和管理容器的运行方式,包括容器的副本数量、网络配置、存储配置等。
- Docker Compose是一个用于定义和运行多个容器应用的工具,它使用一个单独的YAML文件来定义应用的服务、网络和存储配置,然后使用docker-compose命令来启动、停止和管理这些容器。与Docker Swarm相比,Docker Compose更适用于单个主机上的容器管理,而不是集群管理。