目录
[命令docker run](#命令docker run)
[docker run的启动过程](#docker run的启动过程)
查看docker信息
docker version #查看docker版本
docker info #查看docker详细信息
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
Server:
Containers: 0 # 容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 1 # 镜像数量
Server Version: 20.10.3 # server 版本
Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动
Backing Filesystem: xfs # 宿主机上的底层文件系统
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs # Cgroups 驱动
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 976.3MiB
Name: localhost.localdomain
ID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDT
Docker Root Dir: /var/lib/docker # docker 数据存储目录
Debug Mode: false
Registry: https://index.docker.io/v1/ # registry 地址
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors: # 加速站点
https://6ijb8ubo.mirror.aliyuncs.com/
Live Restore Enabled: false
Docker镜像操作
Docker挂载阿里云加速器
- 防止docker拉取镜像失败:download failed after attempts=6: dial tcp 104.18.125.25:443: i/o timeout
1.阿里云官网获取加速器地址
每个阿里云账号都会生成一个加速器
2.在服务器上挂载加速器
cd /etc/docker/ #切换目录
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["加速器地址"]
}
EOF #使用加速器
3.重启docker服务
systemctl restart docker.service
搜索,下载镜像
docker search 关键字 #根据仓库或镜像的关键字搜索镜像
docker pull 仓库名/镜像名:标签
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
docker images [-q] #查看下载到本地的所有镜像 #-q 表示仅显示镜像ID
docker inspect 镜像ID号 #根据镜像的唯一标识 ID 号,获取镜像详细信息
- lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
- upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这层
- MergedDir是表现层,是容器的挂载点
本地的镜像添加新的标签
docker tag 名称:旧标签 新名称:新标签 #添加新的标签但ID号不会变
删除镜像
docker rmi 镜像名或镜像ID [-f] #删除镜像
-f #强制删除
#快速删除所有镜像
docker rmi $(docker images -q)
docker rmi nginx:1.18
docker rmi 50fe74b50e0d
docker rmi 605c77e624dd -f
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
docker rmi nginx:web
如何将镜像传送给其他主机的docker?
镜像导出成文件
有镜像主机操作
docker save -o 存储文件名 存储的镜像 #将镜像导出成文件
scp /opt/nginx-1.20.tar 20.0.0.70:/opt #传输文件给另一台主机
镜像文件导入镜像库
无镜像主机操作
#将镜像文件导入镜像库
docker load < 存出的文件
docker load -i 存出的文件
上传镜像
-
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
-
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录
-
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传
docker login #输入用户名及密码
docker tag nginx:1.20 别名 #添加别名
docker push 别名 #上传即可
官网账户稍有问题,改上传阿里云
创建阿里云个人镜像仓库(免费)
设置registry密码
创建命名空间和镜像仓库
创建完毕
上传阿里云仓库
docker login --username=aliyun6346886006 registry.cn-hangzhou.aliyuncs.com
#登录阿里云,输入密码
docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/xy101-jlh/nginx:1.20
#设置别名
docker push registry.cn-hangzhou.aliyuncs.com/xy101-jlh/nginx:1.20
#上传镜像
Docker容器操作
创建容器
-
容器创建:就是将镜像加载到容器的过程。
-
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
docker create [选项] 镜像名:标签 [容器启动命令] #创建容器
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让Docker分配一个伪终端tty
-it :合起来实现和容器交互的作用,运行一个交互式会话shell
--name : 指定容器名例:docker create -it nginx:latest /bin/bash
查看容器的运行状态
docker ps -a #-a选项可以显示所有的容器
docker ps -a -q #查看容器id号
docker inspect 容器名/容器id #查看容器详细信息
启动容器
docker start 容器的ID/名称
docker ps -a #查看所有容器
docker ps #查看正在运行的容器
停止容器
docker stop 容器的ID/名称 [-t 等待时间] #停止容器,发送SIGTERM信号,默认等待10d
docker kill 容器的ID/名称 #强制退出容器,默认发送SIGKILL信号
删除容器
docker rm [-f] 容器ID/名称 #删除已经停止的容器 [-f]选项强制删除
#若想删除正在 运行的容器,必须先暂停该容器的启动状态,在进行删除或使用-f选项,否则无法删除
docker rm $(docker ps -a -q) #批量清理后台停止的容器
docker rm $(docker ps -a -q) -f #批量清理后台所有容器
命令docker run
docker run的启动过程
- 检查本地是否有指定镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器
- 在只读的镜像层上再挂载一层可读可写的容器层
- 从docker网桥给容器分配一个虚拟接口和IP地址
- 使用镜像的默认启动命令或docker run 指定的命令来启动容器,直到容器中的PID=1的主进程退出为止
创建并启动容器
-
等同于先执行docker create命令,再执行docker start命令
-
当运行一个容器时,镜像不存在会先自动创建镜像,然后再创建容器并启动容器
docker run -d [-i -t] [--name 容器名] 镜像名:标签 [容器启动命令] #创建并启动容器
-P #使用随机的宿主机端口映射容器端口(从32768开始)
-p 宿主机端口:容器端口 #使用指定的宿主机端口映射容器端口
同时也会在本地为这个容器创建一个IP
进入 容器
需要进入容器进行命令操作时,可以使用docker exec命令进入运行着的容器
docker exec -it 容器ID/名称 容器启动命令
-i 选项表示让容器的输入保持打开;
-t 选项表示让Docker分配一个伪终端。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
例
#进入容器前,确保容器正在运行
docker exec -it c3 /bin/sh
ls
exit #退出容器后,容器仍在运行
将本地文件复制到容器中
docker cp 宿主机文件路径 容器名或容器ID:绝对路径 #复制宿主机文件到容器中
从容器复制文件到本地主机
docker cp 容器名或容器ID:绝对路径 宿主机文件路径 #复制容器文件到宿主机中
查看容器日志
docker logs 容器名/容器id #查看容器中PID=1的主进程的日志
如何将镜像传送给其他主机的docker?
导出容器
有容器主机操作
docker export 容器名/id > 保存目录/文件名
docker export -o 保存目录/文件名 容器id/容器名
导入容器
无容器主机操作
#镜像是创建容器的根本,因此只能先将容器文件导出为镜像,再有镜像创建、启动容器,才能导入容器
docker import 容器文件 -- 名称:标签
cat 容器文件 | docker import - 镜像名:标签 #将容器模板文件导入成镜像