文章目录
- Docker命令与镜像管理:
- docker常用命令示例
- docker命令:
- 子命令帮助
- run
- ps
- rm
- logs
- load
- port
- stop
- kill
- start
- attach
- exec
- inspect
- commit
Docker命令与镜像管理:
Docker 镜像含有启动容器所需要的文件系统及所需要的内容, 因此镜像主要用于创建并启动 docker 容器。
Docker 镜像含里面是一层层文件系统,叫做 Union FS(联合文件系统) ,联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样, docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境,每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读( readonly)、读写( readwrite)和写出( whiteout-able),但是 docker 镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成, bootfs(boot filesystem) 主要包含 bootloader 和 kernel, bootloader 主要用于引导加载 kernel,
当 kernel 被加载到内存中后 bootfs 会被 umount 掉, rootfs (root file system) 包含的就是典型 Linux 系统中的/dev, /proc, /bin, /etc 等标准目录和文件, 下图就是 docker image 中最基础的两层结构,不同的 linux 发行版(如 ubuntu和 CentOS ) 在 rootfs 这一层会有所区别。但是对于 docker 镜像通常都比较小, 官方提供的 centos 基础镜像在 200MB 左右,一些其他版本的镜像甚至只有几 MB, docker 镜像直接调用宿主机的内核,镜像中只提供 rootfs,也就是只需要包括最基本的命令、工具和程序库就可以了, 比如 alpine 镜像,在 5M 左右。
下图就是有两个不同的镜像在一个宿主机内核上实现不同的 rootfs。
容器、 镜像父镜像:
docker常用命令示例
- 搜索官方镜像
# 带指定版本号
docker search centos:7.2.1511
# 不带版本号默认 latest
docker search centos
- 下载镜像
docker pull 仓库服务器:端口/项目名称/镜像名称:版本号
- 查看本地镜像
docker images
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符), 默认为 latest
IMAGE ID #镜像唯一 ID 标示
CREATED #镜像创建时间
VIRTUAL SIZE #镜像的大小
- 镜像导出:可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用
# 方法1
docker save centos -o /opt/centos.tar.gz
# 方法2
docker save centos > /opt/centos-1.tar.gz
- 查看镜像内容:包含了镜像的相关配置, 配置文件、分层
tar xvf centos.tar.gz
cat manifest.json
- 镜像导入:将镜像导入到 docker
docker load < /opt/centos.tar.gz
- 删除镜像
docker rmi centos
- 删除容器(-f 强制)
docker rm 容器 ID/容器名称
docker命令:
- 命令格式
docker [OPTIONS] COMMAND
- 常用的
COMMAND
[COMMAND]
attach 此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭
build 从Dockerfile构建一个镜像
commit 从容器的更改中创建一个新镜像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建新容器
diff 检查容器文件系统上文件或目录的更改
events 从服务器获取实时事件
exec 在运行的容器中运行命令
export 将容器的文件系统导出为tar包
history 显示镜像的历史
images 列出镜像
import 从tarball导入内容以创建文件系统镜像
info 显示整个系统的信息
inspect 返回Docker对象的底层信息
kill 停止一个或多个正在运行的容器
load 从tar包或标准输出加载镜像
login Log in to a Docker registry
logout Log out from a Docker registry
logs 获取容器的日志
pause 暂停一个或多个容器中的所有进程
port 列出容器的端口映射或特定映射
ps 列出正在运行的容器
pull 下载镜像
push 上传镜像
rename 重命令一个容器
restart 重启容器
rm 移除一个或多个容器
rmi 移除一个或多个镜像
run 在新容器中运行命令
save 将一个或多个图像保存到tar存档文件(默认情况下流到STDOUT)
search 在Docker仓库中搜索镜像
start 启动一个或多个处在停止状态的容器
stats 显示容器资源使用统计数据的实时流
stop 停止一个或多个正在运行的容器
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top 显示容器的运行进程
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version 查看版本
wait 阻塞直到一个或多个容器停止,然后打印它们的退出代码
子命令帮助
docker COMMAND --help
退出容器不注销:Ctrl + P + Q
run
在新容器中运行命令
- 命令格式
docker run [选项] 镜像名 [shell 命令] [参数...]
- 常用选项
-p list 指定容器的端口发布到主机
-P 将所有公开的端口发布到随机端口
--name string 为容器分配一个名称
-d 在后台运行容器并打印容器ID
-it 创建并进入容器
--rm 当容器退出时自动删除它
- 例:
- 启动的容器在执行完 shel 命令就退出了
#docker run [镜像名] [shell 命令]
docker run centos /bin/echo 'hello wold'
- 从镜像启动一个容器:会直接进入到容器, 并随机生成容器 ID 和名称
docker run -it docker.io/centos bash
- 随机映射端口:
前台启动并随机映射本地端口到容器的 80
docker run -P docker.io/nginx
前台启动的会话窗口无法进行其他操作,除非退出, 但是退出后容器也会退出随机端口映射, 其实是默认从 32768 开始
- 指定端口映射:
方式 1:本地端口 81 映射到容器 80 端口:
docker run -p 81:80 --name "nginx-test" nginx
方式 2:本地 IP:本地端口:容器端口
docker run -p 192.168.10.205:82:80 --name "nginx-test" docker.io/nginx
方式 3:本地 IP:本地随机端口:容器端口
docker run -p 192.168.10.205::80 --name "nginx-test" docker.io/nginx
方式 4:本机 ip:本地端口:容器端口/协议,默认为 tcp 协议
docker run -p 192.168.10.205:83:80/udp --name "nginx-test" docker.io/nginx
方式 5:一次性映射多个端口+协议:
docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name "nginx-test" docker.io/nginx
- 后台启动容器
docker run -d -P --name "nginx-test" docker.io/nginx
- 容器退出后自动删除
docker run -it --rm --name nginx-test docker.io/nginx
- 指定容器 DNS:
Dns 服务,默认采用宿主机的 dns 地址
一是将 dns 地址配置在宿主机
二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1
docker run -it --rm --dns 223.6.6.6 centos bash
–rm 容器退出后会删除容器
ps
列出正在运行的容器
- 命令格式
docker ps [OPTIONS]
- 常用选项
-a 显示所有容器(默认显示正在运行)
-f 根据提供的条件过滤输出
-n int 显示最后创建的n个容器(包括所有状态)(默认值-1)
-l 显示最新创建的容器(包括所有状态)
--no-trunc 不截断输出
-q 只显示数字id
-s 显示总文件大小
- 例:
- 显示正在运行的容器:
docker ps
- 显示所有容器
docker ps -a
rm
移除一个或多个容器
- 命令格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 常用选项
-f 强制移除正在运行的容器(使用SIGKILL)
-l 删除指定链接
-v 删除与容器关联的卷
- 例:
- 删除运行中的容器:即使容正在运行当中, 也会被强制删除掉
docker rm -f 11445b3a84d3
11445b3a84d3是CONTAINER ID,通过docker ps 查询
- 批量删除已退出容器
docker rm -f `docker ps -aq -f status=exited`
- 批量删除所有容器
docker rm -f $(docker ps -a -q)
logs
获取容器的日志
- 命令格式
docker logs [OPTIONS] CONTAINER
- 常用选项
--details 显示提供给日志的额外细节
-f 跟踪日志输出
--since string 显示从时间戳开始的日志(如:42m表示42 分钟)
--tail string 从日志末尾显示的行数(默认为“all”)
-t 显示时间戳
--until string 在时间戳前显示日志(如:42m表示42 分钟)
- 例:
- 查看 Nginx 容器访问日志
docker logs nginx-test-port3 #一次查看
docker logs -f nginx-test-port3 #持续查看
load
从tar存档或STDIN加载镜像
- 命令格式
docker load [OPTIONS]
- 常用选项
-i string 从tar存档文件中读取,而不是从STDIN中读取
-q 不输出
- 例:
- 导入镜像
docker load -i nginx.tar.gz
port
列出容器的端口映射或特定映射
- 命令格式
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
- 例:
- 查看容器已经映射的端口
docker port nginx-test
stop
停止一个或多个正在运行的容器
- 命令格式
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 常用选项
-t int 等待stop几秒钟后再杀死它(默认为10)
- 例:
- 容器的关闭
docker stop f821d0cd5a99
- 批量关闭正在运行的容器
docker stop $(docker ps -a -q)
kill
杀死一个或多个正在运行的容器
- 命令格式
docker kill [OPTIONS] CONTAINER [CONTAINER...]
- 常用选项
-s string 发送到容器的信号(默认为“KILL”)
- 例:
- 批量强制关闭正在运行的容器
docker kill $(docker ps -a -q)
start
启动一个或多个停止的容器
- 命令格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
- 常用选项
-a 附加STDOUT/STDERR和转发信号
--detach-keys string 覆盖用于分离容器的键序列
-i 将容器的STDIN
- 例:
- 容器的启动
docker start f821d0cd5a99
attach
此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭
- 命令格式
docker attach [OPTIONS] CONTAINER
- 常用选项
--detach-keys string 覆盖用于分离容器的键序列
--no-stdin 不附加STDIN
--sig-proxy 代理所有接收到的进程信号(默认为true)
- 例:
docker attach 63fbc2d5a3ec
exec
执行单次命令与进入容器,不是很推荐此方式, 虽然 exit 退出容器还在运行
- 命令格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 常用选项
-d 分离模式:在后台运行命令
--detach-keys string 覆盖用于分离容器的键序列
-e list 设置环境变量
-i 保持STDIN打开,即使没有连接
--privileged 为该命令授予扩展特权
-t 分配一个pseudo-TTY
-u string 用户名或UID(格式:< name| UID >[:<group|gid>])
-w string 容器内的工作目录
- 例:
- 进入容器
docker exec -it centos-test /bin/bash
inspect
返回Docker对象的底层信息
- 命令格式
docker inspect [OPTIONS] NAME|ID ...
- 常用选项
-f string 使用给定的Go模板格式化输出
- 例:
- 可以获取到容器的 PID
# docker inspect -f "{{.State.Pid}}" centos-test3
5892
commit
从容器的更改中创建一个新镜像
- 命令格式
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 常用选项
-a string 作者
-c list 对创建的映像应用Dockerfile指令
-m string 提交消息
-p 提交期间暂停容器(默认为true)
- 例:
- 在宿主机基于容器 ID 提交为镜像
docker commit -a "chen" -m "nginx_yum_v1" --change="EXPOSE_80_443" f5f8c13d0f9f centos-nginx:v1
- 提交的时候标记 tag 号:
标记 tag 号,生产当中比较常用,后期可以根据 tag 标记创建不同版本的镜像以及创建不同版本的容器。
docker commit -m "nginx image" f5f8c13d0f9f jack/centos-nginx:v1