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