Windows 10 下安装 Docker 替代虚拟机

1.与虚拟机实现模式

   虚拟机从OS级别开始模拟硬件来实现,而Docker是进程级别的模拟,在进程内实现了一个干净的OS.

   我们需要的服务是执行在容器中的,一个容器中除了基础的OS等信息外,就部署一个你需要的程序和相关依赖项,很干净,而且是进程级别的,你可以这样理解,一个容器就是一个进程

   比如说你需要Gitlab托管代码服务,那么你只要拉去一个Gitlab的 镜像就可以了。

2.安装条件

   Docker不是通用的容器,本质是只能跑在Linux下的,所以windows如果要玩转Docker,就必须安装Windows下的Linux子系统WSL,请参看另外一盘文章:Windows WSL下安装Linux系统

3.命令行安装docker

Linux 安装 Docker 也很简单,官方文档给出了多种安装方式,这里推荐使用官方脚本安装。

使用 curl 下载脚本:

curl -fsSL https://get.docker.com -o get-docker.sh

再执行该脚本:

sudo sh get-docker.sh

 会提示你用windows 的desktop程序来执行,不过不用理他,等待20秒

 

至此 docker完成安装

如果docker没有启动,需要启动,先切换到root账户,root密码可以重新设置

tim@PF3ARPVW:~$ su root
Password:
su: Authentication failure
tim@PF3ARPVW:~$ sudo passwd root
New password:
Retype new password:
passwd: password updated successfully

  

4.怎么下载网络镜像?

 直接docker run  nginx  就会在本地找 nginx本地镜像,如果没找到就会去远程仓库下载最新的镜像到本地然后运行起来

  docker search xxx // 搜索

  docker pull xxx  //下拉

  详见 Docker 基本操作

5.怎么导入本地镜像?

docker load < /mnt/f/gitlab-ce_13.7.4.tar

6.有的镜像有存储数据的怎么挂载本地Windows下的目录

  如果是已经把WSL安装在非系统盘,其实也没必要再挂在在windows目录下,就是挂在了你也在Windows目录下也不能打不开(待研究)

  数据有三层备份机制

   导出整个Linux 镜像到非系统盘

   导出单个服务为docker镜像。单个服务通过docker导出docker tag镜像,比如 gitlab-ce_13.7.4.tar 就是以前导出的gitlab镜像。

    先docker ps 看正在运行的容器,再把运行的容器导出为镜像,容器里面的数据应该也跟随打入了镜像,备份这个镜像就是有数据的

     

 

 

   服务内自身的数据导出功能。服务内比如Gitlab自身可以用命令行导出服务数据

7.启动容器

 这里把gitlab的数据挂载在它的宿主机中,挂载在windows 目录下一直提示权限问题,这里待解决,挂载在宿主机里面通过windows 资源管理器 \\wsl$ 也能打开

mkdir -p /usr/local/gitlab/config
mkdir -p /usr/local/gitlab/logs
mkdir -p /usr/local/gitlab/data

修改目录权限: 

chmod 777/usr/local/gitlab/config
chmod 777/usr/local/gitlab/log
chmod 777/usr/local/gitlab/data

运行

//挂载在WSL 虚拟机里面,也就是docker容器的宿主机,再往上的宿主是windows主机。三层关系
docker run -d --hostname gitlab.dalinsoft.com --publish 443:443 --publish 8080:80 --publish 22:22 --name gitlab --restart always --volume /usr/local/gitlab/config:/etc/gitlab --volume /usr/local/gitlab/logs:/var/log/gitlab --volume /usr/local/gitlab/data:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:13.7.4-ce.0 //没有挂载在windows 目录

 遇到端口占用的问题,可以看看怎么解决Linux 端口占用问题

 

 还原gitlab 备份数据,先把数据拷贝到WSL虚拟机,然后进入容器执行gitlab还原命令

 

 

  进入容器

docker exec -it gitlab /bin/bash

 执行gitlab还原命令,对话提示输入yes 就OK.

gitlab-rake gitlab:backup:restore BACKUP=1659839512_2022_08_07_13.7.4 //名字要对哦,

8.代码拉取

gitlab 部署到docker后,通过wsl 虚拟机IP+端口确实可以访问了  http:// 192.168.3.200:8080/8080/client/forestharvesting

但是代码怎么拉去呢?注意,这里本人踩过坑,下面的截图,Clone with SSH,怎么没有ssh 协议头呢? 也没有端口号2222。我们知道,拉去代码就两种协议,ssh or http.

如果就复制这个URL去拉去代码会失败。

 

 

 

 

 你可能说,是因为没加端口2222

 

 

加协议头,加端口 成功

 

 

那我们知道原因了,怎么让gitlab 自动补齐ssh协议头和端口号呢?

由于我们使用的docker部署,因此我们进入容器里面,修改/etc/gitlab/gitlab.rb

docker exec -it gitlab /bin/bash  //进入容器
vim /etc/gitlab/gitlab.rb //编辑文件

 

 最后让配置生效

gitlab-ctl reconfigure

 

 

9.Docker 容器排错

  如果一个容器老是自动重启或者启动后就停止了,可能容器有问题,就需要看容器日志,或者进入容器内看看什么情况

  显示容器日志

docker logs containner-name //查看截止到目前日志
docker logs -f containner-name //查看容器的动态日志

 进入容器内部, 修改权限什么的

docker exec -it container-name  /bin/bash

 

posted @ 2022-09-18 14:58  LearningAlbum  阅读(860)  评论(0编辑  收藏  举报