前言
进几年docker在前端领域中也有着越来越广泛的应用,本文主要介绍docker基础指令以及如何在win10、linux上安装docker服务;其中也在网上借鉴了不少资料,通过自己一步步实践最终成功,谨以此篇记录自己学习的爬坑之路。
如果文章对你有帮助,可以点击链接关注我的掘金社区账号 更多技术分享请移步我的掘金哦~ 😀😀😀
点击链接 学习交流群(前端微信群) - 掘金 (juejin.cn) 加vx拉你进 前端学习交流群 让我们一起 好好学习(🐟🐟🐟)吧😎😎😎
docker 是什么?
docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱;容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。
因此我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,不会再有“在我的环境上可以运行的啊!!!”
docker 优点
环境隔离(‘隔离,安全’)
Docker 实现了资源隔离,一台机器运行多个容器互无影响。
更高效的资源利用(节约成本)
Docker 容器的运行不需要额外的虚拟化管理程序的支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
更快速的交付部署(敏捷)
使用 Docker,开发人员可以利用镜像快速构建一套标准的研发环境,开发完成后,测试和运维人员可以直接通过使用相同的环境来部署代码。
更易迁移扩展(可移植性)
Docker 容器几乎可以在任意的平台上运行,包括虚拟机、公有云、私有云、个人电脑、服务器等,这种兼容性让用户可以在不同平台之间轻松的迁移应用。
更简单的更新管理(高效)
使用 Dockerfile,只需要很少的配置修改,就可以替代以往大量的更新工作。并且所有修改都是以增量的方式进行分发和更新,从而实现自动化和高效的容器管理。
docker基础指令
docker version 查看docker版本
docker info 查看docker详细信息
sudo service docker start 启动服务
sudo service docker stop 停止服务
sudo service docker restart 重启服务
- docker镜像命令
docker images 查看docker镜像
docker images -a列出本地所有的镜像
docker images -p只显示镜像ID docker rmi imageid 删除镜像
docker build -t xxx . 打包镜像 - docker镜像导入导出
如果网络不好或者pull不下来镜像,只能在其它网络比较好的机器上pull下来镜像,导出成一个文件,再下载上传到网络不好的机器上,然后再从文件中导出来,这样在网络不好的机器上也能使用docker镜像了 有两种方式,但是不可混用。
save/load (推荐)
- docker save 根据 ID 将镜像打包
docker save 0fdf2b4c26d3 > hangge_server.tar - 同时打包多个image,如将镜像 postgres 和 mongo
docker save -o images.tar postgres:9.6 mongo:3.4 - 导入
docker load < images.tar
复制代码
import/export
根据指定镜像id导出成一个文件
docker export eb516548c180 > coredns.tar
- 导入
docker import /usr/local/coredns.tar
复制代码
两种方式应用场景及区别
docker save 的应用场景:
如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
docker export 的应用场景:
主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
- 镜像是否重命名
docker import 可以为镜像指定新名称
docker load 不能对载入的镜像重命名 - 文件大小
export 导出的镜像文件体积小于 save 保存的镜像 - 是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。 - save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
docker容器命令
每一个容器其实就是一个linux系统可以执行linux命令。
使用镜像启动容器
新建并且启动一个容器: docker run -itd -p 5000:3000 test1:v1.0
OPTIONS说明:
-i: 交互式操作
-t: 终端
-d: 后台运行
–name:指定容器的名称
-p: 表示指定端口映射,(5000:3000)表示(本机端口:容器端口)
镜像名后面的:v1.0:表示打的tag号
-v: 文件映射,将主机本地的文件映射到容器中,这样我们本地修改文件内容,可以动态看到页面的变化了;windwos下需指定文件的绝对路径
查看容器
docker ps 列出当前所有正在运行的容器
docker ps -a列出所有的容器
docker logs 容器id 查看容器日志 docker ps -l列出最近创建的容器
启动退出停止容器
000参数:容器ID或容器名称
exit 退出并停止容器
Ctrl+p+q 只退出容器,不停止容器
docker start 000 启动容器
docker restart 000 重新启动容器
docker stop 000 停止容器
docker kill 000 强制停止容器
删除容器
docker rm 000删除容器
docker rm -f 000强制删除容器
docker rm -f $(docker ps -a -q)删除多个容器
docker容器文件拷贝到宿主机
docker cp 容器ID:容器内的文件路径 宿主机路径 从容器内拷贝文件到宿主机
如:docker cp f9e29e8455a5:/tmp/yum.log /root
宿主机文件拷贝到docker容器
docker cp 你的文件路径 容器ID:docker容器中路径
如(注意.tar后面的.gz):
docker cp D:\NDM下载\Compressed\nvm-0.39.2.tar.gz f9e29e8455a5:/home
cmd进入某个容器
docker exec -it 容器id /bin/bash
win10 安装使用docker
windows系统直接在 官网 下载 docker desktop 客户端 安装使用。
win10家庭版安装最新版本docker,已经不再需要hyper-v虚拟机,也不用修改windows版本注册表,最新版windows docker采用了wsl容器(适用于 Linux 的 Windows 子系统)
安装完成后打开终端验证是否安装成功
docker -v
现在就可以打开上面安装好的docker客户端基于图形工具使用docker了,也可以在cmd终端操作docker
win10 安装子系统linux
因为想在linux上操作docker,但是用的是win10本,所以需要先想办法安装一个liunx(我这里安装的是ubuntu 20.04LTS)系统;
参考这篇文章完成安装 Windows10下开启第二个系统:Linux!
linux 安装使用docker
通过上面的操作我们现在可以在win10上使用linux系统了,现在需要在linux上安装 linux版的docker 打开cmd输入bash进入linux 终端,或者直接在菜单就有Ubuntu的程序,点击进入。
linux安装docker服务
ps:注意如下命令都需要加 sudo
查看当前linux系统是否有安装dockersudo systemctl start docker
出现 System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
说明没有安装
更新源
sudo apt-get update
安装以下软件包 允许apt通过HTTPS使用存储库sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
安装stable存储库sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
ps:这里需要注意网络不佳的情况会失败,多尝试几次
查看docker-ce的版本apt-cache madison docker-ce
安装docker社区版 sudo apt-get install docker-ce
查看版本docker -v
启动docker
启动docker服务sudo service docker start
查看镜像docker images
至此我们完成了:
在windows上安装客户端docker
在windows上安装子系统linux -> 子系统安装docker
注意区分
此时我们电脑上有两个版本docker,如图所示cmd查看镜像时是基于客户端的docker,所以必须先双击启动docker程序才可操作。
而cmd通过bash进入子系统linux系统后操作的docker是属于子系统的
遇到问题
win10的linux子系统启动docker失败
打开ubuntu 启动docker服务后,docker ps 报错如下:“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”
解决:
先确定Docker本身已经安装, docker -v
- 查看 docker daemon 是否在运行:ps aux | grep docker
- 再次查看
ps aux | grep docker
复制代码
先关闭docker服务service docker stop
再重新启动dockerservice docker start
docker ps
查看时发现此时正常