Docker初学

 
Last updated

理解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

image-20230209204103856