近几年docker在前端领域中也有着越来越广泛的应用,本文主要介绍docker基础指令以及如何在win10、linux上安装docker服务;其中也在网上借鉴了不少资料,通过自己一步步实践最终成功,谨以此篇记录自己学习的爬坑之路。
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!_xffjs的博客-CSDN博客
linux 安装使用docker
通过上面的操作我们现在可以在win10上使用linux系统了,现在需要在linux上安装 linux版的docker 打开cmd输入bash进入linux 终端,或者直接在菜单就有Ubuntu的程序,点击进入。
linux安装docker服务
ps:注意如下命令都需要加 sudo
-
查看当前linux系统是否有安装docker
sudo 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
-
再重新启动docker
service docker start
docker ps
查看时发现此时正常
如果文章对你有用辛苦点赞、收藏支持哈~
点击链接 学习交流群(前端微信群) - 掘金 (juejin.cn)
加vx拉你进 前端学习交流群