目录

  • windows10安装docker
  • windows10 docker部署springboot项目
  • 编写Dockerfile文件
  • 镜像导出、导入
  • docker启动命令
  • docker查看列表命令
  • docker 导出镜像命令
  • docker 导入镜像命令
  • linux安装docker(ubuntu)
  • linux docker部署springboot
  • linux前提配置
  • linux 导入镜像
  • linux 启动镜像
  • 命令详解
  • docker常用命令
  • docker 服务启动相关命令 (注:指linux层面的服务)
  • docker 启动相关命令
  • docker 镜像相关命令
  • Dockerfile命令详解
  • linux安装docker(centos) 官方教程


linux安装docker 不声明linux版本的教程 都是耍流氓的教程
通过本文也会知道为什么那么多教程不一样

windows10安装docker

  1. 首先安装前 检查一下虚拟技术(VT)是否开启

docker bios docker bios 华硕_linux

  1. 如果状态为已禁用 需要进入BIOS设置 ,电脑重启 显示屏亮起时 屏幕会提示怎么进入 一般是按del 进入BIOS模式 , 一般主板开启VT是比较容易的 ,这里用比较复杂的华硕主板举例:

按F7 (不同主板可能有区别)进入advance mode 找到高级设置

docker bios docker bios 华硕_jar_02


按键盘 ↓ 键,选择CPU设置

docker bios docker bios 华硕_docker_03


继续按键盘 ↓ 键,找到VT 改成enabled

docker bios docker bios 华硕_jar_04


返回 ez mode ,保存并退出

其它主板位置可能有差异 但一般都是在CPU设置里面 找找是能看到的。

  1. 电脑开机 再次查看 虚拟化是已开启状态。
  2. 把windows功能的Hyper-V 勾选上

docker bios docker bios 华硕_jar_05


docker bios docker bios 华硕_devops_06

  1. 进入docker官网下载 如果没有注册 它要提示注册 先注册并验证一下邮箱
  2. docker bios docker bios 华硕_docker bios_07

  3. 安装完成后 打开
  4. docker bios docker bios 华硕_docker bios_08

  5. 打开的时候可能会报错误(没报错则忽略) 下载一下环境 安装就好了
  6. docker bios docker bios 华硕_docker bios_09

  7. 点击这里下载插件
  8. docker bios docker bios 华硕_linux_10

如果没有安装linux虚拟机的话 docker还会有这样一个弹框

docker bios docker bios 华硕_docker_11


点进去这个网址,找到下图位置

docker bios docker bios 华硕_linux_12

根据里面的教程来安装 注意是使用powershell 输入命令 (windows10自带)

docker bios docker bios 华硕_docker_13


docker bios docker bios 华硕_docker_14


这里把我们需要操作的步骤都框起来了 很详细的教程有没有!

(我在写这些教程的时候是崩溃的, 博客还没写完 刚好遇到微软更新文档了)

注意是使用windows自带的powershell输入命令 ,会将linux下载到当前cd路径

Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing

这里也是让我很头大的地方,微软上一版教程是举例Ubuntu16的, 结果我下载后 docker和linux内核一直有冲突问题,这个坑我替各位踩了 麻烦复制上面命令 上面这条命令就是下载Ubuntu20.04 。如果已经下载了Ubuntu16 或者其它的低版本,且启动docker时,很不幸出现了OCI runtime exec failed: exec failed: container_linux.go:345:getting the final child’s pid from pipe caused “EOF”": unknown 问题,卸载重安装一个Ubuntu20吧 升级内核的方法基本都是行不通的。

下载完成后 输入命令

# Ubuntu.appx 为下载的文件名称
Add-AppxPackage Ubuntu.appx

如果之前安装过Ubuntu16 先使用卸载命令:

# *Ubuntu16*  表示模糊搜索该名称的Appx包,  |为连接符,  remove-AppxPackage 表示移除
get-AppxPackage *Ubuntu16* | remove-AppxPackage

这里还有个很不幸的情况(没错 这个坑我也替大家踩了),就是如果已经安装了Ubuntu16,没有第一时间卸载,但是cd到另一个目录 又同时安装了20 , 这个时候会导致filezilla 只能连上Ubuntu16系统, 20是连接不上去的。 这个时候需要卸载Ubuntu16,20 ,并且重启windows一定要重启 否则再安装Ubuntu20 会报错Add-AppxPackage : 部署失败,原因是 HRESULT: 0x80073CF6, 无法注册包

docker bios docker bios 华硕_jar_15

  1. 再次打开我们的docker ,这时在powerShell 里面输入 docker --version (注意是双横杠)验证是否安装成功

windows10 docker部署springboot项目

