容器:一种打包技术。
docker:打包技术的一种技术实现。
一、基础知识
基础命令
查看docker相关信息
docker versoin
查看docker环境信息
docker info
查看命令帮助
docker --help
image镜像
image是一个只读文件,里面包含文件系统、源码、可文件、依赖、工具等一些运行application所需的文件,可以理解成一个模板。docker image具有分层的概念。
container容器
一个运行中的“docker image”。是指是复制image并在image最上层加上一层读写的层。基于同一个image可以创建多个container。
image获取方式
1、自己制作
2、从registry拉取,比如docker hub
创建容器
查看容器帮助命令
docker container --help
当没有拉取镜像时,会自动拉取。
查看当前运行了那些容器:
docker container ls
id:唯一的id。
image:使用的镜像。
command:执行的命令
created:创建时间,这里是2分钟之前。
status:状态
ports:端口协议
names: 容器名称,不设置时,随机产生一个。
创建容器:
docker container run 镜像命令
例如:创建nginx容器
dockekr container run nginx
注意:此时是在窗口运行,ctrl+c会停止运行容器。
关闭容器
docker stop 容器名称或者容器id
例如:关闭nginx
查看容器信息:
docker container list
关闭容器:
docker container 7b51
查看容器
查看运行中的容器
docker container list
查看创建过或者使用过的容器
docker container ps -a
或者
docker container ls -a
区别:
ps是早点docker里面使用的参数,docker container --help里面看不到,只看得见list的参数。
删除容器
docker container rm 容器命令或者id
例如:删除nginx容器
docker container rm 7b
注意
大部分的命令container是可以省略的。
例如:
创建容器:
docker run nginx
查看容器:
docker ps -a
停止容器:
docker stop nginx
删除容器:
docker rm nginx
建议,还是带上container,清晰表示是在对容器操作,因为后面还有对镜像image的操作。
二、小技巧
批量操作
比如:批量删除容器,如何操作?
正常情况删除容器
1、查看所有容器
docker container ls -a
2、删除多个容器
docker container rm 容器1的ID 容器2的ID 容器3的ID 容器4的ID
同时删除容器1、2、3、4。
但是如果有很多个,就可以通过参数传递批量删除。
批量删除
1、查看所有容器id
docker container ls -aq
2、参数传递批量删除
docker container rm $(docker container ls -aq)
批量关闭、删除同理。
注意
不能删除正在运行的容器。
删除运行中的容器
查看运行中的容器
docker container li
直接删除
会提示容器正在运行不能删除。
docker container rm nginx
删除运行中容器
1、停止容器,再删除。
停止
docker container stop 681
再删除
docker container rm 681
2、强制删除容器
docker container rm c3e -f
注意:强制删除多个一个参数 -f
三、docker两种运行模式
attached前台运行模式
docker container run -p 80:80 nginx
ctrl+c
在窗口创建容器后,界面输入创建容器日志,此时ctrl+c关闭后容器就关闭了。
查看容器
docker ps
detached后台运行模式
只需要添加参数detached,简写一个d即可。
docker container run -d -p 80:80 nginx
此时查看容器,依然在后台运行
docker ps
进入容器
只需要加attach参数即可
docker container attach
其实此时已经进入容器,访问nginx页面刷新,就可看到页面输出日志。
此时执行ctrl+c,就会关闭容器。
ctrl+c
查看容器已经关闭
docker ps
注意:不推荐attach前台模式。
查看日志
后台运行模式detached,查看日志。
docker container logs 容器id或名称
例如查看nginx日志
docker container logs nginx
动态跟踪日志
只需要加参数-f
docker container logs -f 容器id或名称
例如:动态跟踪nginx日志
docker container logs -f nginx
交互式模式
1、用于执行创建容器后,执行的命令。只需要加参数-it
docker container run -it 容器名称 容器中要执行的命令
例如:创建ubunt容器后,执行sh脚本
docker container run -it ubuntu sh
此时已经进入ubuntu的sh模式了,可以直接执行命令,查看ubuntu相关信息了。
执行exit后执行退出ubuntu,并关闭了。因为我们是在交互模式,容器中执行的exit相当于关闭容器了。
另一种进入交互模式办法。
2、exec
经常使用的容器交互方式
docker exec -it 容器名称/容器id sh
这样就进入了交互模式。
例如,进入nginx容器里面,执行相关操作。
docker exec -it nginx sh
里面执行exit退出的是nginx的sh,并没有关闭nginx容器。这就是和上面没有exec参数的不同。
注意:这是使用最频繁的命令。
四、容器运行了那些进程
docker top 容器名称/容器id
可通过安装pstree查看进程关系树。
可以看到创建一个docker容器,实际就是运行了一个脚本,而容器中又运行了其他进程子进程。
注意:容器中进程id和实际看到的id是不同的。
比如:创建busybox容器,进入容器内查看进程id。
docker container run -it busybox sh
查看进程
ps
在容器外部执行查看容器进程命令:
docker container top fe0
可以看到容器内部查看到的sh脚本进程和容器外部看到的sh脚本进程是不同的。
这是由于docker容器隔离形成。
五、docker容器运行背后发生了什么
以创建nginx容器为列:
docker container run -d -p 80:80 --name mynginx nginx
说明:
- 在本地查找是否有nginx镜像。如果有镜像,直接执行第4步骤。
- 如果本地没有,去远程image registry查找nginx镜像(默认registry是Docker Hub)
- 下载最新版本nginx镜像(默认nginx:latest)
- 基于nginx镜像来创建一个新的容器,并准备运行。
- docker engine引擎给这个容器分配一个虚拟ip地址。
- 在宿主机上打开80端口,并把容器的80端口转发到宿主机的80端口上。
- 启动容器,运行指定命令。(启动容器,其实就是执行一个脚本启动nginx)。
评论 (0)