Docker初识


前言

进几年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系统是否有安装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 查看时发现此时正常


文章作者: 尖椒土豆sss
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 尖椒土豆sss !
 上一篇
url-loader图片不显示-踩坑 url-loader图片不显示-踩坑
前言一次在vue-cli3、vue2、webpack4项目中使用url-loader时遇到了图片不显示、不报错问题。查了一些网上资料,也问了一些同行。一路踩坑,真的要裂开了。 项目依赖版本:vue:2.6.12webpack:4.46.0u
2023-03-13
下一篇 
解决image-webpack-loader打包报错 解决image-webpack-loader打包报错
报错问题 vue项目打包时报错了,这里报错是因为使用了 image-webpack-loader打包图片时报错了,因为对应依赖的包没下载下来。 开始解决 卸载后重新安装 npm uninstall image-webpack-loader`
2022-06-03 尖椒土豆sss
  目录
L
O
A
D
I
N
G