首先 mvn package 把springboot打成jar包

编写Dockerfile文件

可以在idea 右键new 一个Dockerfile 编写好后,和jar包一起复制到同个目录下

这里先给一个简单可用的例子 把内容复制进Dockerfile里面即可

# Docker image for springboot file run
# VERSION 0.0.1
# Author: qkj
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER qkj <1005738053@qq.com>
# 路径
# WORKDIR /app
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为bootdemo
ADD boot4dk.jar bootdemo
# 运行jar包
RUN bash -c 'touch /bootdemo'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/bootdemo"]

docker bios docker bios 华硕_devops_16

镜像导出、导入

我这里把我的项目 boot4dk.jar 和Dockerfile 都复制进了 D:\dockerEvn 目录下

docker启动命令

其中9090是docker对外端口 ,8080是springboot项目配置端口

docker run -p 9090:8080 -t boot4dk.jar

可以看到项目启动成功 注意jar包命名要用小写字母 不然会报错

docker bios docker bios 华硕_docker_17


docker bios docker bios 华硕_linux_18

docker查看列表命令

docker images

docker bios docker bios 华硕_docker bios_19


可以看到我们的boot4dk已经在里面了

docker 导出镜像命令

这句命令含义是 将 boot4dk.jar 导出至 d:\dockeros (注意这个路径也必须小写) 命名为bootdemo.tar ;
过程会有点慢 因为需要将java环境一起导出

docker save -o d:\dockeros\bootdemo.tar boot4dk.jar

docker bios docker bios 华硕_devops_20


docker bios docker bios 华硕_linux_21

docker 导入镜像命令

一定要注意是 < 输错了会导入失败 且导致镜像被破坏

docker load <bootdemo.tar
linux安装docker(ubuntu)

还记得前面我们启动docker前安装了一个linux子系统嘛 它可以派上用场了 先在子系统捣鼓熟练了 再上自己linux服务器吧!

双击启动Ubuntu :

docker bios docker bios 华硕_docker_22

docker bios docker bios 华硕_devops_23


默认root是没有密码的,截图中的用户名 是我创建的用户

docker bios docker bios 华硕_linux_24


在自己账户下输入命令

sudo passwd root

它会提示输入自己账户密码进行验证 验证完毕后 设置root账户密码

接下来切换到root用户

su root

将自带的旧版本docker卸载

apt-get remove docker docker-engine docker.io containerd runc

注意 apt-get 是 Ubuntu的命令, 在centos上面 则使用 yum 命令

避坑点: 上面提过 Ubuntu16是会有linux环境问题的 (体现在启动镜像时),但因为网上的教程五花八门
所以这个也需要了解一下 :在Ubuntu16 中apt-get安装docker方式 : apt-get install docker.io

在Ubuntu20 中 ,apt-get install docker.io 会报错,提示没有这个资源:Package docker.io is not available, but is referred to by another package. 有的教程会推荐 先apt-get update ,再apt-get install docker.io ,但是这个安装是没有docker服务的 启动docker服务时会出现 docker: unrecognized service , 下面介绍Ubuntu20正确安装方式 会比较繁琐:

# 更新apt工具
sudo apt update

# 安装必要的依赖软件,来添加一个新的 HTTPS 软件源
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 使用下面的 curl 导入源仓库的 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 将 Docker APT 软件源添加到你的系统
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 安装docker 最新版
sudo apt install docker-ce docker-ce-cli containerd.io

# 检查docker状态
service docker status    或  systemctl status docker

# 启动docker服务
 service docker start 或 systemct start docker

docker bios docker bios 华硕_jar_25

下载过程就是等待 等待过程发现有的时候它会假死在命令界面 时不时按几下enter键就好了

linux docker部署springboot

linux前提配置

核心是配置root可以远程登录 我们通过filezilla软件登录root账户 将windows上面的镜像传输到linux上面
写到这里不得不提一句 不知道是下载的Ubuntu这一个版本配置是这样 还是所有Ubuntu配置都一个德行 默认是禁止密码登录的,centos则没有这种问题 导致filezilla一直登录失败 没想到是这原因 踩了个天坑。

输入命令:

vim /etc/ssh/sshd_config

按键盘 i 键进入编辑模式 将 PermitRootLogin prohibit-password 注释掉
改成

PermitRootLogin yes

含义是 root禁止密码登录 改成可以远程登录

此外 还需要将PasswordAuthenticationChallengeResponseAuthentication都改为yes

PasswordAuthentication yes
ChallengeResponseAuthentication yes

重启ssh服务:

service ssh restart
或
systemctl restart ssh  (或将ssh改成sshd 取决于不同的Linux版本 在centos7,8中是sshd)

