参考
https://cr.console.aliyun.com/undefined/instances/mirrors 阿里云docker镜像
docker build命令
安装 卸载 docker
卸载旧的docker :
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装docker:
//安装_最新版本_的Docker CE和containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io
// 指定版本的docker ce 和containerd
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
// 启动
systemctl start docker
卸载docker:
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
docker 镜像命令
docker images
查看docker镜像语法:docker images [ls]
注:同一个仓库源可以有多个tag,代表这个仓库的不同个版本;使用repository:tag 来定义不同的镜像,如果不指定镜像的版本标签,默认是latest镜像
repository 标识镜像的仓库源
tag 镜像的标签
iimage id 镜像id
created 镜像创建时间
size 镜像大小
## 查看docker镜像信息
$ docker images
$ docker images ls
## 查看详细信息
$ docker images --digests --no-trunc
## 显示所有镜像 (含中央镜像层)
$ docker images -a
## 只显示镜像ID
$ docker images -q
docker search
docker search [OPTIONS] 镜像名字
OPTIONS说明:
–no-trunc : 显示完整的镜像描述
-s : 列出收藏数不小于指定值的镜像。
–automated : 只列出 automated build类型的镜像;
–limit int 限制输出结果个数 ,默认25个
##
$ docker search -s 30 --no-trunc tomcat
##
$ docker search --automated -s 30 nginx
docker pull
获取docker镜像语法:docker [images] pull NAME[:TAG]
docker pull tomcat //将所有版本的tomcat镜像 拉取到本地
docker pull tomcat:TAG //拉取具体某个版本的镜像
## 拉取ubuntu tag 18.04版本镜像
$ docker pull ubuntu:18.04
## 拉取最近版本
$ docker pull ubuntu
docker rmi
docker rmi 某个xxx镜像名字Id ,推荐先删除一个存在容器依赖的镜像,再删除镜像
-f //强制删除
## 删除单个镜像 docker rmi -f 镜像id
$ docker rmi -f tomcat:latest
## xxxxxxxx 为镜像ID
$ docker rmi -f xxxxxxxx
## 删除多个镜像 docker rmi -f 镜像id:tag 镜像id:tag 镜像id:tag
$ docker rmi -f xxxxxxx1 xxxxxxx2 xxxxxxx3
## 删除全部镜像 (写法一)
$ docker rmi -f $(docker.images -qa)
## 删除全部镜像 (写法二)
$ docker rmi `docker images -q`
docker tag
docker tag 为本地镜像任意添加新的标签,类似链接的作用
## 使用 tag 命令添加镜像标签myubuntu:latest(实际镜像文件相同 只是别名不同)
$ docker tag ubuntu:latest myubuntu:latest
docker image prune
docker image prune 删除 所有未被 tag 标记和未被容器使用的镜像 (用来删除不再使用的 docker 对象 )
语法: docker image prune 选项
选项:
-a -all 删除所有无用镜像 不光是临时镜像
-filter filter 只清理符合给定过滤器的镜像
-f -force 强制删除镜像
## 强制删除所有未被标记的镜像
$ docker image prune -f
## 删除 所有未被容器使用的镜像:
$ docker image prune -a
## 删除 所有停止运行的容器:
$ docker container prune
## 删除 所有未被挂载的卷:
$ docker volume prune
## 删除 所有网络:
$ docker network prune
## 删除 docker 所有资源:
$ docker system prune
docker inspect
docker inspect 容器ID ,查看容器详情/详细信息
构建镜像[重要]
创建镜像的三种方式:
- 基于已有镜像的容器创建,
- 基于本地模板导入,
- 基于dockerfile创建
docker commit (基于已有镜像的容器创建)(将容器打包成镜像)
命令格式为: docker commit [options] container [repository[:tag]]
container 容器/容器id
repository 提交后的镜像名称
:tag 版本
options主要选项包括:
-a, --author=" “;作者信息
-c, --change=[] ;提交时执行Dockerfile指令,包括 cmd|entrypoint|env|exposs|等
-m , --message=” " 提交消息
-p --pause =true ;提交时暂时停止容器运行
## a92xxxxx 为镜像id test:1.0 为提交后镜像的名称和版本
$ docker commit -m "added a new file" -a "chris" a92xxxxx test:1.0
基于本地模板导入 (就是下面的 导入容器 )
docker [image] import [OPTIONS] file|URL| - [REPOSITORY [:TAG]]
docker build (基于dockerfile创建)
参数:
Name, shorthand | Default | Description |
---|---|---|
--add-host | 添加自定义从host到IP的映射,格式为(host:ip) | |
--build-arg | 设置构建时的变量 | |
--cache-from | 作为缓存源的镜像 | |
--cgroup-parent | 容器可选的父cgroup | |
--compress | false | 使用gzip压缩构建上下文 |
--cpu-period | 0 | 限制CPU CFS (Completely Fair Scheduler) 周期 |
--cpu-quota | 0 | 限制CPU CFS (Completely Fair Scheduler) 配额 |
--cpu-shares, -c | 0 | CPU使用权重(相对权重) |
--cpuset-cpus | 指定允许执行的CPU | |
--cpuset-mems | 指定允许执行的内存 | |
--disable-content-trust | true | 忽略校验 |
--file, -f | 指定Dockerfile的名称,默认是‘PATH/Dockerfile’ | |
--force-rm | false | 删除中间容器 |
--iidfile | 将镜像ID写到文件中 | |
--isolation | 容器隔离技术 | |
--label | 设置镜像使用的元数据 | |
--memory, -m | 0 | 设置内存限制 |
--memory-swap | 0 | 设置Swap的最大值为内存+swap,如果设置为-1表示不限swap |
--network | default | 在构建期间设置RUN指令的网络模式 |
--no-cache | false | 构建镜像过程中不使用缓存 |
--pull | false | 总是尝试去更新镜像的新版本 |
--quiet, -q | false | 静默模式,构建成功后只输出镜像ID |
--rm | true | 构建成功后立即删除中间容器 |
--security-opt | 安全选项 | |
--shm-size | 0 | 指定/dev/shm 目录的大小 |
--squash | false | 将构建的层压缩成一个新的层 |
--tag, -t | 设置标签,格式:name:tag,tag可选 | |
--target | 设置构建时的目标构建阶段 | |
--ulimit | Ulimit 选项 | |
docker save 导出镜像到本地
方式一:
docker save busybox > buxybox.tar
方式二:
docker save --output bysybox.tar busybox
docker save --o bysybox.tar busybox
## 将镜像文件unbuntu:18.04 导出为unbuntu_18.04.tar
$ docker save -o unbuntu_18.04.tar unbuntu:18.04
## 将镜像文件tomcat:9.0 导出为tomcat_9.0.tar
$ doker save tomcat:9.0>tomcat_9.0.tar
docker load 将导出的tar文件在导入到本地镜像库
使用docer load
命令即可加载镜像。
docker load < busybox.tar.gz
docker load --input fedora.tar
## 将tar文件unbuntu_18.04.tar 导入到本地镜像库中(写法一)
$ docker load < unbuntu_18.04.tar
## 将tar文件unbuntu_18.04.tar 导入到本地镜像库中(写法二)
$ docker load -i unbuntu_18.04.tar
导出容器
将容器导出成一个压缩包文件。
docker export red_panda > latest.tar
docker export --output=“latest.tar” red_panda
导入容器
使用docker import
命令即可从归档文件导入内容并创建镜像。
命令格式: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Name, shorthand | Default | Description |
---|---|---|
--change, -c | 将Dockerfile指令应用到创建的镜像 | |
--message, -m | 为导入的镜像设置提交信息 |
docker import nginx2.tar nginx
docker push 上传镜像
docker push 提交镜像到dockerHub 或者其他docker镜像管理平台
## 给tomcat:latest创建一个tag chris/mytomcat:1.0
$ docker tag tomcat:latest chris/mytomcat:1.0
## 将chris/mytomcat:1.0上传到dockerHub 或者其他docker镜像管理平台
$ docker push chris/mytomcat:1.0
docker 容器指令
docker craete 创建容器
新建并启动容器
新建并启动容器:
docker run [OPTIONS] image [COMMAND] [ARG…]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
–name=“容器新名字”: 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
例:#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
docker run -it --name chris_centos_test 9f38484d220f
列出当前所有正在运行的容器 docker ps [OPTIONS]
docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。
docker ps
① CONTAINER_ID:表示容器ID。
② IMAGE:表示镜像名称。
③ COMMAND:表示启动容器时运行的命令。
④ CREATED:表示容器的创建时间。
⑤ STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。
⑥ PORTS:表示容器对外的端口号。
⑦ NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的–name选项自行指定。
docker ps -a
docker ps -qa
docker ps -l
docker ps -n 2
退出容器
两种退出方式:
exit 容器停止退出
ctrl+P+Q 容器不停止退出
启动容器
docker start 容器ID或者容器名
容器ID或者容器名 可通过 docker ps 查询到
docker start 9f38484d220f/chris_centos_test
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名
删除已停止的容器
docker rm 容器ID
一次性删除多个容器:
docker rm -f $(docker ps -a -q) 或 docker rm `docker ps -a -q`
docker ps -a -q | xargs docker rm
删除已经停止的容器不需要 -f; 强制删除运行中的容器需要-f
启动守护式容器
docker run -d 容器名
#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如 service nginx start 但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了. 所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
查看容器日志:
docker logs -f -t --tail 容器ID
- -t 是加入时间戳
- -f 跟随最新的日志打印
- –tail 数字 显示最后多少条
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
//docker exec :在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
-
-d :分离模式: 在后台运行
-
-i :即使没有附加也保持STDIN 打开
-
-t :分配一个伪终端
docker exec -it 容器ID bashShell
重新进入docker attach 容器ID
区别:attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
命令汇总总结
命令 | 英文说明 | 中文说明 |
---|---|---|
attach | Attach to a running container | # 当前 shell 下 attach 连接指定运行镜像 |
build | Build an image from a Dockerfile | # 通过 Dockerfile 定制镜像 |
commit | Create a new image from a container changes | # 提交当前容器为新的镜像 |
cp | Copy files/folders from the containers filesystem to the host path | #从容器中拷贝指定文件或者目录到宿主机中 |
create | Create a new container | # 创建一个新的容器,同 run,但不启动容器 |
diff | Inspect changes on a container’s filesystem | # 查看 docker 容器变化 |
events | Get real time events from the server | # 从 docker 服务获取容器实时事件 |
exec | Run a command in an existing container | # 在已存在的容器上运行命令 |
export | Stream the contents of a container as a tar archive | # 导出容器的内容流作为一个 tar 归档文件[对应 import ] |
history | Show the history of an image | # 展示一个镜像形成历史 |
images | List images | # 列出系统当前镜像 |
import | Create a new filesystem image from the contents of a tarball | # 从tar包中的内容创建一个新的文件系统映像[对应export] |
info | Display system-wide information | # 显示系统相关信息 |
inspect | Return low-level information on a container | # 查看容器详细信息 |
kill | Kill a running container | # kill 指定 docker 容器 |
load | Load an image from a tar archive | # 从一个 tar 包中加载一个镜像[对应 save] |
login | Register or Login to the docker registry server | # 注册或者登陆一个 docker 源服务器 |
logout | Log out from a Docker registry server | # 从当前 Docker registry 退出 |
logs | Fetch the logs of a container | # 输出当前容器日志信息 |
port | Lookup the public-facing port which is NAT-ed to PRIVATE_PORT | # 查看映射端口对应的容器内部源端口 |
pause | Pause all processes within a container | # 暂停容器 |
ps | List containers | # 列出容器列表 |
pull | Pull an image or a repository from the docker registry server | # 从docker镜像源服务器拉取指定镜像或者库镜像 |
push | Push an image or a repository to the docker registry server | # 推送指定镜像或者库镜像至docker源服务器 |
restart | Restart a running container | # 重启运行的容器 |
rm | Remove one or more containers | # 移除一个或者多个容器 |
rmi | Remove one or more images | # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] |
run | Run a command in a new container | # 创建一个新的容器并运行一个命令 |
save | Save an image to a tar archive | # 保存一个镜像为一个 tar 包[对应 load] |
search | Search for an image on the Docker Hub | # 在 docker hub 中搜索镜像 |
start | Start a stopped containers | # 启动容器 |
stop | Stop a running containers | # 停止容器 |
tag | Tag an image into a repository | # 给源中镜像打标签 |
top | Lookup the running processes of a container | # 查看容器中运行的进程信息 |
unpause | Unpause a paused container | # 取消暂停容器 |
version | Show the docker version information | # 查看 docker 版本号 |
wait | Block until a container stops, then print its exit code | # 截取容器停止时的退出状态值 |
补充
docker run -it 镜像名
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 (启动带容器数据卷的镜像)(宿主机和容器内共享文件 并同时具有读写操作权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 (启动带容器数据卷的镜像 并且为只读权限)(容器只能读宿主机的文件 不能添加修改文件;宿主机可以随意操作宿主机的文件)
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
dockerfile 命令详解
参考:
[1] https://www.cnblogs.com/yanyouqiang/p/8301856.html docker批量删除容器、镜像