docker优点:docker容器,一次构建,到处运行。构建之后,在任何支持docker的地方都能把它run起来。
虚拟机:操作系统完全隔离。虚拟机之下还有虚拟机管理程序。
docker:没有虚拟机操作系统这层。主要是基于linux内核对容器的实现。
1、yum install docker-io后docker安装到哪里了:
/usr/bin/docker/usr/bin/docker-containerd
/usr/bin/docker-containerd-ctr
/usr/bin/docker-containerd-shim
/usr/bin/docker-runc
2、docker pull 下来的镜像文件存放的位置:/var/lib/docker
3、容器位置:/var/lib/docker/containers/
4、docker 进入容器
使用nsenter工具:他是一个可以访问另外一个进程名字空间的一个命令,访问另外一个容器的namespace.1)、启动容器:
[root@tcy1 tcy]# docker start ef3e81c343c1
2)、获取容器pid:
$ docker inspect -f {{.State.Pid}} 容器名或者容器id
3)、进入该容器
nsenter --target 上面查到的进程id --mount --uts --ipc --net --pid
[root@tcy1 tcy]# docker ps -a //列举所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
497d2ac4d4c3 elasticsearch "/docker-entrypoint. 2 days ago Exited (0) About an hour ago 0.0.0.0:9200->9200/tcp, 9300/tcp trusting_pare
ef3e81c343c1 nginx "nginx -g 'daemon of 12 days ago Exited (0) 12 days ago 0.0.0.0:80->80/tcp gloomy_babbage
a3fca27221d7 alpine "sh" 12 days ago Exited (0) 12 days ago cranky_brattain
[root@tcy1 tcy]# docker inspect --format "{{.State.Pid}}" gloomy_babbage
0
[root@tcy1 tcy]# docker start ef3e81c343c1
ef3e81c343c1
[root@tcy1 tcy]# docker inspect --format "{{.State.Pid}}" gloomy_babbage
4308
[root@tcy1 tcy]# nsenter --target 4308 --mount --uts --ipc --net --pid
mesg: ttyname failed: No such file or directory
root@ef3e81c343c1:/#
写个脚本,快速进入:
[root@tcy1 tcy]# cat in.sh
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
进入:
[root@tcy1 tcy]# ./in.sh gloomy_babbage
5、退出容器:
exit(不会让容器关闭)
6、docker create + docker start = docker run
docker run:创建+启动容器,例如下面:以nginx为镜像,创建启动一个新的容器
[root@tcy1 tcy]# docker run -d -p 80:80 nginx
-d:不退出,在后台一直运行。
-p 80:80 端口重定向,把容器中的80端口映射到物理机器上的80端口。
7、docker pull: pull的时候是一层一层layer,pull的。
8、docker容器 只运行指定的一个应用程序,当应用程序退出,docker容器也就退出了。
如果想在后台运行使用-d,例如: docker run -d --name container1 nginx
容器关闭后再想启动,先查看容器名字:
docker ps -a | grep nginx
再 docker start 容器名,启动容器。