这里可能会报错 sshd: no hostkeys available – exiting.
输入下面命令 并连续按下回车

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

docker bios docker bios 华硕_docker_26

docker bios docker bios 华硕_devops_27

当然 也可能在某些Ubuntu版本中 出现多个提示:

docker bios docker bios 华硕_docker bios_28


分别输入命令 按回车 回车 ,总之就是它提示缺少什么 我们就按照名字生成一下

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
 ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
 ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
 ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

这个时候再重启ssh就可以了

docker bios docker bios 华硕_docker bios_29


生成key之后 不要忘记了输入重启命令

service ssh restart
或 systemctl restart ssh    (或sshd)

打开filezilla 测试是否能登录

docker bios docker bios 华硕_devops_30

把镜像复制进去linux虚拟机
这里我是在根目录建立了一个app文件夹 将镜像复制进app
复制完后 回到我们linux界面

linux 导入镜像

cd /app

再次强调命令是 < 输错了镜像也坏了 只能重新传一份了 或者一开始就cp命令备份一份

docker load <bootdemo.tar

docker bios docker bios 华硕_docker bios_31

linux 启动镜像

# 列出所有镜像
docker images
# 启动镜像
 docker run imageName

示例如下图 (我的bootdemo.tar 镜像名字为boot4dk.jar , 当然说它是仓库,不是镜像名也对 能懂就行 不咬文嚼字)

docker bios docker bios 华硕_docker_32

我们上面的举例是远程打包好了镜像 再进行导入的 那么如果想直接在linux上面部署项目至docker应该怎么做呢? 和windows教程类似:

# 最后面有个 . 表示dockerfile在当前目录
docker build  -t boot4dk.jar .
# build完之后 再run就好了 9090是docker对外端口 8080是项目端口
docker run -p 9090:8080 -t boot4dk.jar
(run 的时候可能会提示要登陆 没有账号的话  去它报错信息中给出提示的网站是注册一下就好了)
命令详解

docker常用命令

docker 服务启动相关命令 (注:指linux层面的服务)

systemctl 一般在centos高版本中使用 service 一般在centos低版本 或者 Ubuntu中使用

# docker 查看状态
systemctl status docker 或 service docker status

# 启动docker  
systemct start docker 或 service docker start

# 重启 docker
systemct restart docker 或 service docker restart

# 停止 docker
systemct stop docker 或 service docker stop

docker 启动相关命令

# docker构建 注意后面有个 .  表示dockerfile在当前路径
docker build -t  xxx.jar .

# docker 后台启动 并输出日志 其中9090是docker端口 8080是项目端口 xxx是jar包名  2>&1 表示错误 重定向标准输出
docker run  -d -p 9090:8080 -t xxx.jar >output 2>&1

# docker 停止服务 如果停止不了 就用下面的移除命令吧 containerId也可以是container name
docker stop containerId

docker 镜像相关命令

# 列出所有镜像
docker images

# 移除某个镜像 imageId或name都可以
docker rmi imageId

#  移除所有镜像
docker rmi $(docker images -aq)

# 列出所有容器(运行中)
docker container ls 或 docker ps

# 列出所有容器 (包括非运行)
 docker container ls -a

# 列出所有容器的id (包含非运行)
docker container ls -aq

# 删除所有未被 tag 标记和未被容器使用的镜像:
  docker image prune
  
 # 删除所有未被容器使用的镜像:
 docker image prune -a
    
  # 删除所有停止运行的容器:
  docker container prune

# 移除某个容器 
docker rm containerId

# 移除所有容器, $() 可以替换为反引号 ``
docker rm $(docker container ls -aq)

# 移除某个镜像下的容器 grew -w :精确查找,awk '{print $1}' awk语法 显示第一列(ID列)
docker rm -f `docker container ls -a|grep -w  ImageName|awk '{print $1}'` 

# 移除某个端口的容器
docker rm -f `docker container ls -a|grep -w  yourPort|awk '{print $1}'`

docker images完整的语法为 : docker images [OPTIONS] [REPOSITORY[:TAG]]

举个栗子 :docker images --digests boot4dk.jar:latest
类似的栗子: docker images -a 自己根据需要对命令进行组合
举一反三时间:现在知道日常工作中 敲其它命令 提示options时 该怎么写了吧?

OPTIONS说明:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

–digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

–format :指定返回值的模板文件;

–no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

Dockerfile命令详解

暂略 后面补充

linux安装docker(centos) 官方教程

地址: https://docs.docker.com/engine/install/centos/

教程到此结束了 本篇博客过程中列出了很多bug 踩坑点 多注意一下

踩的坑多了 路也就平了