理解Docker
Docker可以理解为和宿主机共享操作系统,而VM是共享硬件资源 下图是虚拟机和Docker的对比
直观上来讲vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源
- docker build命令是执行path或url的Dockerfile,其中写了执行的命令。 首先会打包Dockerfile下的所有文件(所以要新建个空文件夹来放Dockerfile),依次执行命令
- docker的image和container相当于类和实例
- volume指数据卷,以正常的文件或者目录的形式存在于宿主机上,进而实现保存持久化数据以及共享容器间的数据。
Errors
执行docker run hello-world或者docker version时:
- Got permission denied while trying to connect to the Docker daemon socket
是因为需要root权限的网络端口,所以需要以下命令
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,liangll sudo gpasswd -a $USER docker #将当前用户添加至docker用户组 newgrp docker #更新docker用户组
- enable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/XXX/Dockerfile: no such file or directory 路径下没有Dockerfile,可以自己写/copy一个或者改为url
Dockerfile所在文件夹可能会有需要的文件,所以记得把所有的文件放在一起(因为Dockerfile的ADD和COPY会把当前path的所有文件移动)
删除镜像
因为初次使用会有很多tag为none的镜像,用如下命令删除
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
xshell隧道连接docker
如果启动docker时通过-P
指定端口,可以采用与xshell隧道连接服务器一样连接docker。
其中ip通过docker inspect 容器ID | grep IPAddress
查看
端口通过docker port 容器ID
查看,会有如下显示
# 22是容器的ssh端口,1111是当前主机的端口
22/tcp -> 0.0.0.0:1111
连接远程服务器docker
直接vscode远程服务器安装docker插件,选中对应的container,右键Attach vscode
PREVIOUS常见 Hash 算法位数