Docker运行流程和原理
启动流程
原理
Docker 架构
常用命令
1.基础命令
命令
docker version # 查看docker的版本信息
docker info # 查看docker系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令(可查看可选的参数)
执行
[root@iZbp1goskzrblqlckwzt6iZ test]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
scan: Docker Scan (Docker Inc., v0.12.0)
Server:
Containers: 9
Running: 1
Paused: 0
Stopped: 8
Images: 21
Server Version: 20.10.12
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
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.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2
init version: de40ad0
2.镜像命令
执行
docker images # 查看本地所有镜像
docker search # 搜索镜像
# docker search mysql --filter=STARS=3000 # 添加过滤
docker pull # 拉取镜像,后面可加tag,否则下载的就是最新的
# docker pull mysql:5.7
删除镜像
#1.删除指定的镜像id
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker rmi -f 镜像id
#2.删除多个镜像id
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker rmi -f 镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker rmi -f $(docker images -aq)
3.容器命令
运行
docker run [可选参数] image
#参数说明
--name="xxxxx" 指定容器名字
-d 后台运行
-it 交互方式运行,进入shell
-p 指定容器端口
(
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
进入容器
# 进入容器
docker run -it [容器ID] /bin/bash
退出容器
#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q 不停止容器退出
[root@bd1b8900c547 /]# exit
exit
[root@iZbp1goskzrblqlckwzt6iZ ~]#
列出容器
#docker ps
# 列出当前正在运行的容器
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
删除容器
docker rm [容器id] #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
启动及重启
docker start [容器id] #启动
docker restart [容器id] #重启容器
docker stop [容器id] #停止当前运行的容器
docker kill [容器id] #强制停止当前容器
查看日志
docker logs -tf [容器id]
docker logs --tail number [容器id] # number为要显示的日志条数
查看进程信息
docker top c7538c4a4060
查看容器元数据
docker inspect [容器id]
进入正在运行的容器
- docker exec 进入容器后开启一个新的终端,可以在里面操作
- docker attach 进入容器正在执行的终端,不会启动新的进程
# 1. way1 新建shell打开,不会有当前进程正在打印的影响
docker exec -it c7538c4a4060 /bin/bash
# 2.way2, 不是新建shell,可能打开的shell正在执行任务,比如打印
docker attach c7538c4a4060
拷贝文件到主机
docker cp 容器id:容器内路径 目的主机Centos路径
docker cp c7538c4a4060:/home/test.go /home/ceshi
小结
Docker 数据卷
使用数据卷之后,以后修改只需要在本地修改,容器内会自动同步
理念
将应用和环境打包成一个镜像!
数据 如果数据都在容器中,那么我们容器删除,数据就会丢失!需求∶数据可以持久化MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
卷的使用 为了容器的持久化和同步操作, 容器间也可以数据共享shell命令
docker run -it -v 主机目录:容器目录
哪怕容器关了,也可以同步
通过 docker inspect 容器ID 查看